¿Cómo obtener un rendimiento NFS decente para cargas de trabajo como git?

8

Administro una vagrantconfiguración para nuestros desarrolladores que ejecutan OSX para administrar los sistemas VirtualBox para el desarrollo.

Para admitir inotifydentro de la máquina Linux, evitamos el método habitual de compartir directorios con VirtualBox: en cambio, la máquina Virtualbox expone un recurso compartido NFS, que está montado en OSX.

Git (y herramientas relacionadas como sourcetree) se ejecutan en OSX, en el directorio compartido. El rendimiento de esto es extremadamente pobre: ​​a menudo tarda hasta 5 segundos en ejecutarse git status. La clonación de un pequeño repositorio en la unidad NFS montada puede llevar un par de minutos (5-10 segundos en una unidad local).

Obviamente, el rendimiento de NFS será peor que escribir directamente en un SSD local, pero el NFS solo se ejecuta en una interfaz de red privada virtual con Virtualbox.

Ejecuté un par de puntos de referencia. El primero:

dd if=/dev/zero of=test bs=16 count=16384

Cada resultado se basa en 100 muestras.

# local drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.990   1.000   1.020   1.021   1.030   1.130

# on the shared NFS drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
6.000   6.278   6.390   6.482   6.570   7.630

# inside the VirtualBox instance
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.3600  0.4800  0.5150  0.5552  0.5400  1.4500

El segundo punto de referencia:

ioping -c 500

local avg: 6 microseconds
local IOPS: 65.5 k

NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k

Es evidente que cierta latencia es inevitable, pero esto es lo suficientemente malo como para que algunas tareas simples sean bastante dolorosas.

El propietario del volumen ejecuta Ubuntu 12.10 (Quantal), con la configuración predeterminada. El sistema que monta el volumen ejecuta OSX Mavericks.

En este momento, la conexión principal de nfsd se ejecuta a través de UDP, lo que parece ideal en una conexión virtual. No estoy seguro de si statsdy lockdse están ejecutando a través de TCP y UDP.

Traté de montar con la asyncbandera, y con rwsizeimpulso, y no hizo mucha diferencia.

¿Qué oportunidades hay para mejorar seriamente el rendimiento de NFS en este entorno?

Cera
fuente
Tal como está, el problema no se ha resuelto, pero lo hemos mitigado sustancialmente (mejoras de hasta 15x) mediante el uso de una interfaz de red Virtualbox diferente: en Am79C973lugar de virtio. La lección aquí es haber observado más de cerca lo que estaban haciendo los sistemas: hasta cierto punto, el cuello de botella parece ser el rendimiento de la red virtual.
Cera
Tengo un problema similar. La ejecución git statusdesde la máquina invitada tarda unos 5 segundos. En la máquina host que es OSX, es silenciosa rápidamente. Mi configuración es la última vagabunda, vb, directorio compartido NFS. ¿Cómo cambiaste la interfaz? Intenté hacerlo, pero no lo he resuelto. Además, esto se hizo más notable después de alguna actualización. No tuve este problema al principio
Ali

Respuestas:

6

Intente usar esta configuración de Git, que hace una gran diferencia de rendimiento en los recursos compartidos de NFS:

git config core.preloadindex true
Hey tú
fuente
¿ Por qué hace una diferencia de rendimiento?
Comodín
Puede leer más sobre esta propiedad aquí: git-scm.com/docs/git-config#git-config-corepreloadIndex
heyyo
5

Este artículo contiene algunos consejos útiles para ajustar el rendimiento de NFS.

Particularmente el uso de nfsstat -rcpara verificar cuántos 'reintentos de retransmisión' habían estado sucediendo. Si hay demasiados reintentos, eso significa que el nfsddemonio se quedó sin hilos para atender las solicitudes de los clientes, y necesita aumentar el número de hilos disponibles.

Además, asegúrese de que su instancia de VirtualBox no esté bien aprovisionada; El almacenamiento de aprovisionamiento delgado en VirtualBox es un éxito significativo cuando se producen escrituras.

pepoluan
fuente
Gracias por su respuesta. Lo dinámico frente al volumen fijo es interesante: hice algunas lecturas que indicaban que la diferencia de rendimiento era un mito, aunque si su experiencia es que ayudó, podría ser una prueba.
Cera
Depende mucho del almacenamiento físico subyacente ... ¿una partición vacía con montones de espacio libre? El impacto en el rendimiento podría ser menos notable. ¿Una partición con bastantes objetos ya? VBox tendrá que esperar mientras el sistema operativo 'busca' bloques de espacio vacío para cumplir con la solicitud de crecimiento.
pepoluan
@pepoluan: ¿fue eso con una unidad magnética o SSD?
analytik 01 de
Unidad magnética @analytik. Con SSD, creo que la fragmentación nunca será un problema, y ​​puede ir con seguridad con almacenamiento de aprovisionamiento delgado. Diablos, incluso si hay un impacto en el rendimiento, teniendo en cuenta que el $ / GB de SSD sigue siendo mucho más alto que el de la unidad magnética, iré con poco aprovisionamiento.
pepoluan
0

Otra respuesta ya menciona verificar las estadísticas de NFS.

Puede valer la pena probar diferentes configuraciones nic (virtuales) para VirtualBox vm: diferentes conjuntos de chips y modos virtuales (modo puente en lugar de nat).

Además, si se utilizó NFSv4, puede valer la pena probar NFSv3 en su lugar. Esas versiones son muy diferentes y esto puede hacer una diferencia significativa en el rendimiento.

básico6
fuente