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?
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.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 nichtAntworten:
Versuchen Sie, diese Git-Einstellung zu verwenden, die bei NFS-Freigaben einen großen Leistungsunterschied darstellt:
quelle
Dieser Artikel enthält einige nützliche Tipps zum Optimieren der NFS-Leistung.
Insbesondere die Verwendung von
nfsstat -rc
, um zu überprüfen, wie viele "Wiederholungswiederholungsversuche" stattgefunden haben. Wenn es zu viele Wiederholungsversuche gibt, bedeutet dies, dass demnfsd
Daemon die Threads für die Serviceanforderungen der Clients ausgegangen sind und Sie die Anzahl der verfügbaren Threads erhöhen müssen.Stellen Sie außerdem sicher, dass Ihre VirtualBox-Instanz nicht dünn bereitgestellt ist. Thin Provisioning Storage auf VirtualBox ist ein erheblicher Leistungseinbruch, wenn Schreibvorgänge ausgeführt werden.
quelle
In einer anderen Antwort wird bereits die Überprüfung der NFS-Statistiken erwähnt.
Es könnte sich lohnen, verschiedene (virtuelle) Nic-Konfigurationen für die VirtualBox VM auszuprobieren - verschiedene virtuelle Chipsätze und Modi (Bridged-Modus anstelle von Nat).
Wenn NFSv4 verwendet wurde, kann es sich auch lohnen, stattdessen NFSv3 auszuprobieren. Diese Versionen sind sehr unterschiedlich und dies kann einen erheblichen Unterschied in der Leistung bewirken.
quelle