14と15のリビジョン間の差分
2019-05-25 15:28:20時点のリビジョン14
サイズ: 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: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.confnet.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

HDCHDCubicH-TCPVegas

FreeBSD

9.2以降

NewReno

HDCHDCubicH-TCPVegasCDG

FreeBSD

11.0以降

NewReno

HDCHDCubicH-TCPVegasCDGDC-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

NewRenoC-TCP

参考文献

FreeBSD/TCP輻輳制御 (最終更新日時 2019-05-26 01:00:43 更新者 NorikatsuShigemura)