TCP輻輳制御(FreeBSD版)
目次
TCP輻輳制御とは
TCPに限る話では無いが通常、通信を行い、一方(主にサービスプロバイダ側)に通信が集中するようになると混雑が起きる。 最初期(1980年台初頭)のTCPには輻輳制御(Congestion Control)が無かったため、 混雑は加速度的に悪化することが判明していた(らしい)。
このTCPに「輻輳制御アルゴリズム」による通信(頻度等)制御を行うことで、混雑を押さえる仕組みができあがった。 とはいえ、時代に合わせた輻輳制御アルゴリズムが提案されていて、理想的で決定的なアルゴリズムが存在しないこともあり、 度々新しいアルゴリズムが提案されているのが現実である。
FreeBSDでは伝統的に4.4BSD由来のNewReno輻輳制御を採用しており、デフォルトとなっている。 FreeBSD9からは輻輳制御アルゴリズムの整理、モジュール化が実施されており、開発および設定が簡略化されている。
FreeBSD11以降ならとりあえず設定しておけ
FreeBSD11.0のリリースは2016年10月10日。
恒久的設定
/boot/loader.conf に以下の設定を追加する。
cc_dctcp_load="YES"
/etc/sysctl.conf に以下の設定を追加する。
net.inet.tcp.cc.algorithm=dctcp
※ただし、設定しただけなので、再起動するまで範囲されない。
手動で切り替え
# kldload cc_dctcp
# sysctl net.inet.tcp.cc.algorithm=dctcp
net.inet.tcp.cc.algorithm: newreno -> dctcp
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。
コメント
DC-TCPアルゴリズム使用にあたってECN(Explicit Congestion Notification - 明示的輻輳通知)の設定が必要であるが、11.0-Rからはデフォルトで有効となっている。
- 下記コマンドでの設定値を確認しておくこと(デフォルトで2である)。
# sysctl net.inet.tcp.ecn.enable
net.inet.tcp.ecn.enable: 2
- この設定は以下の通りである。
- 0:ECN機能の無効化
- 1:ECN機能の送受信時有効(クライアントおよびサーバーユース)
- 2:ECN機能の受信時有効(サーバーユース)
積極的にECN機能を利用するなら、/etc/sysctl.confにnet.inet.tcp.ecn.enable=1を追加設定しよう。
net.inet.tcp.ecn.enable=1
FreeBSD8.3以降ならとりあえず設定しておけ
なお、
- FreeBSD8.3のリリースは2012年04月18日。
- FreeBSD9.0のリリースは2012年01月12日。
恒久的設定
/boot/loader.conf に以下の設定を追加する。
cc_vegas_load="YES"
/etc/sysctl.conf に以下の設定を追加する。
net.inet.tcp.cc.algorithm=vegas
※ただし、設定しただけなので、再起動するまで範囲されない。
手動で切り替え
# kldload cc_vegas
# sysctl net.inet.tcp.cc.algorithm=vegas
net.inet.tcp.cc.algorithm: newreno -> vegas
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。
OS事情
OS |
バージョン |
デフォルトアルゴリズム |
オプションアルゴリズム |
FreeBSD |
全バージョン |
NewReno |
なし |
FreeBSD |
8.3(9.0)以降 |
NewReno |
HD、CHD、Cubic、H-TCP、Vegas |
FreeBSD |
9.2以降 |
NewReno |
HD、CHD、Cubic、H-TCP、Vegas、CDG |
FreeBSD |
11.0以降 |
NewReno |
HD、CHD、Cubic、H-TCP、Vegas、CDG、DC-TCP |
Linux |
2.6.19以降 |
Cubic |
未調査 |
Windows |
Vista以降 |
NewReno |
C-TCP |
Windows |
8以降 |
C-TCP |
NewReno |
Windows Server |
2008以降 |
C-TCP |
NewReno |
Windows Server |
2012以降 |
DC-TCP |
NewReno、C-TCP |
参考文献
TCP各バージョンの輻輳制御の比較 (Tahoe、Reno、NewReno、Vegasの比較)
Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始