GRO(通用接收卸载)如何在更高级的NIC上运行?
我对特定答案感兴趣:
>具有GRO的NIC是否编辑/创建TCP ACK或任何其他数据包(或此功能对接收器/发送器TCP堆栈是否透明)? 更多细节: 我正在使用一个IPSec实现来解决性能问题.问题是可用带宽并非均匀分布在所有4个VPN隧道中(分布大约为200MBps / 200MBps / 1MBps / 1MBps;每个VPN隧道封装单个TCP连接).在PCAP中偶尔我看到网络服务器闲置了大约2秒钟(等待ACK).当webserver重新发送未确认的段时,下载将恢复. 我对PCAP的内心感觉是,NIC GRO功能将数据包粘合在一起,但有时不会及时将它们传递给TCP堆栈,这就会导致问题. 由于此VPN服务器没有终止TCP连接的接口,而只是转发数据包.然后我尝试禁用GRO,之后我发现流量均匀分布在所有隧道中.此外,当在Web服务器上禁用TCP窗口缩放时,即使启用了GRO,带宽也会均匀分布(这就是为什么我有问题#3). 我在Ubuntu 10.04服务器(64位)上使用2.6.32-27 linux. NIC是Intel 82571EB.所有接口(HTTP客户端,VPN客户端,VPN服务器,Web服务器)都通过1Gbit以太网电缆直接连接. 解决方法
我发现这篇文章非常有用:
JLS2009: Generic receive offload.它概述了GRO的工作原理.
>某些适配器可能会这样做,但相关的驱动程序也必须知道它.此外,司机本身也可以用软件完成.由于这在进入内核TCP / IP堆栈之前发生,因此在完全进入内核空间TCP / IP堆栈时,数据包已经重新排序. Ethtool可能能够在特定接口上启用/禁用GRO.取决于版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |