Wie bekomme ich eine anständige NFS-Leistung für Workloads wie Git?

8

Ich verwalte ein vagrantSetup für unsere Entwickler unter OSX, um VirtualBox-Systeme für die Entwicklung zu verwalten.

Um die Unterstützung inotifyinnerhalb 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 statsdund lockdüber TCP und UDP laufen.

Ich habe versucht, mit der asyncFlagge und mit rwsizeBoost zu montieren, und es machte wenig Unterschied.

Welche Möglichkeiten gibt es, um die Leistung von NFS in diesem Umfeld ernsthaft zu verbessern?

Cera
quelle
Derzeit ist das Problem noch nicht gelöst, aber wir haben es erheblich gemindert (Verbesserungen um das bis zu 15-fache), indem wir eine andere Virtualbox-Netzwerkschnittstelle verwendet haben: Am79C973anstelle von virtio. 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.
Cera
Ich habe ein ähnliches Problem. Das Ausführen git statusvom 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
Ali

Antworten:

6

Versuchen Sie, diese Git-Einstellung zu verwenden, die bei NFS-Freigaben einen großen Leistungsunterschied darstellt:

git config core.preloadindex true
Heyyo
quelle
Warum macht es einen Leistungsunterschied?
Wildcard
Sie können mehr über diese Eigenschaft hier lesen: git-scm.com/docs/git-config#git-config-corepreloadIndex
heyyo
5

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 dem nfsdDaemon 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.

pepoluan
quelle
Vielen Dank für Ihre Antwort. Die Sache mit der dynamischen oder der festen Lautstärke ist interessant - ich habe etwas gelesen, das darauf hinwies, dass der Leistungsunterschied ein Mythos war. Wenn Sie jedoch die Erfahrung gemacht haben, dass es geholfen hat, könnte es ein Versuch sein.
Cera
Es hängt sehr stark vom zugrunde liegenden physischen Speicher ab ... einer leeren Partition mit Unmengen an freiem Speicherplatz? Der Leistungseinbruch ist möglicherweise weniger auffällig. Eine Partition mit schon ziemlich vielen Objekten? VBox muss warten, während das Betriebssystem nach leeren Speicherblöcken sucht, um die Wachstumsanforderung zu erfüllen.
Pepoluan
@pepoluan - war das mit einem Magnetlaufwerk oder einer SSD?
Analytik
@analytik Magnetantrieb. Ich denke, mit SSD wird die Fragmentierung niemals ein Problem sein, und Sie können sicher mit Thin Provisioning Storage arbeiten. Heck, selbst wenn es einen Leistungseinbruch gibt, wenn man bedenkt, dass die $ / GB SSD immer noch höher sind als die von Magnetlaufwerken, werde ich dünn bereitgestellt.
Pepoluan
0

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.

basic6
quelle