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

前端之家收集整理的这篇文章主要介绍了GRO(通用接收卸载)如何在更高级的NIC上运行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对特定答案感兴趣:

>具有GRO的NIC是否编辑/创建TCP ACK或任何其他数据包(或此功能对接收器/发送器TCP堆栈是否透明)?
>当NIC应该将“粘合段”传递给TCP堆栈时,应该有超时/事件?这些是什么?
>在数据包转发设置中 – GRO功能是否也尝试读取接收器ACK(请参阅下面我为什么这样问)?
>任何解释GRO以及其他NIC卸载功能(TSO,LSO …)的资源都比wikipedia和linux手册页更好,我们将非常感激.

更多细节:

我正在使用一个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堆栈时,数据包已经重新排序.
>超时由GRO规范定义为一个TCP / IP“tick”(时间戳字段的增量),这是一个非常小的数字,但在快速网络上仍可能接收到多个数据包.
> GRO将在转发器的接收端发挥作用,事实上GRO已经创建,因此更贪婪的LRO方法将停止拧紧转发器上的数据包.
>我上面链接文章确实有帮助.

Ethtool可能能够在特定接口上启用/禁用GRO.取决于版本.

原文链接:https://www.f2er.com/linux/402581.html

猜你在找的Linux相关文章