理解linux环境中的TSO\UFO\GSO等网络分段卸载技术

引言:

        近期在排查k8s偶发的一个问题,pod在calico网络下跨节点访问变慢,丢包严重。经过多方排查,最终确认是主机的网络分段卸载技术enabled引起,关闭tso\ufo\gso,问题修复。

       关于网络分段卸载技术mark下, 原文链接如下:

https://www.cnblogs.com/sammyliu/p/5227121.html

正文:

1.1 TSO名词解释

TSO:TCP Segmentation Offload,是一种利用网口硬件协助TCP大数据包分段分送的技术,目的是为了减轻CPU的负荷。

MSS(Maxium Segment Size): MSS 是 TCP 数据段每次能够传输的最大数据分段的长度。这个值一般由MTU替代确认。

MTU(Maximum Transmission Unit),是IP报文的最大传输单元,一般为1500,至于为啥是这个值,可以自行百度。

  TCP 分段:当网络应用发给 TCP 的 message 的长度超过 MSS 时,TCP 会对它按照 MSS 的大小将其分为多个小的 packet,并且在每个 packet 上添加 TCP Header 成为一个 TCP 段(segement)。

1.2 GSO

   要实现tso,是需要以下支持的:

  • 物理网卡支持。
  • Linux 网卡驱动支持。可以使用 ethtool -K ethX tso on 命令打开网卡和驱动对 TSO 的支持,如果返回错误则表示不支持。
  • 还需要 Net:TCP checksum offloading and Net:Scatter Gather 支持。

GSO(Generic Segmentation Offload),是比tso更同意的一种技术,不需要硬件的支持,对于支持 TSO 功能的硬件,则先经过 GSO 功能,然后使用网卡的硬件分片能力执行分片;而对于不支持 TSO 功能的网卡,将分片的执行,放在了将数据推送的网卡的前一刻,也就是在调用驱动的 xmit 函数前。 

1.3 UFO

UFO(UDP Fragmentation Offload),大的udp 包分段只能交给IP层操作,将 IP 分片 offload 到网卡(NIC)中进行,原理同 TSO。

2. 网络分段带来的问题

       分段offloading 可能会带来潜在的问题,比如网络传输的延迟 latency,因为 packets 的大小的增加,大大增加了 driver queue 的容量(capacity)。比如说,系统一方面在使用大的 packet size 传输大量的数据,同时在运行许多的交换式应用(interactive application)。因为交互式应用会定时发送许多小的packet,这时候可能会应为这些小的 packets 被淹没在大的 packets 之中,需要等待较长的时间才能被处理,这可能会带来不可接受的延迟。

       网络分段也无形增加了网卡的负担,在网络拥塞的情况下,这一问题可能会被放大,造成网络性能下降严重的问题。同时在虚拟化和容器网络环境下,因为虚拟网络和物流网卡的差异,有很多不可预知的问题。

3、关闭网段分段技术

3.1 临时关闭

# ethtool -K eth0 tso off

查看效果

#ethtool -k eth0

3.2 永久关闭

修改/etc/sysctl.conf

或者:

sysctl net.inet.tcp.tso

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LRO (Large Receive Offload) 和 GRO (Generic Receive Offload) 是网络协议栈的两种技术,用于优化数据包的接收处理。 LRO 主要用于 TCP,而 GRO 则适用于所有传输协议 。 LRO 是一种在网卡上进行数据包处理的技术,它将多个接收到的小数据包合并成一个大的数据包,减少了处理的开销。这种技术可以有效地提高网络性能和吞吐量。然而,LRO 只适用于 TCP 协议 。 GRO 是在内核网络协议栈实现的技术,它通过合并接收到的数据包来减少处理的开销,提高网络性能。与 LRO 不同,GRO 可以应用于所有传输协议,而不仅限于 TCP。GRO 还保留了每个接收到的数据包的熵信息,这对于像路由器这样的应用非常重要。通过匹配条件,如源/目的地址、TOS/协议字段、源/目的端口等,可以进行适当的数据包合并 。 TSO (TCP Segmentation Offload) 和 GSO (Generic Segmentation Offload) 是用于发送数据包的技术。它们的作用是将大的数据包分割成更小的片段,以提高传输效率。TSO 主要用于 TCP,而 GSO 则适用于所有传输协议 。 总结起来,LRO 和 GRO 是用于接收数据包的技术,通过合并数据包减少处理的开销。TSOGSO 是用于发送数据包的技术,通过分割大的数据包提高传输效率。这些技术都在 Linux 内核的网络协议栈发挥着重要的作用,提高了网络性能和吞吐量 。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux环境网络分段卸载技术 GSO/TSO/UFO/LRO/GRO](https://blog.csdn.net/Rong_Toa/article/details/108748689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值