Aumentar el uso de memoria en el servidor NFS

Aumentar el uso de memoria en el servidor NFS

Estoy produciendo datos (archivos de 100 GB) que finalmente se copian a un servidor mediante NFS v4.2, en una red de 10 Gb. Estos archivos se almacenan en muchos discos duros, con formato XFS (una copia por unidad de destino).

Cuando se están ejecutando las tareas de copia:

  • Hay un gran uso de memoria en el cliente.(podría ser más de 64 GB, requiere tanta memoria como sea posible).
  • Pero casi no se utiliza RAM en el servidor.

Me gustaría reducir el uso de memoria de los clientes, ya que producen datos continuamente y eso los ralentiza. Por el contrario, el servidor prácticamente no se utiliza.

Supongo que dado que los discos duros son lentos en el servidor, el cliente almacena en el búfer tantos datos como puede para que la copia se bloquee menos. No puedo cambiar la configuración del hardware.

¿Hay alguna forma de obligar al servidor a almacenar en caché más datos? Preferiría priorizar el uso de la memoria del servidor en lugar de la memoria del cliente.

La configuración NFS:

10.0.3.1:/          /mnt/field  nfs  nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/exports:

/mnt        10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

Configuración de nic en el servidor:

MTU 9000
rinbuffer tx 512, rx 1024

Configuración de NIC en el cliente:

MTU 9000
rinbuffer tx 1024, rx 512

Editar: Según lo solicitado, /proc/meminfo:

Servidor de cliente ------ -------------------------

ingrese la descripción de la imagen aquí

Un monitor del uso de memoria en este cliente:

ingrese la descripción de la imagen aquí

Uso de la red:

ingrese la descripción de la imagen aquí

Nota: El cliente utiliza un tmpfs grande (100 GB) para calcular. Creo que este tmpfs nunca se resta del recuento de memoria disponible.

Editar2:

La correlación entre el uso de la red y la memoria es más obvia en el otro cliente (debería haber comenzado con eso). Este cliente no utiliza ningún tmpfs.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Respuesta1

Me gustaría reducir el uso de memoria de los clientes, ya que producen datos continuamente y eso los ralentiza.

¿Cómo sabes esto? La mayor parte de la memoria del cliente está en el caché de la página, lo cual es completamente normal e incluso mejorar el almacenamiento en el servidor no evitará el almacenamiento en caché agresivo de estos datos del lado del cliente.

¿Ha intentado vaciar el caché de la página (como prueba) y ver cómo funciona su aplicación sin el uso del caché de la página?

NFS tiene lo que se conoce como consistencia "cerca de abierta", lo que significa que en realidad solo se garantiza que el contenido de los datos y metadatos sea estable cuando no se tiene el archivo abierto activamente (es decir, otro cliente puede cambiar el archivo en otro). sistema y usted no se daría cuenta).

Debido a esta limitación de coherencia, las aplicaciones de los sistemas cliente NFS confían en la caché de páginas para garantizar que los datos estén disponibles para una lectura posterior en caso de que sea necesario.

Dicho todo esto, sin saber qué está pasando en su /etc/exportsúnico método para descargar más datos en el servidor, podría ser asegurarse de montar NFS en sus clientes con la syncopción de montaje y en su servidor exportar las rutas con la asyncopción de montaje.

Esto tendrá el efecto de garantizar que las escrituras se envíen al servidor en el lado del cliente, mientras que el servidor siempre responderá "hecho" antes de enviar los datos al disco.

Sin embargo, esto afectará el rendimiento de los clientes, ya que causará latencia debido a la validación de cada solicitud en el lado del cliente, pero el servidor almacenará en el búfer muchos más datos, ya que no esperará a que los datos lleguen primero al disco. Probablemente también desee modificar los dirty_write_centisecsbits y otros en el servidor para permitirle almacenar en el buffer más datos en escritura diferida.

Sin embargo, aquí está el problema: es probable que esto haga que los clientes se ralenticen y reduzca la integridad de los servidores ante una falla. Si el servidor falla, podría perder datos.

Además, esto no afectará el uso de memoria para el caché de páginas en los clientes sobre los cuales NFS no tiene control real.

Considerándolo todo, soy escéptico al reducir el uso de memoria de los clientes (si es el caché de la página lo que está midiendo aquí) mejorará el rendimiento de sus clientes.

Respuesta2

No, es probable que forzar el uso de menos memoria haga que las cosas sean más lentas, no más rápidas. Ya estás gastando energía en 188 GB de DRAM rápida, también podrías usarla.

El host del cliente tiene 188 GB de MemTotal y está usando 162 GB para caché. En realidad, la demanda de memoria es bastante baja, tenga en cuenta 123 GB MemAvailable que se pueden liberar muy rápidamente. La mayor parte de los 40 GB de Shmem son probablemente tmpfs.

Como Cached + Shmem suma más que MemTotal, sospecho que tmpfs se cuenta dos veces, como memoria compartida y en cachés. También explicaría cómo Cached menos Shmem es aproximadamente MemAvailable, los tmpf que carecen de almacenamiento persistente no se pueden liberar.

Del lado del servidor, 15 GB y cambio MemTotal, 13 GB en Cached. Mucha memoria disponible en este host. Presumiblemente, la mayor parte de lo que hace es para archivos, no para muchas otras demandas de memoria.

Sin evidencia de gastos generales comointensa actividad de vmscano se está quedando sin MemAvailable, no recomiendo tomar ninguna medida.

información relacionada