# 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)