LINUX 内核在3.X版本才支持,正式是到 4.1 版本内核才加入到内核之中被支持,所以相对来说距今时间上来说是比较新的一种扩展技术。
多队列模式的 tun/tap 可以显著的提高,单个 tun/tap 网卡的带宽吞吐速度,但肯定没有 DPDK 那种零拷贝不内核切换的效率高。
一般来说,tun/tap 的效率与内核直接处理网卡数据速度,大约差距至少5倍左右,即 1000Mbps,tun/tap 最大用户层可以达到 200Mbps,实际上大多数情况达不到。
以玩客云S805晶片为例,单核拉满在300Mbps 左右,三核拉满达到最大速度就是900Mbps,虽然是1000Mbps 的网卡口子,但是芯片处理不了那么大的数据吞吐量。
四核拉满跑 tun/tap 最大吞吐速度大约在 350Mbps 左右,即双工 160 ~ 170Mbps 下行速度,上传倒是可以爆表达到 190 ~ 200Mbps。
这里是指用多队列模式榨干CPU、并且需要跑AES-256-GCM/CFB这样的加密算法,如果不跑这些会更好一点,可能在 200 ~ 230Mbps 左右。
在这种机子上面 tun/tap 驱动损失的转发效率可能没有那么大,但是一般大约就是五倍的性能差距,反正按着算大体不会差太多。
重点:
1、多队列模式下,可以重复打开相同的 tun/tap 网卡
2、多队列模式下,每个tun/tap 设备句柄会随机收取到内核派发的包
(所以不存在主从这样的接口)
3、多队列模式下,每个 tun/tap 设备句柄可以被 epoll 附加监听读写事件
4、多队列模式下,每个 tun/tap 设备