Beziehung zwischen MTU- und NFS-Optionen rsize / wsize

7

Ich versuche, Netzwerkeinstellungen in Bezug auf NFS und verschiedene Puffergrößen zu verstehen (und es gibt einige).

Ich führe Wireshark aus und überprüfe die TCP-Pakete, die auf dem NFS-Server ankommen. Wireshark zeigt während eines erweiterten Schreibvorgangs (Client-> Server) eine Paketgröße von maximal 32626 an, vorausgesetzt, ich interpretiere korrekt ("Bytes on the Wire", die vermutlich alle Header der Netzwerkebene usw. enthalten).

Die NFS-Einstellungen "rsize" und "wsize" für exportierten Speicher sind auf beiden C / S auf 32 KB festgelegt, sodass ich dachte, dass die obigen Ergebnisse ein Ergebnis dieser Einstellung sind. Durch Erhöhen dieser Werte wird jedoch die von Wireshark angezeigte Paketgröße NICHT erhöht.

Meine Frage ist also, welche anderen Einschränkungen könnten bestehen? Ich habe ziemlich viel recherchiert, und das ist mir bisher begegnet. Es scheint mir, dass keine der folgenden Netzwerkeinschränkungen die Übertragungsgröße auf 32 KB beschränken würde:

Von sysctl:

net.ipv4.tcp_mem          = 4096 87380 4194304
net.ipv4.tcp_{r,w}mem     = 4096 87380 4194304
net.core.{r,w}mem_max     = 131071
net.core.rmem_default     = 229376

Meine MTU ist derzeit 8K

Jmoney38
quelle

Antworten:

3

Die NFS {r, w} -Größe, die durch die Client-Mount-Option und / oder die Serverfunktionen definiert wird. IOW, Sie können sie in der Befehlszeile wie folgt definieren:

# mount -o rsize=1048576 .....

Linux-Clients haben unterschiedliche Standardwerte für v3 und v4 - 32k und 1MB. Der NFS-Server fordert möglicherweise eine kleinere an oder unterstützt größere Größen. Sie sollten dies mit wireshark als FSINFO-Aufruf für die Dateiattribute v3 oder FATTR4_MAXREAD / FATTR4_MAXWRITE sehen können, die beim allerersten GETATTR-Aufruf angefordert wurden.

Die RPC-Schicht kann einzelne Lese- oder Schreibanforderungen in mehrere RPC-Fragmente aufteilen. Die TCP-Schicht kann ein einzelnes RPC-Fragment in mehrere TCP-Pakete aufteilen. Andererseits kann die TCP-Schicht mehrere RPC-Anforderungen zu einem einzigen TCP-Paket zusammenfassen, wenn sie passen.

Es gibt ein ziemlich veraltetes Dokument zur Optimierung der NFS-Leistung , aber Sie erhalten eine Vorstellung davon, wie Sie die Zahlen optimieren können.

kofemann
quelle
Vielen Dank für die Antwort - Großartiger Punkt zum Dekodieren der NFS-Pakete! - Ich habe "Continuation of Data ..." für die NFS-Pakete gesehen. Als Referenz musste ich mit der rechten Maustaste auf -> Dekodieren als -> RPC klicken. Jetzt, da ich die tatsächlichen RPC-Werte sehen kann, sehe ich kein FATTR4_MAX {READ, WRITE}. Ich sehe mehrere andere, einschließlich NUMLINKS = 20, OWNER, SPACE_USED usw. Ich habe nach MAX {READ, WRITE} gesucht und keine Ergebnisse erzielt. Dies ist definitiv NFS4. Irgendwelche Vorschläge?
Jmoney38
Dann ist es wahrscheinlich NFSv4.1. Überprüfen Sie die Antwort auf CREATE_SESSION-> csr_fore_chan_attrs-> max resp size
kofemann
Ah! Ihr erster Kommentar war richtig! - Ich musste erneut auf dem Client mounten ... Anscheinend fordert der Client diese zusätzlichen Informationen für einen GETATTR-Aufruf nur bei Bedarf an. Der Wert, den ich finde, ist 1048576 - was, wenn dies in Einheiten von Bits angegeben ist, 128 KB entspricht, was den net.core. {R, w} mem_max-Werten des Clients entspricht. Wenn dies zutrifft, frage ich mich immer noch, wo die maximale
Paketgröße von 32 KB eingeht
@ Jmoney38 im Falle von nfsv4.0 sieht es beim zweiten GETATTR-Aufruf nach PUTROOTFH: reco_attr: MAXREAD (30)
kofemann