現在、Linux のコマンド「sysctl」は、システム全体の輻輳制御アルゴリズムをグローバルに変更します。ただし、TCP ウィンドウ サイズやその他の同様のパラメータが変化する輻輳制御は、通常、TCP 接続ごとに行われます。だから私の質問は:
- TCP 接続ごとに使用されている輻輳制御アルゴリズムを変更する方法はありますか?
それとも、ここで些細なことを見逃していますか?もしそうなら、それは何ですか?
現在、Linux のコマンド「sysctl」は、システム全体の輻輳制御アルゴリズムをグローバルに変更します。ただし、TCP ウィンドウ サイズやその他の同様のパラメータが変化する輻輳制御は、通常、TCP 接続ごとに行われます。だから私の質問は:
それとも、ここで些細なことを見逃していますか?もしそうなら、それは何ですか?
これは、-Z オプションを使用してiperfで実行されます。パッチはこちらにあります。
実装方法は次のとおりです (PerfSocket.cpp、93 行目)。
if ( isCongestionControl( inSettings ) ) {
#ifdef TCP_CONGESTION
Socklen_t len = strlen( inSettings->mCongestion ) + 1;
int rc = setsockopt( inSettings->mSock, IPPROTO_TCP, TCP_CONGESTION,
inSettings->mCongestion, len);
if (rc == SOCKET_ERROR ) {
fprintf(stderr, "Attempt to set '%s' congestion control failed: %s\n",
inSettings->mCongestion, strerror(errno));
exit(1);
}
#else
fprintf( stderr, "The -Z option is not available on this operating system\n");
#endif
mCongestionは、使用するアルゴリズムの名前を含む文字列です。
これは get/setsockopt で可能のようです。私が見つけた唯一のドキュメントは次のとおりです。 http://lkml.indiana.edu/hypermail/linux/net/0811.2/00020.html
Linux の新しいバージョンでは、 ip route ... congctl を使用して特定の宛先の輻輳制御を設定できます。
誰かがこのアプローチに精通している場合は、この投稿を編集してください。
Linux には、オンザフライで使用されるアルゴリズムを変更できるプラグ可能な輻輳アルゴリズムがありますが、これは接続ごとではなくシステム全体の設定です。