# TCP/IPスタック統合
## 定義
TCP/IP スタック統合は、TCP/IP 処理を既存の OS、ランタイム、NIC、メモリ管理、アプリケーション実行モデルへ組み込む際に、依存関係・責任境界・データ表現・性能機構を調整する設計問題である。
単に TCP/IP スタックを移植するのではなく、統合先が必要な実行モデルとハードウェア機能を選べるインターフェースを設計することが中心になる。
(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
## 設計軸
- **外部依存の配置**: スタックが OS、NIC、ライブラリ、コンパイラ、スレッド実行環境を直接要求するか、コールバックや抽象化層を介して統合側へ委ねるか。
- **実行ループの所有者**: スタックが処理ループを持つか、統合側のスレッドやイベントループから関数を呼び出すか。
- **状態の所有権**: 接続状態やパケット表現を共有構造へ置くか、コアごとの context object やコアローカル構造へ分割するか。
- **データ移動の責任**: スタック内部バッファへコピーするか、NIC バッファとアプリケーションのペイロードを共有してゼロコピーを構成するか。
- **ハードウェア機能の境界**: チェックサム、scatter-gather、TSO、LRO、RSS の利用をスタックに固定するか、統合側のコールバックで選択可能にするか。
## 横断的知見
- TCP/IP スタックを小さな機器へ収める場合も、高速 NIC を使う大規模システムへ組み込む場合も、主要な設計手段は機能の単純な削除ではなく、状態と責任の置き場所を変えることである。[[uIP]] は再送データの再生成をアプリケーションへ移し、[[iip]] はプラットフォーム依存処理と実行ループを統合側へ移す。(Source: [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]], [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
- 統合容易性と高性能は、抽象化の粒度だけでなく、統合側が CPU コア割り当てと NIC 機能を選べるかで決まる。[[@2014__NSDI__mTCP - a Highly Scalable User-level TCP Stack for Multicore Systems|mTCP]] はコアごとの TCP スレッドとユーザー空間 I/O を一体化する固定的な高性能構成を示し、[[iip]] は split、merge、unified を利用側のループから選択可能にする。(Source: [[@2014__NSDI__mTCP - a Highly Scalable User-level TCP Stack for Multicore Systems]], [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
- TCP/IP 処理の責任境界は、スタック内部だけでなく NIC 側へも移せる。[[@2020__NSDI__AccelTCP - Accelerating Network Applications with Stateful TCP Offloading|AccelTCP]] は TCP の状態処理の一部を SmartNIC へオフロードし、[[iip]] は NIC オフロードを利用するためのコールバックをホスト側の統合境界に置く。両者は異なる配置を取るが、ホスト TCP/IP 実装へすべてを固定しないという方向は共通する。(Source: [[@2020__NSDI__AccelTCP - Accelerating Network Applications with Stateful TCP Offloading]], [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
- ゼロコピーは「コピーを削除すれば必ず速くなる」機構ではない。[[iip]] では小メッセージの TCP ping-pong で scatter-gather 無効化がわずかに有利な場合がある一方、バルク転送ではデータサイズが大きいほど scatter-gather の効果が現れる。(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]], [[ゼロコピーネットワーキング]])
- 高帯域 Linux の測定は、統合先が選択できる責任境界の必要性を別の角度から示す。長フローでは受信側データコピー、短フローでは TCP/IP 処理とスケジューリング、複数フローではキャッシュと NUMA が支配的になるため、固定された処理ループや CPU 配置ではワークロード全体を効率化できない。(Source: [[@2021__SIGCOMM__Understanding Host Network Stack Overheads]])
- **統合境界には「選択可能なAPI」と「信頼された固定経路」の二つの設計方向がある**: iipは利用側へ実行ループ、CPUコア割当、NICオフロード、メモリ管理の選択権を開くのに対し、TASはOSサービス側がfast path/slow pathと輻輳ポリシーを所有し、アプリケーションにはPOSIX互換APIを提供する。両者は反対ではなく、柔軟性をどの層へ公開するかの違いである。(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]], [[@2019__EuroSys__TAS - TCP Acceleration as an OS Service]])
- **LUNAは統合境界をAPIだけでなく、実行ループ・バッファ所有権・NIC分岐・制御プレーン同期の組み合わせとして実装する**: batch-r2cは従来型イベントAPIに近い一方、inline-r2cとZbufはアプリケーションへio-vector型APIとバッファ寿命の責任を要求する。カーネルTCPとの共存はFlow BifurcationとSR-IOVでデータ経路を分け、ARP・ルートはカーネルからnetlinkで同期する。(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]], [[@2023__USENIX ATC__Deploying User-space TCP at Cloud Scale with LUNA]])
- **既存 API を保つ統合は、内部データ構造と互換性境界を同時に再設計する**: Fastsocket は Local Listen Table・Local Established Table と RFD で状態所有コアを分割し、Fastsocket-aware VFS では `/proc`、`lsof`、`netstat` に必要な inode・dentry の最小状態を残す。iip のコールバックによる外部依存の間接化とは異なるが、どちらも TCP 処理を固定的な共有経路から切り離し、統合側が必要とする責任境界を明示する。(Source: [[@2016__ASPLOS__Scalable Kernel TCP Design and Implementation for Short-Lived Connections]], [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
## 未解決の問い
- iip の API 境界は、DPDK 以外のパケット I/O、現代の io_uring、XDP、SmartNIC へ接続したときにも同じ抽象化の深さを保てるか。
- split、merge、unified の選択を、ワークロードのメッセージサイズ・接続寿命・負荷変動から自動的に決定できるか。
- TCP 状態をコアローカル、ホスト共有、NIC オフロードのどこに置くかを、レイテンシー、性能、障害復旧、観測可能性の共通指標で比較できるか。
- POSIX socket 互換層を追加した場合、iip が避けた統合複雑性と性能上の利点はどの程度失われるか。
- 8 ビット機器の資源制約を扱う [[組み込みTCP IP|組み込みTCP/IP]] と、100 Gbps 級 NIC を扱う iip の設計原則を、IoT ゲートウェイや DPU 搭載サーバへ一つの分類体系で接続できるか。
- LUNAの「互換性を保つbatch-r2c」と「性能を優先するinline-r2c」を、iipのsplit/merge/unifiedやTASのfast path/slow pathと同じ移植性・性能・障害分離の軸で定量比較できるか。
- Fastsocket の接続局所性、iip の split/merge/unified、TAS の OS サービス境界を、API 互換性、NIC 共有、状態移送、障害復旧の共通指標で比較できるか。
## 関連
- [[iip]] — API とコールバックで統合境界を設計した TCP/IP スタック
- [[ユーザーレベルTCPスタック]] — OS カーネル外で TCP/IP 処理を実行する系譜
- [[組み込みTCP IP|組み込みTCP/IP]] — 小型機器向けに状態とバッファを削減する系譜
- [[ゼロコピーネットワーキング]] — パケットバッファとアプリケーション間のデータ移動を削減する設計
- [[カーネルバイパスネットワーキング]] — OS のネットワークスタックを迂回する実行基盤
## 出典
- [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]]
- [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]]
- [[@2014__NSDI__mTCP - a Highly Scalable User-level TCP Stack for Multicore Systems]]
- [[@2020__NSDI__AccelTCP - Accelerating Network Applications with Stateful TCP Offloading]]