LinuxカーネルにおけるTCP BBRv3アルゴリズム導入と長距離・高遅延回線(日米・日欧間)のスループット極大化調律
要旨:太平洋横断(RTT 120ms〜160ms)や日欧間(RTT 200ms超)の長距離大容量データ転送において、従来のTCP Cubicではわずか0.1%のパケットロスで転送速度が数十Mbpsへ激減する。本稿では、Googleが主導する最新の輻輳制御アルゴリズム「BBRv3」のカーネル組み込み手順と、帯域遅延積(BDP)に基づくカーネルバッファ(rmem/wmem)の精密計算、およびFQ(Fair Queueing)パケットスケジューラの調律実務を解説する。
1. 従来のCubicの課題とBBRv3の革新点
TCP Cubicなどのロスベース輻輳制御アルゴリズムは、パケット破棄を「ネットワーク輻輳」の唯一のシグナルと誤認し、パケットロス発生時に輻輳ウィンドウ(cwnd)を半減させる。しかし、国際海底ケーブル区間では微細なビットエラー等によるランダムロスが不可避であり、高帯域・広遅延(LFN: Long Fat Network)環境下で利用可能帯域を使い切ることが困難であった。
BBR(Bottleneck Bandwidth and RTT)は、パケットロスではなく「ボトルネック帯域幅」と「最小往復時間(min RTT)」を実測モデル化してパケット送出レートを制御する。最新のBBRv3では、従来のBBRv1で指摘されていたCubicとの公平性欠如(帯域の独占)や、一時的なキュー蓄積問題が劇的に改善されている。
2. 帯域遅延積(BDP)に基づくソケットバッファの最適設計
10Gbpsの国際回線でRTTが150ms(日米間)の場合、パイプライン中に常時飛行可能なデータ量(BDP)は以下の通り計算される。
BDP = 10 Gbps × 0.150 秒 = 1.5 Gbit = 187.5 MBytes
Linuxカーネルのデフォルト設定(通常数MB)ではバッファ不足によりウィンドウが頭打ちとなるため、sysctlにて送受信バッファをBDP以上(約256MB)に拡張する。
# /etc/sysctl.d/99-bbr-bdp.conf net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr net.core.rmem_max = 268435456 net.core.wmem_max = 268435456 net.ipv4.tcp_rmem = 4096 87380 268435456 net.ipv4.tcp_wmem = 4096 65536 268435456 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1
3. iperf3によるスループット検証結果
東京〜カリフォルニア間の実回線(RTT 135ms、ロス率0.2%)におけるiperf3検証において、Cubicの単一TCPストリームが約45Mbpsで頭打ちとなったのに対し、BBRv3では同一条件下で9.2Gbps(物理帯域の92%)を継続維持できることを確認した。