[转帖]TSO? LRO? 这是什么东西?和我有关系么?

tso,lro,什么,东西,关系 · 浏览次数 : 0

小编点评

TSO和LRO是用于提升互联网数据传输效率的技术。 **TSO(TCP Segmentation Offload):** * 将数据分割成一个个小数据包发送出去。 * 网卡根据数据包的大小进行分割,并合并成一个数据包后发送出去。 * 降低了CPU处理的数据量,提高了传输效率。 **LRO(Large Receive Offload):** * 接收多个数据包并合并成一个数据包发送出去。 * 网卡根据数据包的大小进行合并,提高了传输效率。 * 降低了CPU处理的数据量,提高了传输效率。 TSO和LRO都是为了提升互联网数据传输效率而开发的,但启用这两个特性会带来网络性能的下降。

正文

https://zhuanlan.zhihu.com/p/87093404

 

TSO和LRO,对于熟悉网络的人来说,也是非常陌生,很难碰到。不过一旦你碰到和它相关的问题之后,那么你将会印象深刻,从此记住它们!

什么是TSO,LRO?

TSO的缩写是TCP Segmentation Offload,直译为:TCP分段卸载。查询了一下,好像还没有什么正式的中文翻译。

经过岁月的洗礼,TCP/IP基本上把其他传输协议都干掉了。我们都知道TCP/IP成为互联网数据的事实传输标准。TCP/IP传输的一个重要特点就是数据分段传输。我们电脑上不管多大的文件,使用TCP传输时,都会分成一个个小小的数据段进行传输。

如上图左边所示,应用层的数据经过传输层之后,就分成一个个小小的数据片段,然后层层加数据头,到达网卡硬件,再发送出去。如上图右边所示,对方网卡收到之后,也是同样,层层去头,最后合并以后还原成为发送时的数据。

那么由谁来负责将数据分割成一个个数据包呢?操作系统来干。早期是由CPU来做这个事情。千兆网络的传输,一秒125MByte,假设分成1500字节一个包,那么要分成833333份。

但是对于万兆网络来说,数据传输量变成千兆的10倍,但是TCP/IP包的大小还是1500,所以包的数量变成千兆网络的10倍,CPU处理起来比以前费力多了(CPU的主频并没有变成以前的10倍)。

那么最好的办法就是将数据分段这个事情下放(offload)到网卡去做。这就是TSO技术的源来。现在的网卡,大都支持TSO这个特性,数据直接扔给驱动,网卡自己会自动切割分包。

同样,LRO(Large Receive Offload)也是做同样的事情,网卡收到多个包之后,合并成一个大数据包再发给应用层。


TSO和LRO大大解放了CPU的工作量,看起来很美好。但是对于网关来说,启用这个功能会带来致命的问题:网络传输变慢,传输时延增加。

TSO和LRO为何会拖慢网络性能?

首先我们要知道,网关,简单的说,就是一个数据交换中心,它的职责很简单,将到达的数据包转发给下一个目的网关,或者主机。如果是家庭网关,还会包含NAT功能,对数据包的源地址或者目的地址进行转换。它不会去,也不应该修改数据包的内容。

但是从上面的描述中,TSO和LRO都会修改数据包的内容。TSO将一个大数据包切分成小段,发送出去。LRO将数据蓄积起来再传输。

要知道网关一般会有两个或者多个网络界面,以太网的话,网络界面的MTU都应该是1500,假如网卡接受数据时通过LRO将几个1500的数据片段合并,由于它是网关,并不需要处理数据,接下来它要将数据发出,发出时还是要分成1500的片段,否则大数据包直接发出去将会被丢弃。所以LRO和TSO在网关上来说,相当于一直做无用功:接受数据时进行LRO,发送出去时进行TSO......

除了无用功之外,TSO和LRO还会带来网络延时。因为LRO时,需要等待N个包才能合并。而不是一个包过来就可以马上转发出去。


说了这么多,网关或者虚拟主机一定要关闭TSO和LRO这两个特性。

对于FreeBSD来说,关闭这两个功能很简单。

我们先看一下当前网卡已经启用的特性。我的机器是i350芯片,驱动是igb。

$ ifconfig igb0
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=e507bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
	ether f4:ce:46:a9:00:fc
	inet 192.168.11.240 netmask 0xffffff00 broadcast 192.168.11.255 
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

可以看到options里面有TSO4 TSO6 LRO这些字样。(TSO4指IPV4的TSO, TSO6指IPV6的TSO)

那么怎么关闭这两个特性?执行下面的命令就行。

root@vmhost240:~ # ifconfig igb0 -tso -lro
root@vmhost240:~ # ifconfig igb0
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=e500bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
	ether f4:ce:46:a9:00:fc
	inet 192.168.11.240 netmask 0xffffff00 broadcast 192.168.11.255 
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

再看一下,TSO4 TSO6 LRO已经不在options出现了,这些特性就没有启用。

同样,对于虚拟主机来说,由于有虚拟交换机的存在,和虚拟交换机相连的物理网卡也要关闭这两个特性,否则虚拟机对外的网络传输性能将会很差。

与[转帖]TSO? LRO? 这是什么东西?和我有关系么?相似的内容:

[转帖]TSO? LRO? 这是什么东西?和我有关系么?

https://zhuanlan.zhihu.com/p/87093404 TSO和LRO,对于熟悉网络的人来说,也是非常陌生,很难碰到。不过一旦你碰到和它相关的问题之后,那么你将会印象深刻,从此记住它们! 什么是TSO,LRO? TSO的缩写是TCP Segmentation Offload,直译

【转帖】SmartNIC — TSO、GSO、LRO、GRO 技术

目录 文章目录 目录TSO(TCP Segmentation Offload)GSO(Generic Segmentation Offload)LRO(Large Receive Offload)GRO (Generic Receive Offload) TSO(TCP Segmentation O

[转帖]ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍

ethtool -k < 网络接口>, ethtool --show-offload < 网络接口>, 或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0Offload parameters for eth0:rx-checksumming: ontx

[转帖]关于网卡特性TSO、UFO、GSO、LRO、GRO

2022-12-23 我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。 TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,也有人叫 LSO (Large segment offload) ,TSO是针对TCP的,UF

【转帖】关于网卡特性TSO、UFO、GSO、LRO、GRO

https://www.cnblogs.com/larrypeng/p/12496810.html 我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。 TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,也有人叫 LSO

【转帖】ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍

ethtool -k < 网络接口>, ethtool --show-offload < 网络接口>, 或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0Offload parameters for eth0:rx-checksumming: ontx

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww