geeglo “用户态程序做的事情更多,CPU 反而能省下?”我上面着一大段就是在解释,为什么 L4 代理可以比 L3 代理更快。L4 代理并不是改每个包的地址,而是在建立了两个 TCP 连接,分别收发。这种情况下,两侧连接都可以充分利用硬件加速。L3 代理因为不经过 TCP 协议栈,tso lro 都是用不了的。就要修改每个包的地址。家用路由器为什么需要硬件 nat 加速?说白了就是 SoC 性能不足以处理每个包。软路由所需的 CPU 的性能 vs 硬路由的 SoC 的性能,这没法比。硬路由可以用更弱的 SoC 实现同样的性能(在有限的功能范围内),恰恰是说明了,硬件加速对于网络处理的重要性。以上是对于比较稳定的高性能网络。瓶颈在硬件性能。对于不稳定的网络,L4 代理可以减少重传和延迟,因此能提高单个连接的 throughput ,准确的说是 goodput 。对于这类网络,瓶颈在于 TCP 流控和重传。连接处理性能不是瓶颈。以上是我原本的观点。但是楼下
FabricPath 说 nf 在 driver 上层,而 gro/lro 是对所有 TCP 包都有效,因此 nf 也可以享受到硬件加速。如果是这样的话,那 nf 的转发能力肯定是要比 Nginx 要强的。