Linux。
与 eth0 等硬件设备相比,使用 Tap 设备是否会造成性能损失?
目标是创建一个用户空间 tcp/ip 堆栈并尽可能避免内核。
我想确保在 Tap 设备上进行开发是正确的做法。
谢谢
答案1
由于评论权限不足,我将其作为答案发布。
从我的经验来看,由于 TCP 的性质,使用 tcp - tap 的 VPN 在无线连接上表现非常糟糕。切换到 UDP 后,不再出现连接超时 - 使用 tun 设备时甚至更好。我建议您在网络连接较差的情况下测试 TCP 和 UDP 以及 tap/tun。
答案2
是的,有。使用 Tap 设备会导致客户端进程和持有 Tap 设备的进程之间进行上下文切换。它还会导致额外的复制,因为需要将数据从客户端进程复制到内核,然后从内核复制到 Tap 持有者。
但是,Linux 在上下文切换方面表现相当出色,缓存内复制也相当便宜,因此开销可能足够小。我建议您使用 tap 在用户空间中实现堆栈,然后执行一些基准测试和分析,以确定是否值得将代码移入内核。