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

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

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

>具有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.取决于版本.

总结

以上是内存溢出为你收集整理的GRO(通用接收卸载)如何在更高级的NIC上运行?全部内容,希望文章能够帮你解决GRO(通用接收卸载)如何在更高级的NIC上运行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存