Ich habe zwei Maschinen mit 10 Gbit Ethernet verbunden. Einer von ihnen sei der NFS-Server und ein anderer der NFs-Client.
Das Testen der Netzwerkgeschwindigkeit über TCP mit einem iperf
Durchsatz von ~ 9,8 Gbit / s in beide Richtungen zeigt, dass das Netzwerk in Ordnung ist.
Testen der Festplattenleistung des NFS-Servers:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Das Ergebnis ist ~ 150 MByte / s, sodass die Festplatte zum Schreiben einwandfrei funktioniert.
Server /etc/exports
ist:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
Der Client stellt diese Freigabe lokal /mnt/test
mit folgenden Optionen bereit:
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
Wenn ich versuche, eine große Datei (~ 5 GB) von der NFS-Freigabe auf den Client-Computer herunterzuladen, erhalte ich eine Leistung von ~ 130-140 MB / s, was der Leistung der lokalen Festplatte des Servers nahekommt.
Wenn ich jedoch versuche, eine große Datei auf die NFS-Freigabe hochzuladen, beginnt der Upload bei ~ 1,5 MB / s, steigt langsam auf 18-20 MB / s an und hört auf zuzunehmen. Manchmal "hängt" die Freigabe für ein paar Minuten, bevor der Upload tatsächlich beginnt, dh der Datenverkehr zwischen den Hosts nähert sich Null, und wenn ich ihn ausführe ls /mnt/test
, kehrt er innerhalb von ein oder zwei Minuten nicht zurück. Dann ls
kehrt der Befehl zurück und der Upload beginnt mit der anfänglichen Geschwindigkeit von 1,5 Mbit / s.
Wenn die Upload-Geschwindigkeit das Maximum erreicht (18-20 Mbytes / s), starte ich iptraf-ng
und es zeigt ~ 190 Mbit / s Verkehr auf der Netzwerkschnittstelle, so dass das Netzwerk hier kein Engpass ist, ebenso wie die Festplatte des Servers.
Was ich versucht habe:
1.
Richten Sie einen NFS-Server auf einem dritten Host ein, der nur mit einer 100-Mbit-Ethernet-Netzwerkkarte verbunden war. Die Ergebnisse sind analog: DL zeigt eine gute Leistung und eine fast vollständige 100-Mbit-Netzwerkauslastung. Der Upload erfolgt nicht schneller als Hunderte von Kilobyte pro Sekunde, sodass die Netzwerkauslastung sehr niedrig ist (laut Angaben 2,5 Mbit / s iptraf-ng
).
2. Ich habe versucht, einige NFS-Parameter zu optimieren:
sync
oderasync
noatime
Nein
hard
rsize
undwsize
sind in meinen Beispielen maximal, deshalb habe ich versucht, sie in mehreren Schritten auf 8192 zu verringern
3. Ich habe versucht, zwischen Client- und Servermaschinen zu wechseln (NFS-Server auf dem früheren Client einrichten und umgekehrt). Darüber hinaus gibt es sechs weitere Server mit derselben Konfiguration. Daher habe ich versucht, sie in verschiedenen Variationen aneinander zu montieren. Gleiches Ergebnis.
4. MTU = 9000, MTU = 9000 und 802.3ad Link Aggregation, Link Aggregation mit MTU = 1500.
5. System-Tuning:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
Gleiches Ergebnis.
6. Mount von localhost:
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
Und hier erhalte ich das gleiche Ergebnis: Download von /mnt/testmount/
ist schnell, Upload nach /mnt/testmount/
ist sehr langsam, nicht schneller als 22 MByte / s und es gibt eine kleine Verzögerung, bevor die Übertragung tatsächlich beginnt. Bedeutet dies, dass der Netzwerkstapel fehlerfrei funktioniert und das Problem in NFS liegt?
All dies hat nicht geholfen, die Ergebnisse unterschieden sich nicht wesentlich von der Standardkonfiguration. echo 3 > /proc/sys/vm/drop_caches
wurde vor allen Tests ausgeführt.
Die MTU aller NICS auf allen 3 Hosts beträgt 1500, es wird keine nicht standardmäßige Netzwerkoptimierung durchgeführt. Der Ethernet-Switch ist Dell MXL 10 / 40Gbe.
Betriebssystem ist CentOS 7.
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Welche Einstellungen fehle ich? Wie kann man NFS schnell und ohne Hänge schreiben lassen?
quelle
Operation not permitted
versuche, eine Verbindung zum NFS-Prozess herzustellen.Antworten:
Sie verwenden die Synchronisierungsoption in Ihrer Exportanweisung. Dies bedeutet, dass der Server Schreibvorgänge erst bestätigt, nachdem sie tatsächlich auf die Festplatte geschrieben wurden. Wenn Sie eine sich drehende Festplatte haben (dh keine SSD), erfordert dies durchschnittlich mindestens eine halbe Umdrehung der Festplatte pro Schreibvorgang, was die Ursache für die Verlangsamung ist.
Mit der Einstellung Async bestätigt der Server den Schreibvorgang sofort an den Client, wenn er verarbeitet, aber noch nicht auf die Festplatte geschrieben wird. Dies ist etwas unzuverlässiger, z. B. bei einem Stromausfall, wenn der Client eine Bestätigung für eine nicht durchgeführte Operation erhalten hat. Es bietet jedoch eine enorme Steigerung der Schreibleistung.
(edit) Ich habe gerade gesehen, dass Sie die Optionen async vs sync bereits getestet haben. Ich bin mir jedoch fast sicher, dass dies die Ursache für Ihr Leistungsminderungsproblem ist - ich hatte einmal genau die gleiche Anzeige mit einem identischen Setup. Vielleicht testest du es nochmal. Haben Sie bei der export-Anweisung des Servers UND bei der mount-Operation auf dem Client gleichzeitig die async-Option angegeben?
quelle
Dies kann ein Problem im Zusammenhang mit der Paketgröße und der Latenz sein. Versuche Folgendes:
Der Bericht zurück Ihre Ergebnisse.
quelle
net.core.*
und dienet.ipv4.*
Systeme abzustimmen, aber vielleicht habe ich zu wenig Experimente gemacht. OK, ich mache noch ein paar Tests und melde mich.http://veerapen.blogspot.com/2011/09/tuning-redhat-enterprise-linux-rhel-54.html
Das Konfigurieren des Linux-Schedulers auf Systemen mit Hardware-RAID und das Ändern der Standardeinstellung von [cfq] in [noop] verbessert die E / A.
Verwenden Sie den Befehl nfsstat, um den Prozentsatz der Lese- / Schreibvorgänge zu berechnen. Stellen Sie das RAID-Controller-Cache-Verhältnis so ein, dass es übereinstimmt.
Bei hoher Auslastung müssen Sie die Anzahl der NFS-Server-Threads erhöhen.
Konfigurieren Sie die nfs-Threads mit der Option no_delay so, dass sie ohne Verzögerung auf die Festplatte schreiben.
Weisen Sie den Linux-Kernel an, so schnell wie möglich zu löschen, damit die Schreibvorgänge so gering wie möglich gehalten werden. Im Linux-Kernel kann die Häufigkeit des Zurückschreibens fehlerhafter Seiten durch zwei Parameter gesteuert werden.
Verwenden Sie für schnellere Festplattenschreibvorgänge die Option data = journal des Dateisystems und verhindern Sie Aktualisierungen der Dateizugriffszeiten, wodurch zusätzliche Daten auf die Festplatte geschrieben werden. Dieser Modus ist am schnellsten, wenn Daten gleichzeitig von der Festplatte gelesen und auf die Festplatte geschrieben werden müssen, und übertrifft alle anderen Modi
quelle