> [!abstract] 概要(abstract 日本語訳)
> 現代のキーバリューサーバやレイヤー7ロードバランサの性能は、基盤となるTCPスタックの効率性に大きく依存することが多い。カーネルバイパスやゼロコピーといった多数の最適化にもかかわらず、TCPスタックによる性能向上はプロトコル適合オーバーヘッドにより根本的に制限されている。残念ながら、プロトコル適合オーバーヘッドは短命コネクションではCPUサイクル全体の60%に達し、L7プロキシの性能を3.2〜6.3倍劣化させる。
> 本研究はAccelTCPを提案する。AccelTCPはプログラマブルNICをTCPプロトコルアクセラレータとして活用するハードウェア支援TCPスタックアーキテクチャである。AccelTCPはコネクション確立・切断などの複雑なTCP操作をNICに完全にオフロードし、ホストスタック処理を簡素化してアプリケーション処理のためにCPUサイクルを解放できる。さらに、スプライシングされたコネクションのパケットをDMAオーバーヘッドなしにNICがリレーするコネクション・スプライシングのNIC実行もサポートする。評価により、AccelTCPは短命コネクションが持続コネクションと同等の性能を発揮できることが示された。また、Redis(人気のインメモリキーバリューストア)とHAProxy(広く使われるレイヤー7ロードバランサ)の性能をそれぞれ2.3倍・11.9倍向上させた。
## 論文情報
- **タイトル**: AccelTCP: Accelerating Network Applications with Stateful TCP Offloading
- **著者・所属**: YoungGyoun Moon(KAIST)、SeungEon Lee(KAIST)、Muhammad Asim Jamshed(Intel Labs)、KyoungSoo Park(KAIST)
- **媒体**: NSDI '20(17th USENIX Symposium on Networked Systems Design and Implementation)
- **発表年**: 2020年2月25〜27日、Santa Clara, CA, USA
- **ISBN**: 978-1-939133-13-7
- **コードURL**: https://github.com/acceltcp
## 概要
AccelTCPは、プログラマブルNIC(スマートNIC)をTCPプロトコルアクセラレータとして活用するデュアルスタックTCPアーキテクチャである。ホストスタックが全TCP操作の主制御を担いつつ、コネクション確立・切断とコネクション・スプライシングの2つのステートフル操作をNICにオフロードする。これにより短命コネクションのCPUオーバーヘッドを大幅削減し、L7プロキシではDMA操作そのものを排除する。
## 問題設定
**入力と出力**: 短命TCPコネクション(例: キーバリューサーバへの1クエリ1コネクション)とL7プロキシワークロードを対象に、CPUサイクル効率と実効スループットを最大化する。
**問題の核心**: TCPスタックはアプリケーションの目的に関係なく機械的なプロトコル適合を維持しなければならない。
- 短命コネクション: 64Bパケット1往復のトランザクションでも SYN/SYN-ACK/ACK/FIN/FIN-ACK/ACK の6パケットを処理し、TCB構築・破棄・コネクション管理テーブル操作がCPUサイクルの60.5%を占める(Table 1)
- L7プロキシ: DPDKベースのカーネルバイパスでも64Bメッセージで7.3 Gbps(L3 ホスト転送比)→2.1 Gbps(Table 2)と3.2倍劣化。DMA操作がさらに3.8倍の追加劣化を引き起こす
**前提条件**: Netronome Agilio LX(NFP-6480チップ、120フロー処理コア@1.2GHz、8MB IMEM + 8GB EMEM)などのスマートNICを利用可能であること。ホストスタックはmTCPベース(DPDK使用)。
## 提案手法
### アーキテクチャ: デュアルスタックTCP
TCPスタックの機能を2カテゴリに分割する:
- **セントラルTCP操作(ホスト担当)**: アプリケーションデータ転送、信頼性のある再送、フロー/輻輳制御、エラー検出
- **ペリフェラルTCP操作(NIC担当)**: コネクション確立・切断(プロトコル適合のための純粋オーバーヘッド)とコネクション・スプライシング(パケットリレー)
設計原則は3つ:
1. **ホスト側による完全制御**: ホストスタックはスタンドアロンで動作可能。コーナーケースはホストが処理
2. **TCBの単独所有権(Single Ownership)**: 任意時点でホストとNICのいずれか一方のみがTCBを所有する。TCBオフロードと同時に所有権も移転し、矛盾した状態更新を回避する
3. **NIC上の複雑性の最小化**: ステートレスハンドシェイク・条件付きティアダウンオフロード・固定コストのスプライシングで複雑性を抑制
### NICデータプレーンの設計
**コネクション確立オフロード(§4.1)**:
- SYNクッキー(RFC 4987)によるステートレスハンドシェイクをNICで実現。ハードウェアハッシュ(CRC32)でISN生成
- ISN = ハッシュ値(24ビット) + エンコードMSS(3ビット) + 時刻ビット(5ビット、リプレイ攻撃防止)
- TCP Timestamps オプションにネゴシエートされたオプションをエンコードし、確立済みコネクションのみホストに渡す
**コネクション切断オフロード(§4.2)**:
- 条件: 残データが送信ウィンドウサイズ以内、blocking close()なし、NICメモリ閾値以内
- フロー状態26バイトをSRAMに保存、データをTSOパケット化してDRAMに格納
- タイマービットマップホイール: N個のビットマップで同時RTO管理。並行更新のロック競合を最小化(Figure 6)
**コネクション・スプライシングオフロード(§4.3)**:
- NICをL4スイッチとして動作させ、2コネクションを1コネクションに見せかけてパケットヘッダ変換のみ実行
- 差分チェックサム更新: 4タプルとシーケンス/ACK番号のオフセットを事前計算し、パケットごとに1の補数加算で適用(Figure 8)
- DMAゼロのフルラインレート(80 Gbps@1コア)転送を実現
### ホストスタックの最適化(§5.2)
- **遅延TCB生成**: 短命コネクションでは最初はクアジTCB(40バイト)のみ作成。複数トランザクション発生時のみフルTCB(400〜700バイト)に昇格
- **日和見的ゼロコピー**: 受信パケットが順序通りに到着かつアプリケーションがread待機中の場合に限り、ソケットバッファを経由せずアプリケーションバッファに直接コピー
- **協調的ユーザーレベルスレッディング**: mTCPの2カーネルスレッド(TCPスレッド+アプリスレッド)構成をユーザーレベル協調スレッドに変更し、コンテキストスイッチオーバーヘッドを削減
## 新規性
既存アプローチとの対比:
- **部分的TCPオフロード(TSO/LRO)**: 大メッセージのみに有効。短命コネクションには効果薄
- **フルスタックTOE**: カーネルスタックの侵襲的変更が必要。柔軟性に欠け運用困難
- **TCP Chimney(Microsoft)**: データ転送オフロードに特化。現在はほぼ無効化
- **AccelTCPの差異**: コネクション管理(確立・切断)のみをオフロードしてホストがデータ転送の完全制御を保持する「選択的ステートフルオフロード」設計。複雑性の増加なしに短命コネクションとL7プロキシの主要ボトルネックを解消する
## 実験設定
- **実験環境**: Intel Xeon Gold 6142 @ 2.6GHz + 128GB DRAM + Netronome Agilio LX 40GbE(NFP-6480)。クライアント×4: Xeon E5-2640 v3、バックエンド×4: Xeon E5-2699/2683 v4。Dell Z9100-ON スイッチ(40GbE)
- **比較対象**: mTCP(ベースライン カーネルバイパスTCPスタック、DPDK)、IX(プロテクテッドデータプレーン OS)
- **評価指標**: スループット(Mtps / Gbps)、CPU使用率内訳、コスト効率(性能/ドル)
## 実験結果
**マイクロベンチマーク(短命コネクション、Figure 10・Table 3)**:
- AccelTCP 非持続コネクションが mTCP 非持続比 2.2〜3.8 倍の向上
- AccelTCP 非持続が IX 持続コネクションと同等性能を実現
- 1コアでの各最適化の内訳(Table 3、0.89 Mtps ベースライン):
- 確立オフロード追加: 1.21 Mtps(1.4倍)
- 切断オフロード追加: 2.06 Mtps(2.3倍)
- 遅延TCB生成+日和見的ゼロコピー追加: 3.42 Mtps(3.8倍)
**L7プロキシ(Figure 12)**:
- epproxy-AccelTCP(1コア)が epproxy-mTCP(8コア)に対し 1.4〜2.2 倍のスループット
- 512バイトメッセージで80 Gbps(40GbEワイヤレート)達成(PCIe経由DMAを完全バイパス)
**実アプリケーション**:
- Redis(Table 4): 1コア 0.28 Mtps(mTCP ユーザーレベルスレッド)→ 0.44 Mtps(AccelTCP)で 1.6 倍、8コアで 1.94→3.06 Mtps(1.6倍)。AccelTCPがTCP処理のCPUサイクルを最大75%削減
- HAProxy(Table 5): 1コアで 4.3 Gbps → 73.1 Gbps(11.9倍)、平均レスポンスタイム 13.3 ms → 0.98 ms(13.6倍短縮)
**コスト効率(Table 6)**:
- スマートNIC(Agilio LX、$1,750)は通常NIC(XL710-QDA2、$440)比3〜4倍高価だが、性能/ドルは AccelTCP が 1.6〜1.9 倍優位
## 考察
NICコードの実装規模が C コード 1,501行 + P4コード 195行と小さく、スマートNICで管理可能なサイズに抑えられている。ホストの完全制御維持による安全性と、条件付きオフロードによる適応性(NIC過負荷検出時のオフロード率動的削減)が設計の核心。
**制約**:
- コネクション・スプライシング中はアプリケーションがパケット内容を読み書きできない
- SYNクッキーはTCPタイムスタンプオプション非対応クライアントで動作しない
- 1MSSを超えるデータのソフトウェアTSOが1コアで20 Gbps頭打ち(ハードウェアTSOのAPIが未完成)
- SYN洪水対策として暗号学的ハッシュが望ましいが、Agilio NIC API が未対応のためCRC32を使用
## 強み / 弱点・課題
**強み**:
- 既存カーネルバイパスTCPスタック(mTCP, IX)と補完関係。どのTCPスタックにも拡張可能な設計
- TCBの単独所有権原則がシンプルで実装の一貫性を保証
- タイマービットマップホイールによるNIC上のRTO管理が並行性と効率性を両立
**弱点・課題**:
- 大データ転送のソフトウェアTSO性能限界(ハードウェアTSOサポートが必要)
- 暗号学的SYNクッキーのNIC APIサポート不足
- スマートNICのコストが通常NICの3〜4倍(当時2019年時点)
- コネクション・スプライシング後のコンテンツ修正不可(部分的な柔軟性制約)