参考: http://www.voidcn.com/article/p-pcknroxt-bed.html

    1 工作原理
    Netmap 解析 - 图1
    Netmap是基于零拷贝思想的高速网络I/O架构,它能够在千兆或万兆网卡上达到网卡的线速收发包速率。零拷贝(zero-copy)是指主机、路由器等设备与网卡交互时,CPU不需要将数据从这个内存区域拷贝到另一个内存区域。
    直接缓存访问(direct buffer access)。DBA为了节省内核态和用户态之间的拷贝,可以将应用程序直接跑在内核态,如内核态的Click。也可以选择将内核中的数据包缓存区直接暴露给用户态程序。

    当网卡运行在netmap模式下,NIC环会与主机协议栈进行断开,netmap会拷贝一份NIC环,被称作netmap环。同时,netmap还会维护一对环,用于与主机协议栈进行交互。这些环所指向的用于存储数据包内容的缓存位于共享空间,网卡直接将数据包存入这些缓存。应用程序可以通过调用netmap API访问netmap环中的数据包内容,也就可以访问用于存储数据包的缓存。

    利用mmap,将网卡驱动的ring内存空间映射到用户空间。这样用户态可以直接访问到原始的数据包,避免了内核和用户态的两次拷贝;
    利用预先分配的固定大小的buff来保存数据包。这样减少了内核原有的动态分配;