TSO、UFO、GSO、LRO、GRO和RSS介绍(ethtool命令)

本文介绍了网络接口的Offload特性,包括TSO、GSO、LRO、GRO和RSS等,解释了它们如何提高网络收发性能,并提供了查看和配置这些特性的命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.chinaunix.net/uid-20639775-id-3529535.html

ethtool -k < 网络接口>,ethtool –show-offload < 网络接口>,或者可以看到很多网络接口的offload特性,例如:

$ sudo ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

这些offload特性都是为了提升网络收/发性能。TSO、UFO和GSO是对应网络发送,在接收方向上对应的是LRO、GRO。

TSO

TSO(TCP Segmentation Offload),是一种利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,有时也被叫做 LSO (Large segment offload) ,TSO是针对TCP的,UFO是针对UDP的。如果硬件支持 TSO功能,同时也需要硬件支持的TCP校验计算和分散/聚集 (Scatter Gather) 功能。

GSO

GSO(Generic Segmentation Offload),它比TSO更通用,基本思想就是尽可能的推迟数据分片直至发送到网卡驱动之前,此时会检查网卡是否支持分片功能(如TSO、UFO),如果支持直接发送到网卡,如果不支持就进行分片后再发往网卡。这样大数据包只需走一次协议栈,而不是被分割成几个数据包分别走,这就提高了效率。

LRO

LRO(Large Receive Offload),通过将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理 开销,提高系统接收TCP数据包的能力。

GRO

GRO(Generic Receive Offload),基本思想跟LRO类似,克服了LRO的一些缺点,更通用。后续的驱动都使用GRO的接口,而不是LRO。

RSS

RSS(Receive Side Scaling),是一项网卡的新特性,俗称多队列。具备多个RSS队列的网卡,可以将不同的网络流分成不同的队列,再分别将这些队列分配到多个CPU核心上进行处理,从而将负荷分散,充分利用多核处理器的能力。

可以使用如下命令来关闭对应的参数:

/usr/sbin/ethtool -K eth1 gro off
/usr/sbin/ethtool -K eth1 lro off
/usr/sbin/ethtool -K eth1 tso off
root@baicore-2:/tmp# ethtool -k eno2 Features for eno2: rx-checksumming: on tx-checksumming: on tx-checksum-ipv4: off [fixed] tx-checksum-ip-generic: on tx-checksum-ipv6: off [fixed] tx-checksum-fcoe-crc: on [fixed] tx-checksum-sctp: on scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed] tcp-segmentation-offload: off tx-tcp-segmentation: off tx-tcp-ecn-segmentation: off [fixed] tx-tcp-mangleid-segmentation: off tx-tcp6-segmentation: off generic-segmentation-offload: off generic-receive-offload: off large-receive-offload: off rx-vlan-offload: on tx-vlan-offload: on ntuple-filters: off receive-hashing: on highdma: on [fixed] rx-vlan-filter: on vlan-challenged: off [fixed] tx-lockless: off [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: on [fixed] tx-gre-segmentation: on tx-gre-csum-segmentation: on tx-ipxip4-segmentation: on tx-ipxip6-segmentation: on tx-udp_tnl-segmentation: on tx-udp_tnl-csum-segmentation: on tx-gso-partial: on tx-tunnel-remcsum-segmentation: off [fixed] tx-sctp-segmentation: off [fixed] tx-esp-segmentation: on tx-udp-segmentation: on tx-gso-list: off [fixed] fcoe-mtu: off [fixed] tx-nocache-copy: off loopback: off [fixed] rx-fcs: off [fixed] rx-all: off tx-vlan-stag-hw-insert: off [fixed] rx-vlan-stag-hw-parse: off [fixed] rx-vlan-stag-filter: off [fixed] l2-fwd-offload: off hw-tc-offload: off esp-hw-offload: on esp-tx-csum-hw-offload: on rx-udp_tunnel-port-offload: off [fixed] tls-hw-tx-offload: off [fixed] tls-hw-rx-offload: off [fixed] rx-gro-hw: off [fixed] tls-hw-record: off [fixed] rx-gro-list: off macsec-hw-offload: off [fixed] rx-udp-gro-forwarding: off hsr-tag-ins-offload: off [fixed] hsr-tag-rm-offload: off [fixed] hsr-fwd-offload: off [fixed] hsr-dup-offload: off [fixed] root@baicore-2:/tmp# 这里边哪个参数会导致网卡将TCP分片报文重组?请详细说明
03-15
<think>好的,用户想了解哪些网卡参数可能导致TCP分片报文重组,特别是关于ethtool中的TCP Segmentation Offload(TSO)参数的详解。我需要结合提供的引用资料来回答这个问题。 首先,根据引用[3],在不支持TSO的网卡上,TCP层会根据MSS(最大报文段大小)来确保数据不需要分片。MSS由MTU决定,并且在建立连接时协商。如果网卡支持TSO,那么TCP层可以发送更大的数据段,由网卡硬件分片,这样减少CPU负担。如果TSO关闭,TCP层需要自己处理分片,可能导致更多的分片,进而需要重组。 引用[1]提到开启GSO(Generic Segmentation Offload),这可能TSO协同工作。GSO在IP层处理分片,而TSO在TCP层。如果GSO开启,可能推迟分片到更底层,影响重组的方式。 引用[2]讨论了GRO(Generic Receive Offload)在接收端的处理,负责将多个分片合并成大包。但用户的问题是关于发送端的分片参数,所以可能需要关注TSOGSO以及相关的参数。 所以,关键参数包括tso(tx-tcp-segmentation)、gso(generic-segmentation-offload)以及相关的txrx offload设置。如果TSO开启,网卡处理分片;关闭则由TCP层处理,可能导致更多分片需要重组。此外,GSO的状态也会影响分片处理的层次,进而影响重组逻辑。 需要详细解释这些参数的作用,以及它们如何影响TCP分片重组过程。同时,要指出哪些参数设置可能导致分片报文的重组需求增加,比如关闭TSO可能导致TCP层生成更多分片,而接收端可能需要重组这些分片。不过重组通常在接收端由GRO处理,但发送端的分片策略会影响重组的情况。 最后,用户可能需要了解如何通过ethtool查看调整这些参数,以及这些调整对网络性能的影响,比如减少CPU使用率或潜在的分片问题。</think>### 网卡参数与TCP分片报文重组 TCP分片报文重组通常与网卡的**分片卸载功能(Offload)**密切相关,以下是关键参数的详解及其影响: --- #### 1. **TCP Segmentation Offload (TSO)** - **作用**:允许网卡将**大块TCP数据**在硬件层自动分割为符合MTU/MSS限制的TCP分片,减轻CPU负担[^3]。 - **参数查看**:`ethtool -k <网卡名> | grep tcp-segmentation-offload` - **影响**: - **TSO开启**(`tx-tcp-segmentation: on`):TCP层发送的数据包长度可超过MSS,由网卡负责分片。此时,IP层接收端可能看到多个分片报文,但**重组由接收端的GRO(Generic Receive Offload)处理**[^2]。 - **TSO关闭**:TCP层需自行控制数据长度,确保不超过MSS,可能生成更多小包,但**分片概率降低**(因TCP层主动避让MTU限制)。 --- #### 2. **Generic Segmentation Offload (GSO)** - **作用**:在协议栈的更高层(如IP层或TCP层)延迟分片操作,提升吞吐量[^1]。 - **参数查看**:`ethtool -k <网卡名> | grep generic-segmentation-offload` - **影响**: - **GSO开启**:分片操作可能推迟到网卡驱动或硬件层,减少协议栈处理开销。若网卡不支持TSOGSO开启,分片由软件在底层完成。 - **GSO关闭**:所有分片必须由协议栈处理,可能增加CPU负载,但分片行为更可控。 --- #### 3. **Large Receive Offload (LRO)/Generic Receive Offload (GRO)** - **作用**(接收端相关):将多个TCP分片在网卡或协议栈层合并为完整数据包[^2]。 - **参数查看**:`ethtool -k <网卡名> | grep -E "large-receive-offload|generic-receive-offload"` - **影响**: - **GRO开启**:接收端自动重组分片,降低协议栈处理压力。若发送端TSO/GSO开启,GRO可能频繁触发重组逻辑。 - **GRO关闭**:所有分片由内核协议栈重组,增加CPU负载。 --- ### 导致TCP分片重组的核心参数 1. **TSO关闭**:TCP层主动分片,可能生成更多小包,接收端需重组(依赖GRO)。 2. **GSO关闭**:分片操作由协议栈处理,分片行为更早发生,重组依赖接收端能力。 3. **GRO关闭**:接收端无法自动合并分片,强制协议栈逐片处理,增加重组开销。 --- #### 配置建议 - **高吞吐场景**:开启TSO/GSO/GRO以降低CPU负载。 - **调试分片问题**:临时关闭TSO/GSO,观察分片行为是否与预期一致: ```bash ethtool -K <网卡名> tso off gso off ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值