Ich verwalte ein vagrant
Setup für unsere Entwickler unter OSX, um VirtualBox-Systeme für die Entwicklung zu verwalten.
Um die Unterstützung inotify
innerhalb des Linux-Computers zu unterstützen, verzichten wir auf die übliche Methode zum Freigeben von Verzeichnissen mit VirtualBox: Stattdessen stellt der Virtualbox-Computer eine NFS-Freigabe bereit, die in OSX bereitgestellt wird.
Git (und verwandte Tools wie Sourcetree) werden in OSX im freigegebenen Verzeichnis ausgeführt. Die Leistung ist extrem schlecht: Es dauert oft bis zu 5 Sekunden, um zu laufen git status
. Das Klonen eines kleinen Repositorys in das bereitgestellte NFS-Laufwerk kann einige Minuten dauern (5-10 Sekunden auf einem lokalen Laufwerk).
Offensichtlich ist die NFS-Leistung schlechter als das direkte Schreiben auf eine lokale SSD, aber der NFS läuft nur über eine virtuelle private Netzwerkschnittstelle mit Virtualbox.
Ich habe ein paar Benchmarks durchgeführt. Der Erste:
dd if=/dev/zero of=test bs=16 count=16384
Jedes Ergebnis basiert auf 100 Proben.
# 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
Der zweite Maßstab:
ioping -c 500
local avg: 6 microseconds
local IOPS: 65.5 k
NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k
Natürlich ist eine gewisse Latenz unvermeidlich, aber das ist schlimm genug, dass einige einfache Aufgaben ziemlich schmerzhaft sind.
Der Besitzer des Volumes führt Ubuntu 12.10 (Quantal) mit Standardeinstellungen aus. Auf dem System, auf dem das Volume bereitgestellt wird, werden OSX Mavericks ausgeführt.
Im Moment läuft die Haupt-NFSD-Verbindung über UDP, was über eine virtuelle Verbindung ideal erscheint. Ich bin nicht sicher, ob statsd
und lockd
über TCP und UDP laufen.
Ich habe versucht, mit der async
Flagge und mit rwsize
Boost zu montieren, und es machte wenig Unterschied.
Welche Möglichkeiten gibt es, um die Leistung von NFS in diesem Umfeld ernsthaft zu verbessern?
git status
vom Gastcomputer dauert ca. 5 Sekunden. Auf dem Host-Computer, der OSX ist, ist es sehr schnell. Mein Setup ist das neueste freigegebene NFS-Verzeichnis von vagrant, vb. Wie haben Sie die Benutzeroberfläche geändert? Ich habe versucht, dies zu tun, habe dies jedoch nicht herausgefunden. Auch dies wurde nach einigen Updates deutlicher. Ich hatte dieses Problem am Anfang nicht
Am79C973
anstelle vonvirtio
. Die Lehre hier ist, genauer hinzuschauen, was die Systeme taten: Bis zu einem gewissen Punkt scheint der Engpass die Leistung des virtuellen Netzwerks zu sein.