Help us understand the problem. What is going on with this article?

GoogleのTCP BBRでTCPを高速化しProxyもその恩恵にあずかる

More than 1 year has passed since last update.

TCP BBR(以下BBRと略します)は、Googleが新しく開発したTCPを高速化するための輻輳(ふくそう)制御アルゴリズムです。

上記資料にもある通り、YouTubeに採用した結果、一部の国でスループットを14%以上も引き上げた実績があるとの事なので、先日構築したProxy(Qiita記事)のサーバーへ導入してみる事にしました。

上記Qiitaの記事では、Shadowsocksという日本では知名度の低い仕組みを採用していますが、SquidでProxyを構築している方やApacheでWebサーバを構築している方などにも、興味を持っていただけたら幸いです。


対象としている人

  • 最低限のLinuxの知識がありテスト環境を構築できる人1
  • 手軽に最新の技術に触れてみたい人
  • Linuxのネットワーク高速化に興味がある人

輻輳制御アルゴリズム??

輻輳制御アルゴリズム…何やら難しそうな言葉ですね。私もあまり理解できていませんのでご心配なく(笑)

Googleがどのような考え方でTCPの高速化を実現したかについては、下記をご参考ください。

Qiitaの↓の記事も、素晴らしい内容だと思います。

現在どのようなアルゴリズムが利用可能で、どのアルゴリズムを使用しているかは、以下のコマンドで確認できます。

$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = cubic reno

$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = cubic

私の環境では、cubicreno が利用可能で、現在は cubic を使用している事が分かります。


BBRの導入

私は、仮想マシンでのテスト後に、先日構築したShadowsocksのサーバーに導入しました。

  • さくらインターネットのVPS「さくらのVPS」を利用しています。

  • CentOS6.8で検証しました。

    • 6.9や7系は未検証です。
  • インストールはGitHubでteddysun氏が公開しているシェルスクリプトを利用しています。

    • Linuxのカーネルを更新しrebootを行います。
    • Linuxの最新安定版カーネル導入にELRepo2を利用します。
      2017年11月3日時点のバージョンは以下の通りです。
      • CentOS6系:6-8.el6.elrepo.noarch.rpm
      • CentOS7系:7.0-3.el7.elrepo.noarch.rpm
    • /etc/sysctl.confの書き換えを行います。(スクリプト内sysctl_config()の部分)
    • 実行したディレクトリ内へ install_bbr.log としてインストールログを残します。

スクリプトに任せるのが不安な方は、下記サイトなどを参考に、手動でインストールしてください。


インストールスクリプトのダウンロード ~ 実行

#-- カーネルのバージョンを確認
$ uname -r
2.6.32-642.13.1.el6.x86_64

#-- インストールスクリプトをダウンロード
$ wget https://github.com/teddysun/across/raw/master/bbr.sh

#-- 実行権限を与える
$ chmod +x ./bbr.sh

#-- インストールスクリプトを実行
$ ./bbr.sh

インストール

---------- System Information ----------
 OS      : CentOS 6.8
 Arch    : x86_64 (64 Bit)
 Kernel  : 2.6.32-642.13.1.el6.x86_64
----------------------------------------
 Auto install latest kernel for TCP BBR

 URL: https://teddysun.com/489.html
----------------------------------------

Press any key to start...or Press Ctrl+C to cancel

…と表示されますので、問題がなければEnterを押せばインストールが始まります。キャンセルしたい場合はCtrl+Cです。

Complete!

Info: The system needs to reboot.
Do you want to restart system? [y/n]

インストールが成功すると上記のようなメッセージが表示されます。y を入力してrebootさせてください。


インストール結果の確認

念のため、インストール結果を確認します。

#-- インストールログの確認
$ cat ./install_bbr.log

#-- カーネルが更新されている事を確認
$ uname -r
4.13.11-1.el6.elrepo.x86_64

#-- カーネルモジュールに BBR が追加されている事を確認
$ lsmod | grep bbr
tcp_bbr

#-- /etc/sysctl.conf の更新を以下3回の sysctl コマンドで確認
# $ cat /etc/sysctl.conf
#
#-- /proc/sys/net/ 以下の確認でもOK
# $ cat /proc/sys/net/ipv4/tcp_available_congestion_control
# bbr cubic reno
#
# $ cat /proc/sys/net/ipv4/tcp_congestion_control
# bbr

#-- 利用可能な輻輳制御アルゴリズムに bbr が追加されている事を確認
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

#-- 輻輳制御アルゴリズムに bbr を使用している事を確認
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

#-- キューイングアルゴリズムに fq を使用している事を確認
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq

Linuxカーネルに詳しい方は更にチューニング(特に net.ipv4.tcp_ 周り)を行うと良いと思いますが、とりあえず今回はここまでとしておきます。

「えぇ!もう終わり!?」と驚く方もいらっしゃると思いますが、たったこれだけで導入は完了です。素晴らしいスクリプトを公開している GitHub teddysun氏 に、この場を借りてお礼申し上げます。I'd like to take this opportunity to thank GitHub/teddysun!!


効果の検証

それでは効果の検証です…と書きたいところなのですが、BBR導入前のiperfでの検証データを失うという大ポカをやらかしてしまいました…(涙)

比較可能なデータとして、iPhoneの「Speedtest.net Speed Test」というアプリのログが残っていましたので、中国国内 ⇒ さくらのVPS上のShadowsocksR(Proxy) という状況で計測してみたところ、驚く事に約 1500% ~ 2000% 速度が向上 しています。(決して桁は間違ってません)

パケットロスの検知に基づかない方法 = パケットロスが大きい環境だとより効果が高くなる = 中国国内 ⇔ 中国国外なら特に効果があるかも…とは思っていましたが、正直ここまで効果があるとは驚きです。Youtubeの4K動画やX○ideosのあんな動画やこんな動画も、中国国内からサクサク閲覧できるようになりました。3

こんな締まらない終わり方で本当に申し訳ありません。iperf以外の検証方法も併せて紹介しておきます。


参考URL


  1. いきなり本番環境にぶち込んでおかしくなったと言われても、一切の責任は持ちません。 

  2. Enterprise Linux Repository。RHELで最新の安定版カーネルを試したい時にはオススメのサードパーティ製リポジトリです。 

  3. さくらのVPSを公開プロキシとして利用する事は規約で禁じられています。あくまでも個人でのみお楽しみ?ください。 

fallout
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした