iperf
10Gbit リンクを介して接続された 2 つのサーバー間で測定を実行しています。観察した最大ウィンドウ サイズをシステム構成パラメーターと関連付けようとしています。
特に、最大ウィンドウ サイズが 3 MiB であることを確認しました。ただし、システム ファイルに対応する値が見つかりません。
実行するsysctl -a
と、次の値が得られます。
net.ipv4.tcp_rmem = 4096 87380 6291456
net.core.rmem_max = 212992
最初の値は、最大受信ウィンドウ サイズが 6 MiB であることを示しています。ただし、TCP は要求されたサイズの 2 倍を割り当てる傾向があるため、受信ウィンドウの最大サイズは、私が測定したとおり 3 MiB である必要があります。からman tcp
:
TCP は、setsockopt(2) 呼び出しで要求されたバッファーのサイズの 2 倍を実際に割り当てるため、後続の getsockopt(2) 呼び出しは、setsockopt(2) 呼び出しで要求されたのと同じサイズのバッファーを返さないことに注意してください。TCP は管理目的と内部カーネル構造のために余分なスペースを使用し、/proc ファイルの値は実際の TCP ウィンドウと比較してより大きなサイズを反映しています。
ただし、2 番目の値 はnet.core.rmem_max
、最大レシーバー ウィンドウ サイズが 208 KiB を超えることはできないことを示しています。によると、これはハードリミットであると想定されていますman tcp
。
tcp_rmem max: 各 TCP ソケットが使用する受信バッファの最大サイズ。この値はglobalをオーバーライドしません
net.core.rmem_max
。これは、ソケットで SO_RCVBUF を使用して宣言された受信バッファーのサイズを制限するためには使用されません。
で指定されたものよりも大きな最大ウィンドウ サイズが表示されるのはnet.core.rmem_max
なぜですか?
注意: 帯域幅と遅延の積も計算しました。window_size = Bandwidth x RTT
これは約 3 MiB (10 Gbps @ 2 ミリ秒 RTT) であり、トラフィック キャプチャを検証しています。