12

iperf10Gbit リンクを介して接続された 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) であり、トラフィック キャプチャを検証しています。

4

2 に答える 2

17

クイック検索が表示されました:

https://github.com/torvalds/linux/blob/4e5448a31d73d0e944b7adb9049438a09bc332cb/net/ipv4/tcp_output.c

void tcp_select_initial_window()

if (wscale_ok) {
    /* Set window scaling on max possible window
     * See RFC1323 for an explanation of the limit to 14
     */
    space = max_t(u32, sysctl_tcp_rmem[2], sysctl_rmem_max);
    space = min_t(u32, space, *window_clamp);
    while (space > 65535 && (*rcv_wscale) < 14) {
        space >>= 1;
        (*rcv_wscale)++;
    }
}

max_t引数の大きい方の値を取ります。したがって、ここでは値が大きい方が優先されます。

もう 1 つの参照は、 (net/core/sock.c で) にsysctl_rmem_max引数を制限するために使用される場所で行われます。SO_RCVBUF

他のすべての tcp コードは参照sysctl_tcp_rmemのみです。

したがって、コードを詳しく調べなくても、設定時を除いてすべての場合に大きな値net.ipv4.tcp_rmemがオーバーライドされると結論付けることができます(そのチェックは を使用してバイパスできます) 。net.core.rmem_maxSO_RCVBUFSO_RCVBUFFORCE

于 2016-02-16T16:45:30.980 に答える
1

net.ipv4.tcp_rmemhttps://serverfault.com/questions/734920/difference-between-net-core-rmem-max-and-net-ipv4-tcp-rmemnet.core.rmem_maxに従って優先されます:

tcp-setting が common max 設定よりも優先されるようです


しかし、私はあなたの言うことに同意しman tcpます。多分ドキュメントが間違っていますか?見つけてコメントしてください!

于 2016-02-16T16:28:48.670 に答える