NFS-Leistungsprobleme bei Debian

9

Ich habe eine sehr inkonsistente Leistung mit NFS zwischen zwei pfeifenden Maschinen, und ich kann es nicht fassen.

Installieren:

Maschine 1 'video1': Dual 5506 mit 12 GB RAM, XFS auf 8x3 TB RAID6, exportiert als 'video1' aus '/ mnt / storage'

Maschine 2 'Speicher1': Phenom X2 @ 3,2 Ghtz mit 8 GB RAM, ZFS auf 5 x 2 TB, exportiert als 'Speicher1' aus / mnt / Speicher1-Speicher

Lokale Schreibleistung:

mackek2@video1:/mnt/storage/testing$ dd if=/dev/zero of=localwrite10GB bs=5000k count=2000
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 16.7657 s, 611 MB/s

Lokale Leseleistung:

Beide sind mit demselben HP Gigabit-Switch verbunden, und iperf bietet in beide Richtungen solide 940 MBit / s.

Mein Problem ist, dass beim Schreiben in den Video1-Export aus Speicher1 die Leistung allgegenwärtig ist. Bei den ersten (5-7) Gigs der Dateiübertragung (ich hoffe, dass ich so schnell wie möglich zwischen 30 und 120 GB AVCHD- oder MJPEG-Dateien verschieben kann) scheint die Leistung von 900 MBit / s auf 150 bis 180 MBit / s zu sinken langsam wie 30mbps. Wenn ich den NFS-Kernel-Server neu starte, nimmt die Leistung für einige weitere Auftritte wieder zu.

mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GB count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 223.794 s, 45.8 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite10GBTest2 count=2000 bs=5000K
2000+0 records in
2000+0 records out
10240000000 bytes (10 GB) copied, 198.462 s, 51.6 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=bigfile776 count=7000 bs=2000K
7000+0 records in
7000+0 records out
14336000000 bytes (14 GB) copied, 683.78 s, 21.0 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=/dev/zero of=remoteWrite15GB count=3000 bs=5000K
3000+0 records in
3000+0 records out
15360000000 bytes (15 GB) copied, 521.834 s, 29.4 MB/s

Wenn die Dinge schnell gehen, gibt nfsiostat auf dem Client durchschnittliche RTTs von einigen ms aus, schießt jedoch bis zu 1,5 Sekunden RTT, sobald die Leistung sinkt. Zusätzlich springt die Tiefe der CPU-Warteschlange während des Schreibvorgangs auf über 8.

Wenn ich jetzt aus demselben Export lese, bekomme ich schöne 890 Mbit / s, die für den gesamten Lesevorgang ein paar Mbit / s geben oder nehmen.

mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite10GBTest2 of=/dev/null
20000000+0 records in
20000000+0 records out
10240000000 bytes (10 GB) copied, 89.82 s, 114 MB/s
mackek2@storage1:/mnt/video1/testing$ dd if=remoteWrite15GB of=/dev/null
30000000+0 records in
30000000+0 records out
15360000000 bytes (15 GB) copied, 138.94 s, 111 MB/s

Das Gleiche passiert umgekehrt mit storage1 als NFS-Server. Die CPU-Warteschlange springt hoch, die Geschwindigkeit sinkt und ich ziehe mir die Haare aus.

Ich habe versucht, die Anzahl der NFS-Dämonen auf bis zu 64 zu erhöhen, und nach ein paar Auftritten stottert es immer noch.

Kyle M.
quelle
... asynchrone Option beim Export behoben. Nun, um zu sehen, ob ich mit Jumbo-Frames noch ein paar MBit / s herausholen kann.
Kyle M
1
Bitte poste dies als Antwort und akzeptiere es, wenn du kannst, damit andere wissen, dass das Problem gelöst ist.
mgorven

Antworten:

4

Sie geben Ihre Mount- oder Exportoptionen nicht an, daher gibt es bei NFS eine Reihe von Faktoren, die sich auf die Leistung auswirken können. Ich würde empfehlen, die folgenden Optionen für maximale NFS-Leistung und Zuverlässigkeit auszuprobieren (basierend auf meinen Erfahrungen):

  • Mount-Optionen: tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768

  • Exportoptionen: async

Christopher Cashell
quelle
Nur eine Anmerkung: Die oben genannten Mount-Optionen werden auch von Oracle für die Ausführung von Oracle über NFS empfohlen.
Christopher Cashell
Mit dem obigen Tipp konnte ich auch die Leistung deutlich verbessern, war aber nfsvers=3nicht notwendig.
Anarcat
@anarcat - Für moderne Releases haben Sie Recht, nfsvers=3es ist nicht so wichtig. Linux-NFS-Bereitstellungen werden standardmäßig auf NFS Version 2 verwendet, sofern Sie nicht Version 3 angegeben haben. In diesen Fällen hat es sich sehr gelohnt, die Version explizit festzulegen. In modernen Versionen wird mount verhandeln, beginnend mit v4, dann v3 versuchen und dann auf v2 zurückgreifen.
Christopher Cashell