Linux tun/tap 驱动多队列模式(C/C++)

本文详细介绍了Linux内核中tun/tap网卡的多队列模式,强调了其在带宽提升上的优势,以及如何通过设置非阻塞模式和合理利用epoll来优化并发性能,避免内核锁竞争带来的效率降低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值