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_scale
、tcp_adv_win_scale
0より大きい。bytes-bytes/2^(-tcp_adv_win_scale)
、tcp_adv_win_scale
0 以下です。ソケット受信バッファ空間はアプリケーションとカーネル間で共有されます。 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ウィンドウ用に予約するバイト数をカーネルに通知します。この値は、予約するバッファスペースの量を指定する計算に使用されます。これは次のとおりです。
上記の計算からわかるように、値が大きいほど、特定のウィンドウのバッファスペースは小さくなります。この計算の唯一の例外はゼロです。これはカーネルが特定の接続のためにスペースを予約しないように指示します。この変数のデフォルト値は 31 で、通常は適切な値です。実行している操作がわからない場合は、この値を変更しないでください。
これらの説明によれば、最初のパラメータはtcp_adv_win_scale
ソケットバッファスペースの分割、つまりTCPウィンドウ使用量とアプリケーションバッファの分割方法を制御するように聞こえます。
2番目のパラメータは、tcp_app_win
説明に記載されているアプリケーションバッファ用に予約されているバイト数を指定しますtcp_adv_win_scale
。