# netmap [[Luigi Rizzo]]([[University of Pisa|Università di Pisa]]、2012)が提案した高速パケット I/O フレームワーク。[[カーネルバイパスネットワーキング]]の代表的実装の一つ。 ## 一言定義 カーネルとユーザー空間の間でリングバッファを共有メモリでマッピングし、パケットコピーをなくしつつ OS の保護機構を維持する高速パケット I/O 基盤。 ## コアアーキテクチャ ``` ユーザープロセス └── mmap → [共有リングバッファ] ↕ NIC ドライバ (netmap 対応) ↕ ハードウェア NIC ``` - **リングバッファ共有**: 物理メモリをカーネル・ユーザー双方からマップ。コピーゼロ。 - **プリアロケーション**: 起動時にパケットバッファとリングスロットをまとめて確保し、実行中の動的割り当てをゼロにする。 - **バッチシステムコール**: `ioctl(NIOCTXSYNC)` / `ioctl(NIOCRXSYNC)` で複数パケットを一括同期。 - **デバイス保護**: ユーザー空間からデバイスレジスタには直接アクセスさせない(DPDK の UIO モデルとの差異)。 ## 性能特性 | 指標 | 値 | |------|----| | 最大スループット | **14.88 Mpps**(10 Gbit/s 線速) | | CPU | 900 MHz シングルコア | | 従来 API 比 | **約 20 倍**高速 | | libpcap アプリ高速化 | **5 倍以上** | ## 対比:DPDK との違い | 観点 | netmap | DPDK | |------|--------|------| | カーネルドライバ | 改変版を維持 | 完全バイパス(UIO/VFIO) | | デバイス保護 | 維持 | ユーザー空間から直接制御 | | 既存 API 互換 | libpcap エミュレーション層あり | 独自 API が中心 | | 採用 OS | FreeBSD・Linux | Linux 中心 | | 初出 | 2012(ATC '12) | 2013(Intel 主導) | ## 主な用途 - 高速パケットキャプチャ(tcpdump + libpcap エミュレーション) - ユーザー空間ルーター(Click Modular Router) - 仮想 NIC(VirtualBox・bhyve の vale スイッチ) - 負荷テストツール(pkt-gen) ## 関連概念 - [[カーネルバイパスネットワーキング]] — netmap が体現するアーキテクチャパターン - [[ゼロコピーネットワーキング]] — netmap が実現するコア最適化 - [[RPS(Receive Packet Steering)]] — カーネル内でのパケット分散(異なるレイヤーの最適化) ## 主要ソース - [[@2012__USENIX-ATC__netmap A Novel Framework for Fast Packet IO]] — 原著論文(Best Paper) ## 横断的知見 - 今後の取り込みで、複数ソース間の関係を追記する。 ## 未解決の問い - この概念をどのソース群で継続的に検証するか。