TCP BBRについて

TCP BBRは、2016年のACM Queue(*1)で発表された輻輳(ふくそう)制御アルゴリズムです。輻輳(congestion)とは、物が1か所に集中し混雑する様態のことです。

今日のTCPのロスベース(loss-based)の輻輳制御は、デフォルトのCUBICでも問題があると考えられてきました。例えば、ボトルネックのバッファが大きい場合、パケットロスに基づく輻輳制御によってそれらがいっぱいになり、バッファが膨らむ原因となります。ボトルネックのバッファが小さい場合、パケットロスに基づく輻輳制御はパケットロスを輻輳の信号として誤って解釈し、低いスループットにつながります。これらの問題を解決するには、ロスベースの輻輳制御に代わるものが必要でした。この代替手段が、BBRです。

BBR(*2)とは、Bottleneck Bandwidth and Round-trip propagation timeの略です。
BBRは、パケットの時間の情報を利用して、リンクが混雑しているかどうかを判断します。

このアルゴリズムは、YouTubeトラフィックの高速化に既に利用され、今後もより多くの人が使うかもしれません。

難しいことはさておき、先ずは実際に使ってみましょう。それで、本当に高速化しているか検証してみましょう。

はじめに、kernelのバージョンが4.9以降であることを確認し、利用可能な輻輳制御を表示します。

$ uname -r
4.18.16-300.fc29.x86_64
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic


次に、BBRを有効にする前に、デフォルトのcubicでスピードを確認します。より正確なデータを取るには、何回か確認したほうがいいです。

$ cat  /proc/sys/net/ipv4/tcp_congestion_control
cubic
$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from So-net Entertainment Corporation (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by OPEN Project (via 20G SINET) (Tokyo) [20.01 km]: 17.529 ms
Testing download speed................................................................................
Download: 81.79 Mbit/s
Testing upload speed....................................................................................................
Upload: 66.81 Mbit/s


cubicでのスピードを確認したら、BBRを有効にします。/etc/sysctl.confに次の2行を追加し、sysctlでロードします。

# cat /etc/sysctl.conf
...

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

# sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr


tcp_congestion_controlがbbrに変更されていることを確認し、再度スピードを確認してみます。

# cat /proc/sys/net/ipv4/tcp_congestion_control
bbr
$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from So-net Entertainment Corporation (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by OPEN Project (via 20G SINET) (Tokyo) [20.01 km]: 16.996 ms
Testing download speed................................................................................
Download: 81.17 Mbit/s
Testing upload speed....................................................................................................
Upload: 66.39 Mbit/s

残念ながらWi-Fiを使っている環境でかつ東京のサーバに対してテストした結果では、パフォーマンスの向上は見られませんでした。

では、もっと遠いルイジアナ州(LA)Hammondのサーバに対してテストしてみます。今回も何度かテストしてみました。その結果がこちらです。

// cubic
$ speedtest-cli --server 16352
Retrieving speedtest.net configuration...
Testing from So-net Entertainment Corporation (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Southern Light, LLC (Hammond, LA) [10996.59 km]: 214.103 ms
Testing download speed................................................................................
Download: 20.68 Mbit/s
Testing upload speed....................................................................................................
Upload: 19.44 Mbit/s

//bbr
$ speedtest-cli --server 16352
Retrieving speedtest.net configuration...
Testing from So-net Entertainment Corporation (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Southern Light, LLC (Hammond, LA) [10996.59 km]: 196.179 ms
Testing download speed................................................................................
Download: 21.25 Mbit/s
Testing upload speed....................................................................................................
Upload: 35.02 Mbit/s

アップロードのスピードが大幅に向上しています。よって、何か不都合が生じるまでbbrで使い続けてみようと思います。


参照:
1: https://queue.acm.org/detail.cfm?id=3022184
2: https://github.com/google/bbr/blob/master/Presentations/bbr-2017-02-08-google-net-research-summit.pdf