服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

GRO(通用接收卸载)如何在更高级的NIC上工作?

我对特定的答案感兴趣: 具有GRO的NIC是否编辑/创buildTCP ACK或任何其他数据包(或者此function对接收器/发送器TCP堆栈是否透明)? 网卡应该将“粘贴段”传递给TCP堆栈时应该有一个超时/事件? 他们是什么? 在数据包转发设置中,GROfunction是否也尝试读取接收器的ACK(请参阅下面为什么我问这个问题)? 任何解释GRO和其他网卡卸载function(TSO,LSO …)的源码都会比维基百科和Linux手册页更好。 更多细节: 我正在解决一个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以太网电缆直接连接在一起。