# iip
iip は、既存の高性能 TCP/IP スタックが持つ統合複雑性と、移植性重視スタックの性能制約を同時に扱う TCP/IP スタック実装である。
TCP/IP 処理を C89 準拠のコードとして提供し、CPU、NIC、OS、ライブラリ、コンパイラに依存する処理を開発者実装のコールバックへ間接化する。
(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]])
## 設計上の特徴
- 開発者が用意したスレッドから API 関数を呼び出し、split、merge、unified の CPU コア割り当てモデルを選べる。
- context object に TCP/IP 処理状態を集約し、スレッドごとに専用状態を持たせる。
- packet object と packet buffer のコールバックにより、開発者側のパケット表現とゼロコピー I/O を接続する。
- checksum、scatter-gather、TSO、LRO などの NIC オフロードを利用可能にする。
- RSS によって同一 TCP 接続のパケットを同じ処理スレッドへ振り分け、コア間の共有状態競合を避ける。
## 評価
ConnectX-5 100 Gbps NIC を備える Linux 6.2 の 32 コア環境で、1 バイト TCP ping-pong の default 構成は 72.3 million requests/sec に到達した。
バルク転送では default 構成が NIC 帯域に近づき、TSO の無効化でスループットがほぼ半分、送信側の TSO とチェックサム・オフロードの無効化で default の約 10%まで低下した。
(Source: [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]] §4)
## 関連
- [[Kenichi Yasukata]]
- [[IIJ Research Laboratory]]
- [[TCP IPスタック統合|TCP/IPスタック統合]]
- [[ユーザーレベルTCPスタック]]
- [yasukata/iip](https://github.com/yasukata/iip)