NFS performance bei 10GBase-T

h^2

hat ne Keule +1
Das nächste Kapitel in der Geschichte des Servers, die Netzwerk-Performance:

ToolDurchsatz
iperf31233 MiB/s (9.87GBit/s)
nc1160 MiB/s
NFSv4203 MiB/s
NFSv4, rsize=16384,wsize=16384,pnfs,readahead=368 MiB/s

Was'n da los? :(

Der NFS-Server ist ziemlich normal eingerichtet:
Code:
rpcbind_enable="YES"
rpcbind_flags="-h 1.1.1.1"
rpc_statd_enable="YES"
rpc_lockd_enable="YES"

mountd_enable="YES"
mountd_flags="-n -h 1.1.1.1"
weak_mountd_authentication="YES"

nfsuserd_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4 -h 1.1.1.1"
nfsv4_server_enable="YES"
nfs_reserved_port_only="NO"

Ich habe diverse Threads zu unterschiedlichen sysctls gefunden, die irgendwas am TCP-Stack frickeln, aber wenn nc (was per default ja auch TCP macht), schon fast das theoretische Maximum erreicht, wie kann es sein, dass NFS so abstinkt? Habe ich da was grundsätzlich falsch konfiguriert?

edit: der client mounted nur mit der nfsv4 Option. Das hinzufügen von einigen anderen, verschlechtert die Performance noch.
edit2: nfs3 ganau so schnell/langsam wie nfs4
 
Zuletzt bearbeitet:
Ist dein nc Test mit Daten, die von der Platte auf die andere geschrieben werden?
Nicht das dich eventuell deine Platten/dein Dateisystem ausbremst.
 
Auch hier die Warnung, dass das an den PCIE-Sparmodi liegen kann und zwar unabhängig, ob iperf3 Vollgas korrekt anzeigt.

Davon abgesehen ist NFS wirklich keine Rakete :)
 
Davon abgesehen ist NFS wirklich keine Rakete :)
Das wird oft behauptet, ist aber meistens Quatsch.

Ich würde empfehlen, es erstmal nur mit NFSv3 zu probieren.
NFSv4 ist kein Ersatz für die Version 3, sondern für andere Use-Cases entwickelt, das sagt Rick Macklem selbst.

Dafür ist folgenes auf dem Server in der rc.conf nötig:

Code:
rpcbind_enable="YES"
rpcbind_flags="-h <adresse>"

nfs_server_enable="YES"
nfs_server_flags="-u -t -n 12 -h <adresse>"

mountd_enable="YES"
mountd_flags="-h <adresse>"

Die ganzen anderen NFS-bezogenen Angaben in der rc.conf würde ich erstmal weglassen.

auf dem Client:
Code:
nfs_client_enable="YES"

EDIT: Dann wäre noch die Frage, wie die mount-Aufrufe des TE genau lauten.

Rob
 
Zuletzt bearbeitet:
Ist dein nc Test mit Daten, die von der Platte auf die andere geschrieben werden?
Nicht das dich eventuell deine Platten/dein Dateisystem ausbremst.
Auf dem Client (Ziel des Kopiervorgangs) schreibe ich in eine tmpfs, und auf dem Server lese ich von den Platten. Die sind aber sehr schnell (NVMEs). Das habe ich auch überprüft.
Auch hier die Warnung, dass das an den PCIE-Sparmodi liegen kann und zwar unabhängig, ob iperf3 Vollgas korrekt anzeigt.
Wenn es nur iperf3 wäre, aber nc kopiert in der Zeit ja auch ganz regulär die 11GB Testdatei durch eine TCP-Verbindung. Wäre ja ein bisschen komisch, wenn die Netzwerkkarte für nc aufwacht, aber für NFS nicht..?
Ich werds aber auch nochmal ohne L1 versuchen.
Ich würde empfehlen, es erstmal nur mit NFSv3 zu probieren.
Der NFS3-Server wird ja immer auch mitgestartet. Ich habe parallel mal einen NFS3 mount gemacht, der ist sehr ähnlich von der Performance her. Ich werde nochmal -n hochsetzen, aber das macht doch eh nur einen Unterschied, wenn mehrere Sachen gleichzeitig NFS nutzen, oder?
EDIT: Dann wäre noch die Frage, wie die mount-Aufrufe des TE genau lauten.
Bei dem regulären mount: mount -t nfs -o nfsv4
Dann habe ich oben ja nochmal mit Zusatzflags gemacht, hats aber verschlechtert. NFS3 mount ist ohne Optionen.
 
Wie ist die Ausgabe von nfsstat -m
Bei einem NFS4 mount siehts so aus:
Code:
nfsv4,minorversion=2,tcp,resvport,nconnect=1,hard,cto,sec=sys,acdirmin=3,acdirmax=60,acregmin=5,acregmax=60,namet
imeo=60,negnametimeo=60,rsize=65536,wsize=65536,readdirsize=65536,readahead=1,wcommitsize=16777216,timeout=120,re
trans=2147483647
Bei einem NFS3 mount siehts so aus:
Code:
nfsv3,tcp,resvport,nconnect=1,hard,cto,lockd,sec=sys,acdirmin=3,acdirmax=60,acregmin=5,acregmax=60,nametimeo=60,n
egnametimeo=60,rsize=65536,wsize=65536,readdirsize=65536,readahead=1,wcommitsize=16777216,timeout=120,retrans=2
 
Welches FreeBSD ist das?

14.0 auf Server und Client.

Es geht da zwar um Schreibgeschwindigkeit, aber einen Versuch ist es wert.

Hm, kann das nicht wirklich auf meine Situation übertragen...


Ich habe dafür nun ein Linux NFS-Client probiert. Der schafft immerhin aus dem Stand ~600MiB/s. Das sind die Optionen:

Code:
rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=1.3.1.2,mountvers=3,mountport=820,mountproto=udp,local_lock=none,addr=1.3.1.2
Ich werde es unter FreebSD gleich nochmal mit doppelter rsize und wsize versuchen, sonst sehe ich da keinen Unterschied.
 
An einer anderen Netzwerk-Buchse erreiche ich jetzt auch mit NFS Geschwindigkeiten über 1100 MiB/s. Scheint also nicht an FreeBSD/NFS gelegen zu haben, auch wenn ich es sehr merkwürdig finde, dass die anderen Programme auch auf der anderen Leitung die Geschwindigkeit erreicht haben. Muss ich nochmal in Ruhe debuggen irgendwann.

Hier sind die NFS-Optionen dokumentiert, die ich nutze:
https://hannes.hauswedell.net/post/2024/04/26/fileserver/
 
Zurück
Oben