Comment obtenir des performances NFS décentes pour des charges de travail comme git?

8

Je gère une vagrantconfiguration pour nos développeurs exécutant OSX pour gérer les systèmes VirtualBox pour le développement.

Afin de prendre en charge l' inotifyintérieur de la machine Linux, nous évitons la méthode habituelle de partage de répertoires avec VirtualBox: à la place, la machine Virtualbox expose un partage NFS, qui est monté dans OSX.

Git (et les outils associés comme sourcetree) sont exécutés dans OSX, sur le répertoire partagé. Les performances sont extrêmement médiocres: il faut souvent jusqu'à 5 secondes pour fonctionner git status. Le clonage d'un petit référentiel dans le lecteur NFS monté peut prendre quelques minutes (5 à 10 secondes sur un lecteur local).

Évidemment, les performances NFS seront pires que d'écrire directement sur un SSD local, mais le NFS ne fait que fonctionner sur une interface de réseau privé virtuel avec Virtualbox.

J'ai couru quelques repères. La première:

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

Chaque résultat est basé sur 100 échantillons.

# 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

Le deuxième repère:

ioping -c 500

local avg: 6 microseconds
local IOPS: 65.5 k

NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k

De toute évidence, une certaine latence est inévitable, mais cela est suffisamment grave pour rendre certaines tâches simples assez douloureuses.

Le propriétaire du volume exécute Ubuntu 12.10 (Quantal), avec les paramètres par défaut. Le système qui monte le volume exécute OSX Mavericks.

Pour le moment, la connexion nfsd principale fonctionne sur UDP, ce qui semble idéal sur une connexion virtuelle. Je ne sais pas si statsdet lockdfonctionnent sur TCP et UDP.

J'ai essayé de monter avec le asyncdrapeau, et avec rwsizeboosté, et cela n'a fait aucune différence.

Quelles sont les possibilités d'améliorer sérieusement les performances de NFS dans cet environnement?

Cera
la source
Dans l'état actuel des choses, le problème n'a pas été résolu mais nous l'avons atténué considérablement (améliorations jusqu'à 15x) en utilisant une interface réseau Virtualbox différente: Am79C973au lieu de virtio. La leçon ici est d'avoir examiné de plus près ce que faisaient les systèmes: jusqu'à un certain point, le goulot d'étranglement semble être les performances du réseau virtuel.
Cera
J'ai un problème similaire. L'exécution à git statuspartir de la machine invitée prend environ 5 secondes. Sur la machine hôte qui est OSX, elle est silencieuse et rapide. Ma configuration est le dernier répertoire vagabond, vb, NFS partagé. Comment avez-vous changé l'interface, j'ai essayé de le faire mais je n'ai pas compris cela. En outre, cela est devenu plus perceptible après une mise à jour. Je n'avais pas ce problème au début
Ali

Réponses:

6

Essayez d'utiliser ce paramètre Git, qui fait une énorme différence de performances sur les partages NFS:

git config core.preloadindex true
salut toi
la source
Pourquoi cela fait-il une différence de performance?
Wildcard
Vous pouvez en savoir plus sur cette propriété ici: git-scm.com/docs/git-config#git-config-corepreloadIndex
heyyo
5

Cet article contient quelques conseils utiles pour régler les performances NFS.

En particulier, l'utilisation de nfsstat -rcpour vérifier combien de «nouvelles tentatives de retransmission» avaient eu lieu. S'il y a trop de tentatives, cela signifie que le nfsddémon a manqué de threads pour répondre aux demandes des clients, et vous devez augmenter le nombre de threads disponibles.

Assurez-vous également que votre instance VirtualBox n'est pas provisionnée de manière fine; le stockage provisionné fin sur VirtualBox est un impact significatif sur les performances lors des écritures.

pepoluan
la source
Merci pour votre réponse. La chose dynamique vs volume fixe est intéressante - j'ai fait une lecture qui a indiqué que la différence de performance était un mythe, bien que si votre expérience est que cela a aidé, cela pourrait être un essai.
Cera
Cela dépend beaucoup du stockage physique sous-jacent ... une partition vide avec des tas d'espace libre? Le coup de performance pourrait être moins perceptible. Une partition avec déjà pas mal d'objets? La VBox devra attendre que l'OS «cherche» des blocs d'espace vide pour répondre à la demande de croissance.
pepoluan
@pepoluan - était-ce avec un lecteur magnétique ou SSD?
analytik
Entraînement magnétique @analytik. Avec le SSD, je pense que la fragmentation ne sera jamais un problème, et vous pouvez utiliser en toute sécurité un stockage alloué léger. Heck, même s'il y a un impact sur les performances, étant donné que le $ / Go de SSD est toujours plus élevé que celui des disques magnétiques, j'irai en provisioning fin.
pepoluan
0

Une autre réponse mentionne déjà la vérification des statistiques NFS.

Il peut être utile d'essayer différentes configurations nic (virtuelles) pour VirtualBox vm - différents chipsets et modes virtuels (mode ponté au lieu de nat).

De plus, si NFSv4 a été utilisé, il peut être préférable d'essayer NFSv3 à la place. Ces versions sont très différentes et cela peut faire une différence significative dans les performances.

basic6
la source