web-dev-qa-db-ja.com

MTUとNFSのrsize / wsizeオプションの関係

NFSに関連するネットワーク設定とさまざまなバッファーサイズを理解しようとしています(かなりの数があります)。

私はWiresharkを実行して、TCP NFSサーバーに到着するパケットを検査しています。Wiresharkは、拡張書き込み操作(クライアント->サーバー)中に最大サイズ32626のパケットを表示しています。 (私が想定している「ワイヤー上のバイト数」には、すべてのネットワーク層ヘッダーなどが含まれます。)

エクスポートされたストレージの「rsize」と「wsize」のNFS設定は、両方のC/Sで32kに設定されているため、上記の結果はこの設定の結果であると考えました。ただし、これらの値を増やしても、Wiresharkで表示されるパケットサイズは増えません。

つまり、私の質問は、他にどのような制約が課される可能性があるかということです私はかなりの量の研究を行いましたが、これがこれまでに出会ったことです。以下のネットワークの制約はいずれも、送信サイズを32kに制限しないようです。

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

私のMTUは現在8Kです

7
Jmoney38

クライアントのマウントオプションやサーバーの機能によって定義されたNFS {r、w}サイズ。 IOW、次のようにコマンドラインで定義できます。

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

Linuxクライアントでは、v3とv4のデフォルト値が異なります-32kと1MB。 nfsサーバーは、小さいサイズを要求するか、大きいサイズをサポートできます。最初のGETATTR呼び出しで要求された、v3のFSINFO呼び出しまたはFATTR4_MAXREAD/FATTR4_MAXWRITEファイル属性として、wiresharkでそれを確認できるはずです。

RPC層は、単一​​の読み取り要求または書き込み要求を複数のRPCフラグメントに分割できます。 TCPレイヤーは、単一のRPCフラグメントを複数のTCPパケットに分割することがあります。一方、TCPレイヤーは複数のRPC要求が単一のTCP=パケットに収まる場合、それらにパケットを送ります。

かなり古くなったドキュメント NFSパフォーマンスの最適化 がありますが、数値を微調整する方法がわかります。

3
kofemann