# 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)
## 横断的知見
- 今後の取り込みで、複数ソース間の関係を追記する。
## 未解決の問い
- この概念をどのソース群で継続的に検証するか。