net.ipv4.tcp_app_winは何をしますか?

net.ipv4.tcp_app_winは何をしますか?

Linuxでは、変数tcp_adv_win_scale と変数が共存する理由を理解できません。tcp_app_win情報TCP(7)説明する:

のためtcp_adv_win_scale

tcp_adv_win_scale(整数; デフォルト: 2; Linux 2.4 以降)

    バッファリングオーバーヘッドを次のように計算します。bytes/2^tcp_adv_win_scaletcp_adv_win_scale0より大きい。 bytes-bytes/2^(-tcp_adv_win_scale)tcp_adv_win_scale0 以下です。

     ソケット受信バッファ空間はアプリケーションとカーネル間で共有されます。 TCPはバッファの一部をTCPウィンドウとして保持し、これは相手に通知する受信ウィンドウのサイズです。残りのスペースは、スケジューリングとアプリケーションの待ち時間からネットワークを分離するための「アプリケーション」バッファとして使用されます。これtcp_adv_win_scaleデフォルト値 2 は、アプリケーション・バッファーに使用されるスペースがスペース全体の 1/4 であることを意味します。

のためtcp_app_win

tcp_app_win(整数; デフォルト: 31; Linux 2.4 以降)

    この変数は、バッファリングオーバーヘッド用に予約されたTCPウィンドウのバイト数を定義します。

    多い場合(window/2^tcp_app_win、mss)ウィンドウのバイトはアプリケーションバッファ用に予約されています。値が0の場合、予約された金額がないことを意味します。

tcp_app_winそれで、正確に何が変わったのかはよくわかりません。どちらの変数もTCPアプリケーションバッファを調整するために使用できるため、一緒に変更する必要はないようです。私は正しいですか?

ベストアンサー1

に関する情報が見つかりましたtcp_adv_win_scale。ページのタイトルは次のとおりです。TCPパフォーマンスチューニング - Linuxをチューニングする方法

抜粋

TCPパフォーマンスは、window_size / RTT(与えられた瞬間にリンクを介して「送信」できるデータ量)に応じて、遅延時間とウィンドウサイズ(および有効ウィンドウサイズを減らすオーバーヘッド)によって制限されます。

可能な実際の転送速度を得るには、結果ウィンドウを秒単位の待ち時間に分割する必要があります。

オーバーヘッドは window/2^tcp_adv_win_scale(tcp_adv_win_scale のデフォルト値は 2) です。

したがって、Linux受信ウィンドウ(tcp_rmem)のデフォルトパラメータは87380 - (87380 / 2^2)= 65536です。

大西洋横断リンク(150ms RTT)が与えられると、最大性能は65536/0.150 = 436906バイト/秒または約400kbyte/秒となり、今日は非常に遅いです。

デフォルトサイズが増加した場合:(873800 - 873800/2^2)/0.150 = 4369000バイト/秒または約4MB/秒で、これは最新のネットワークに適しています。これがデフォルトであり、送信者がより大きなウィンドウサイズで構成されている場合は、10倍(8738000 * 0.75 / 0.150 = ~ 40Mbytes / s)に拡張され、最新のネットワークに適しています。

バージョン2.6.17以降にはかなり良いデフォルトがあり、実際に相手がサポートしている場合は、許容される最大値にウィンドウのサイズを変更できます。したがって、このガイドのほとんどはその時点からもう必要ありません。ただし、良い長距離スループットを得るには、最大値を増やす必要があるかもしれません。

私はこれを理解することができますが、2つの変数がどのように関連しているかはわかりません。

私はこれが何を説明したいのかほとんど理解していません。本質的に、このパラメータはTCPとアプリケーションが使用するバッファスペースの量を拡張するためのパラメータのように聞こえます。

もっと検索した結果、これらの説明がより意味があることがわかりました。ページのタイトルは次のとおりです。Ipsysctlチュートリアル1.0.4 - 第3章IPv4変数リファレンス

抜粋

3.3.2.tcp_adv_win_scale

この変数は、TCPウィンドウサイズに使用する必要があるソケットバッファスペースの量とアプリケーションバッファに保存する必要があるスペースの量をカーネルに通知するために使用されます。 tcp_adv_win_scaleが負の場合、ウィンドウのサイズ変更のためのバッファオーバーヘッドは、次の式を使用して計算されます。

ここで bytes はウィンドウのバイト数です。 tcp_adv_win_scale値が正の場合、バッファオーバーヘッドは次の式を使用して計算されます。

tcp_adv_win_scale 変数は整数値を使用し、デフォルトでは 2 に設定されます。これは、アプリケーションバッファがtcp_rmem変数で指定された合計バッファスペースの1/4であることを意味します。

3.3.3.tcp_app_win

この変数は、特定のTCPウィンドウを送信するTCPソケットメモリバッファ内の特定のTCPウィンドウ用に予約するバイト数をカーネルに通知します。この値は、予約するバッファスペースの量を指定する計算に使用されます。これは次のとおりです。

フォーミュラSS

上記の計算からわかるように、値が大きいほど、特定のウィンドウのバッファスペースは小さくなります。この計算の唯一の例外はゼロです。これはカーネルが特定の接続のためにスペースを予約しないように指示します。この変数のデフォルト値は 31 で、通常は適切な値です。実行している操作がわからない場合は、この値を変更しないでください。

これらの説明によれば、最初のパラメータはtcp_adv_win_scaleソケットバッファスペースの分割、つまりTCPウィンドウ使用量とアプリケーションバッファの分割方法を制御するように聞こえます。

2番目のパラメータは、tcp_app_win説明に記載されているアプリケーションバッファ用に予約されているバイト数を指定しますtcp_adv_win_scale

おすすめ記事