我对特定的答案感兴趣:
更多细节:
我正在解决一个IPSec实现的性能问题。 问题是可用带宽不是均匀分布在所有4个VPN隧道(大约分布为200MBps / 200MBps / 1MBps / 1MBps;每个VPN隧道封装单个TCP连接)。 在PCAP偶尔我看到,Web服务器闲置了约2秒(等待ACK)。 当Web服务器重新传送未确认的段时,将继续下载。
我从PCAP内部感觉到,NIC GROfunction将数据包粘合在一起,但有时并不及时将它们传递给TCP堆栈,导致问题。
由于此VPN服务器没有终止TCP连接的接口,而只是转发数据包。 然后我试图禁用GRO,之后我发现stream量均匀分布在所有的隧道中。 另外,当在Web服务器上禁用TCP窗口缩放时,即使启用GRO,带宽也是均匀分布的(这就是为什么我有问题#3)。
我在Ubuntu 10.04服务器上使用2.6.32-27 linux(64位)。 网卡是Intel 82571EB。 所有的接口(HTTP客户端,VPN客户端,VPN服务器,Web服务器)都通过1Gbit以太网电缆直接连接在一起。
我发现这篇文章非常有用: JLS2009:通用接收卸载 。 它给出了GRO如何工作的一个很好的概述。
Ethtool 可以在特定的接口上启用/禁用GRO。 取决于版本。