7408
コメント:
|
← 2019-05-26 01:00:43時点のリビジョン15 ⇥
8061
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 8: | 行 8: |
最初期(1980年台初頭)のTCPには輻輳制御(Congestion Control - cc を見たら Congestion Control の略と思え!)が無かったため、 | 最初期(1980年台初頭)のTCPには輻輳制御(`Congestion Control`)が無かったため、 |
行 21: | 行 21: |
=== /boot/loader.conf === {{{ |
=== 恒久的設定 === * `/boot/loader.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 25: | 行 26: |
=== /etc/sysctl.conf === {{{ |
* `/etc/sysctl.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 30: | 行 30: |
※ただし、設定しただけなので、再起動するまで範囲されない。 |
|
行 37: | 行 39: |
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。 | ※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。 |
行 40: | 行 43: |
* DC-TCPアルゴリズム使用にあたってECN(Explicit Congestion Notification - 明示的輻輳通知)の設定が必要であるが、11.0-Rからはデフォルトで有効となっている。 | * DC-TCPアルゴリズム使用にあたってECN(`Explicit Congestion Notification` - 明示的輻輳通知)の設定が必要であるが、11.0-Rからはデフォルトで有効となっている。 |
行 42: | 行 45: |
行 47: | 行 49: |
行 50: | 行 51: |
* 1:ECN機能の有効化(送受信時/クライアントおよびサーバーユース) * 2:ECN機能の有効化(受信時/サーバーユース) * 積極的にECN機能を利用するなら、1に設定しよう。 |
* 1:ECN機能の送受信時有効(クライアントおよびサーバーユース) * 2:ECN機能の受信時有効(サーバーユース) * 積極的にECN機能を利用するなら、`/etc/sysctl.conf`に{{{net.inet.tcp.ecn.enable=1}}}を追加設定しよう。 |
行 54: | 行 55: |
=== /etc/sysctl.conf === {{{ |
{{{#!highlight shell numbers=disable |
行 64: | 行 64: |
=== /boot/loader.conf === {{{ |
=== 恒久的設定 === * `/boot/loader.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 68: | 行 69: |
=== /etc/sysctl.conf === {{{ |
* `/etc/sysctl.conf` に以下の設定を追加する。 {{{#!highlight shell numbers=disable |
行 73: | 行 73: |
※ただし、設定しただけなので、再起動するまで範囲されない。 |
|
行 80: | 行 82: |
※アルゴリズムの入れ替えなのでオンザフライで変更可能である。再起動は不要。 | ※アルゴリズムの入れ替えなのでオンザフライで変更可能である。この時再起動は不要。再起動するとデフォルトに戻る。 |
行 83: | 行 86: |
||<#FF0000> OS ||<#FF0000> バージョン ||<#FF0000> デフォルトアルゴリズム ||<#FF0000> オプションアルゴリズム ||<#FF0000> 備考 || || 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 || || |
||<#FFFF00> OS ||<#FFFF00> バージョン ||<#FFFF00> デフォルトアルゴリズム ||<#FFFF00> オプションアルゴリズム || || `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` || |
行 105: | 行 108: |
* [[http://www.net.c.dendai.ac.jp/~yutaro/|TCP各バージョンの輻輳制御の比較]] * [[http://blog.yuuk.io/entry/cubictcp|"CUBIC: A new TCP-friendly high-speed TCP variant"を読んだ]] |
* [[http://www.net.c.dendai.ac.jp/~yutaro/|TCP各バージョンの輻輳制御の比較]] (`Tahoe`、`Reno`、`NewReno`、`Vegas`の比較) * [[https://blog.yuuk.io/entry/cubictcp|"CUBIC: A new TCP-friendly high-speed TCP variant"を読んだ]] |
行 113: | 行 116: |
* [[http://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html|Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始]] * [[http://itpro.nikkeibp.co.jp/atcl/column/17/040400119/040400003/|TCPの輻輳制御アルゴリズム、どれが一番速い?]] |
* [[https://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html|Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始]] * [[https://itpro.nikkeibp.co.jp/atcl/column/17/040400119/040400003/|TCPの輻輳制御アルゴリズム、どれが一番速い?]] |
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で利用開始