2011-11-29 48 views
19

Tengo un problema con el almacenamiento en memoria caché de los atributos NFS del lado del cliente. Estoy usando algunos servidores, uno es un servidor NFS y los otros son servidores cliente NFS.comando de limpieza de caché NFS?

Todos los servidores son Debian (lenny, 2.6.26-2-amd64 de Linux) y las versiones son las siguientes.

% dpkg -l | grep nfs 
ii libnfsidmap2      0.20-1      An nfs idmapping library 
ii nfs-common       1:1.1.2-6lenny1   NFS support files common to client and server 
ii nfs-kernel-server     1:1.1.2-6lenny1   support for NFS kernel server 

En el servidor NFS,/etc/exports se escribe de la siguiente manera:

/export-path 192.168.0.0/255.255.255.0(async,rw,no_subtree_check) 

En los clientes NFS,/etc/fstab se escribe de la siguiente manera:

server:/export-path  /mountpoint nfs rw,hard,intr,rsize=8192,async 0 0 

Como Como puede ver, la opción "asincrónica" se usa para el rendimiento de acceso de múltiples clientes. Sin embargo, a veces esto puede causar errores de almacenamiento en caché falso.

Dado que mantengo muchos servidores (y no tengo un permiso tan fuerte para cambiar las opciones de montaje), no quiero modificar/etc/exports ni/etc/fstab. Creo que es suficiente si tengo una herramienta de línea de comandos que "limpia" el caché de atributos del lado del cliente NFS con un permiso de usuario.

Por favor, hágamelo saber si hay tales órdenes.

Gracias,


(en anexo)

quiero decir con "errores falsos de almacenamiento en caché",

% ls -l /data/1/kabe/foo     
ls: cannot access /data/1/kabe/foo: No such file or directory 
% ssh another-server 'touch /data/1/kabe/foo' 
% ls -l /data/1/kabe/foo 
ls: cannot access /data/1/kabe/foo: No such file or directory 

A veces estos casos ocurren. El problema no es un contenido de archivo sino atributos de archivo (= información de dentries) ya que NFS dice que garantiza la coherencia de Close-to-Open.

+0

Encontré esta pregunta mientras investigaba posibles soluciones a este problema (+1 para eso). Preferiría no tener memoria caché local o un tiempo de caducidad muy corto de la caché local si NFS no puede proporcionar coherencia en caso contrario. Gigabit LAN no debería ser un gran obstáculo, así que no espero demasiada pérdida de rendimiento al hacerlo. Una solución ideal sería que el servidor supervise los cambios en el sistema de archivos y notifique a los clientes cuándo deben calarse sus cachés, pero no creo que NFS admita esto. – Tronic

+0

Dado que el ancho de banda no es significativo aquí, sino * latencia *, la LAN Gigabit todavía tiene algún impacto en el rendimiento. FWIW, 'lookupcache = none' elevó el tiempo para' git clone' de 2.7 a 20 segundos para mí. –

Respuesta

18

Según lo que quiere decir con "errores de almacenamiento en memoria caché falso", ejecutando sync puede obtener lo que necesita. Esto eliminará todos los búferes del sistema de archivos.

Si es necesario, también puede borrar los cachés de VM en el kernel usando /proc/sys/vm/drop_caches.

# To free pagecache 
echo 1 > /proc/sys/vm/drop_caches 

# To free dentries and inodes 
echo 2 > /proc/sys/vm/drop_caches 

# To free pagecache, dentries and inodes 
echo 3 > /proc/sys/vm/drop_caches 
+0

Gracias por su respuesta. Agregué lo que quiero decir con "errores de almacenamiento en memoria caché" a mi pregunta. Este problema no ha sido resuelto solo por 'sync'. Creo que el segundo de tus comandos de propuesta, así que lo intentaré más tarde. –

+0

Esto funcionó! Muchas gracias. –

+1

Tengo el mismo problema, quiero sincronizar en una carpeta específica, supongamos que no tengo root, por lo que no puedo ejecutar los comandos propuestos – Zamir

1

/var lib/nfs/archivo claro/rmtab en el servidor NFS.

Los siguientes comandos se utilizan para eliminar los problemas relacionados con la memoria. y es muy peligroso también. soem veces que se colgará ur aplicación alojada en la caja

# sync 

# To free pagecache 
echo 1 > /proc/sys/vm/drop_caches 

# To free dentries and inodes 
echo 2 > /proc/sys/vm/drop_caches 

# To free pagecache, dentries and inodes 
echo 3 > /proc/sys/vm/drop_caches 
3

yo sepa, los sync y async opciones no son la fuente de almacenamiento en caché de atributos. Async le permite al servidor retrasar el guardado de datos en el sistema de archivos del servidor, p. afecta la durabilidad de escritura en caso de fallas en el servidor NFS, pero si el servidor NFS es estable, entonces async no afecta a los clientes NFS.

Hay una opción de montaje NFS lookupcache=positive que se puede usar para evitar el almacenamiento en caché de búsqueda negativa, p. Ej. el NFS devuelve "No such archivo o directorio" cuando el archivo realmente existe en el servidor. Consulte Directory entry caching en man nfs.

6

Dentro de un proceso determinado, la invocación de opendir y closedir en el directorio principal de un archivo invalida la caché NFS. Lo usé mientras programaba un programador de trabajo. Muy, muy útil. ¡Intentalo!

+0

Muchas gracias por esta sugerencia – mob

1

Está viendo los efectos de la memoria caché de atributos de NFS. Vea man nfs, y revise DATA AND METADATA COHERENCE.

NFS por caches atributos predeterminados durante un mínimo de 30 segundos (acregmin y acdirmin) y un máximo de 60 segundos (acregmax y acdirmax). Puede anular todos estos junto con actimeo, o deshabilitar completamente el caché de atributos con noac. Con la opción de montaje noac, el comportamiento descrito por el OP desaparece, pero alcanza el rendimiento.

lookupcache=positive es útil si solo está buscando la apariencia de archivos nuevos, pero las eliminaciones seguirán atravesando la memoria caché de atributos.