BBR

GoogleのTCP BBRでLinuxサーバーの高速化を試す

GoogleさんがLinuxに実装したTCPの輻輳制御モジュールでTCP通信がどのくらい高速化されるのか試してみる。環境はVirtualBox上にインストールしたCentOS7(64bit)。

具体的にはVMを2つ作成しiperfを使ってVM間のTCP通信性能がどのくらい変わるのか見てみる。

BBRとは

BBRはGoogleが開発したTCP輻輳制御アルゴリズムおよびぞれを実装したプログラムであり従来より高速に通信ができますよ!という事らしい。

BBRの導入

BBRを使うためにはまずBBRに対応したカーネルにバージョンを上げる必要がある。

事前準備

カーネルのコンパイルに下記パッケージが必要になるのでインストールしておく。

カーネルのダウンロード

まずは公式のThe Linux Kernel Archivesからソースコードを持ってくる。
下記stable版のURLを確認してLinuxマシンにダウンロードする。

ダウンロードが出来たらファイルを解凍し展開する。

カーネルのコンフィグ

展開したディレクトに入り現在のカーネルコンフィグをコピーする。

旧コンフィグを引き継ぐためにmake oldconfigを実行する。コンフィグ設定内容についての大量の質問が対話形式で行われるが面倒なのですべてdefault(すべてEnterキー)にする。

旧コンフィグを引き継いだらBBRのコンフィグ(defaultでは無効になっている)を有効にして.configを上書きする。

ネットワークの項目から辿りBBRの項目を探して有効化する。

コンパイル~インストール

コンフィグ設定が完了したのでコンパイルしインストールする。

インストールまで終わったらgrubのメニューにインストールしたカーネルが存在するか確認する。

起動確認

Linuxマシン(VM)を再起動してgrubの画面でインストールしたカーネルを選択し起動する。

ログイン後に起動中のカーネルを確認して一致していればOK。

TCP輻輳制御の変更

BBRを有効にするにはカーネルパラメータを変更してBBRを有効にする必要がある。
net.ipv4.tcp_congestion_controlをbbrに設定して再起動すると有効になる。

再起動後にbbrが有効になっていればOK。

性能測定環境の構築

iperfのインストール

性能測定用のツールは下記を使用する。

https://iperf.fr/iperf-download.php#fedora

URLを確認したらwgetでダウンロードしインストールする。

VMのクローン作製

カーネルのアップデート、iperfのインストールまで完了したらVMを複製する。

性能測定

BBR対応のカーネルと測定ツールが用意できたので実際に通信性能を計測してみる。測定は下記パターンで実施して比較してみる。

測定パターン
(1) CentOS7デフォルトのカーネル
(2) アップデート後のカーネル(BBR無し)
(3) アップデート後のカーネル(BBR有り)

構成図

測定は下記のVM間で行う。

内部ネットワークの設定

用意した2つのVMで通信するために両VM共に内部ネットワークのアダプターを作成する。

それぞれ下記の固定IPを設定する。

VM1(クライアント側)

VM2(サーバ側)

測定結果

iperfをオプション指定はせずに各パターンで実行した。

結果サマリ

結果まとめ

#計測パターン帯域(Gbits/sec)TCP再送数
1CentOS7デフォルトのカーネル1.844680
2アップデート後のカーネル(BBR無し)2.073970
3アップデート後のカーネル(BBR有り)2.65120610

BBR無しでも最新のカーネルではTCPの通信性能は上がってるぽい(?)
BBR有りの場合は帯域は向上して見えるがTCPの再送が30倍になっているのが少し気になるところ。

まとめ

確かにBBRによってTCP通信の高速化が期待できそうな結果となった。
TCPという昔から存在する技術(いい意味で枯れた技術)に性能向上のアプローチをしていること、実装が600行程のソースコードで書かれたモジュールによって実現している点が面白い。
ソースコードをじっくり読んでもっと理解を深めたい。

【参考】

CentOS6.3をLinuxカーネル3.6にアップデートしてみました(カーネル再構築) (linuxmaster.jp)

bbr/bbr-quick-start.md at master · google/bbr (github.com)

dev.classmethod.jp