Je gère une vagrant
configuration pour nos développeurs exécutant OSX pour gérer les systèmes VirtualBox pour le développement.
Afin de prendre en charge l' inotify
inté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 statsd
et lockd
fonctionnent sur TCP et UDP.
J'ai essayé de monter avec le async
drapeau, et avec rwsize
boosté, 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?
git status
partir 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
Am79C973
au lieu devirtio
. 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.