精华内容
下载资源
问答
  • 网卡TSO
    2021-02-26 19:08:06

    网卡TSO功能

    当一个系统需要通过网络发送一大段数据时,计算机需要将这段数据拆分为多个长度较短的数据,以便这些数据能够通过网络中所有的网络设备,这个过程被称作分段

    而当网卡支持TSO时,TCP层会逐渐增大mss(总是整数倍数增加),当TCP层向下发送大块数据时,仅仅计算TCP头,网卡接到到了IP层传下的大数 据包后自己重新分成若干个IP数据包,添加IP头,复制TCP头并且重新计算校验和等相关数据。

    TCP 分段卸载将 TCP 的分片运算(如将要发送的 1M 字节的数据拆分为 MTU 大小的包)交给网卡处理,无需协议栈参与,从而降低 CPU 的计算量和中断频率。
    修改方式

    使用 ethtool 工具打开网卡和驱动对 TSO(TCP Segmentation Offload)的支持。如下命令中的参数“$eth”为待调整配置的网卡设备名称,如 eth0,eth1 等。

     ethtool -K $eth tso on
    

    说明:要使用 TSO 功能,物理网卡需同时支持 TCP 校验计算和分散-聚集 (Scatter Gather) 功能。

    查看网卡是否支持 TSO:

     ethtool -K $eth
    rx-checksumming: on
    tx-checksumming: on
    scatter-gather: on
    tcp-segmentation-offload: o
    
    更多相关内容
  • 网卡TSO卸载功能

    千次阅读 2019-01-17 18:21:13
    当前的大部分网卡都支持TCP Segmentation Offload功能,TCP的分片卸载到物理网卡由硬件完成。 TCP在发送数据包时(tcp_transmit_skb),设置gso_size的值作为分片的长度,其大小等于当前TCP连接的MSS值。 static ...

    当前的大部分网卡都支持TCP Segmentation Offload功能,TCP的分片卸载到物理网卡由硬件完成。

    TCP在发送数据包时(tcp_transmit_skb),设置gso_size的值作为分片的长度,其大小等于当前TCP连接的MSS值。

    static inline int tcp_skb_mss(const struct sk_buff *skb)
    {   
        return TCP_SKB_CB(skb)->tcp_gso_size;
    }
    
    static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, gfp_t gfp_mask)
    {
        /* OK, its time to fill skb_shinfo(skb)->gso_{segs|size} */
        skb_shinfo(skb)->gso_segs = tcp_skb_pcount(skb);
        skb_shinfo(skb)->gso_size = tcp_skb_mss(skb);
    }

    函数tcp_set_skb_tso_segs将当前的MSS值赋予tcp_gso_size,其在TCP发送路径中调用。

    static void tcp_set_skb_tso_segs(struct sk_buff *skb, unsigned int mss_now)
    {
        if (skb->len <= mss_now || skb->ip_summed == CHECKSUM_NONE) {
            tcp_skb_pcount_set(skb, 1);
            TCP_SKB_CB(skb)->tcp_gso_size = 0;
        } else {
            tcp_skb_pcount_set(skb, DIV_ROUND_UP(skb->len, mss_now));
            TCP_SKB_CB(skb)->tcp_gso_size = mss_now;
        }
    }

    另外,要使用TSO功能,物理网卡必须同时支持TCP的校验和卸载功能,否者,禁止网卡的TSO功能。

    static netdev_features_t netdev_fix_features(struct net_device *dev, netdev_features_t features)
    {
        if ((features & NETIF_F_TSO) && !(features & NETIF_F_HW_CSUM) && !(features & NETIF_F_IP_CSUM)) {
            netdev_dbg(dev, "Dropping TSO features since no CSUM feature.\n");
            features &= ~NETIF_F_TSO;
            features &= ~NETIF_F_TSO_ECN;
        }
    }

    软件计算部分数据的校验和(CHECKSUM_PARTIAL),比如IP伪头部,其它的TCP数据都交由网卡来处理,以下的TCPDUP抓包,可以看到由于不是完整的校验和,显示checksum不正确。

    在本机上使用TCPDUMP抓包,看到的报文长度超过网卡设备的MTU值,如下长度4336,而网卡设备仅有1500字节大小MTU,原因就在于TCP的分片是利用网卡的TSO功能进行的,而TCPDUMP抓到的是分片之前的数据包:

    Out e4:3a:6e:0a:51:31 ethertype IPv4 (0x0800), length 4352: (tos 0x0, ttl 64, id 12630, offset 0, flags [DF], proto TCP (6), length 4336)
        192.168.1.128.40074 > 192.168.10.128.40443: Flags [.], cksum 0x9e33 (incorrect -> 0x2c8a), seq 869:5153, ack 1009, win 242, options [nop,nop,TS val 382868 ecr 188877580], length 4284

    使用如下命令ethtool -k,可查看网卡ens38的TSO功能是否使能:

    $ ethtool -k ens38
    Features for ens38:
    
    tx-checksumming: on
            tx-checksum-ipv4: off [fixed]
            tx-checksum-ip-generic: on
            tx-checksum-ipv6: off [fixed]
            tx-checksum-fcoe-crc: off [fixed]
            tx-checksum-sctp: off [fixed]
    tcp-segmentation-offload: on
            tx-tcp-segmentation: on
            tx-tcp-ecn-segmentation: off [fixed]
            tx-tcp-mangleid-segmentation: off
            tx-tcp6-segmentation: off [fixed]
    udp-fragmentation-offload: off [fixed]
    
    $ ethtool -K ens38 tso off    
    $ 

    如上命令,使用ethtool工具关闭网络设备ens38的TSO功能之后,再次TCPDUMP抓包,这次显示的报文长度都是小于1500的数据包了。

     

    内核版本 Linux-4.15

     

    展开全文
  • 关于网卡特性TSO、UFO、GSO、LRO、GRO

    万次阅读 2018-04-06 22:55:34
    我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片...如果硬件支持 TSO功能,同时也需要硬件支持的TCP校验计算和分散/聚集 (Scatter Gather)...

    我们来看下关于网卡特性的解释,不过记住GSO和GRO两个特性就好。

    TSO(TCP Segmentation Offload),是利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,也有人叫 LSO (Large segment offload) ,TSO是针对TCP的,UFO是针对UDP的。如果硬件支持 TSO功能,同时也需要硬件支持的TCP校验计算和分散/聚集 (Scatter Gather) 功能。如果网卡支持TSO/GSO,可以把最多64K大小的TCP payload直接往下传给协议栈,此时IP层也不会进行segmentation,网卡会生成TCP/IP包头和帧头,这样可以offload很多协议栈上的内存操作,节省CPU资源,当然如果都是小包,那么功能基本就没啥用了。

    GSO(Generic Segmentation Offload),GSO是TSO的增强 ,GSO不只针对TCP,对任意协议。比TSO更通用,推迟数据分片直至发送到网卡驱动之前,此时会检查网卡是否支持分片功能(如TSO、UFO),如果支持直接发送到网卡,如果不支持就进行分片后再发往网卡。

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

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

                在系统中可以通过ethtool命令来进行查看,如下:

    ethtool -k eth0

    generic-segmentation-offload: on

    generic-receive-offload: on

    TSO、UFO、GSO是对应网络发送, LRO、GRO是在接收方向上。

         我们只需要记住GSO/GRO两个关键字就好了,因为GSO是TSO/UFO的升级,GRO是LRO的升级。

    展开全文
  • 所谓的TSO就是TCP Segment Offload,TSO的原理说起来也不算太难,就是利用网卡实现TCP分段,从而达到缩短CPU周期的目的。本文就来介绍一下Linux系统TSO的实现原理。TSO的原理几乎每个人都知道,事实上它是怎么实现的...

    所谓的TSO就是TCP Segment Offload,TSO的原理说起来也不算太难,就是利用网卡实现TCP分段,从而达到缩短CPU周期的目的。本文就来介绍一下Linux系统TSO的实现原理。

    TSO的原理几乎每个人都知道,事实上它是怎么实现的这个问题也不难,难的是细节。在做完了正事之后,我想把这个原理展现出来,当然可能和实际的实现有超级大的出入,不管怎样,它是一个原理框图,仔细观察,应该也能自己实现一个比我这个更好的TSO了。

    这个设计是一个数字逻辑,时序电路的范畴,而这个领域十分地高大上,并不是普通的软件程序员能hold住的,像我这样的半瓶子也一样。所以我依然是按照老样子,试图直接给出一个结果,而不是要求听书的人事先做一些准备,往往在人们做这些准备工作的时候,就已经厌倦放弃了。

    基础知识不难,就是一些门电路,与门,非门,比较器,译码器,触发器之类的,这些东西随便找一本计算机组成原理,都很齐全。关键是怎么组合它们,这是另一个领域的编程。此时,我想起了15年前我的高中物理老湿刘丹青在讲电路的时候说过的一句话:让电流流一下。这句话在科班人看来完全不符合电路设计的基本原则,他们可能更倾向于首先建模,然后分析,然后使用描述语言VHDL写出代码,最后再给出电路,我觉得这适合于设计本身,但是不适合于对一个门外汉讲述其精彩。对于一个门外汉来讲,他唯一所知道的就是,让电流流一下,然后冲过这个门,冲过那个管,好了,高电平变成低平了。。。

    展开全文
  • 1.3.1 TSO/GSO

    2021-05-19 06:32:00
    1.3.1 TSO/GSOTSO是通过网络设备进行TCP段的分割,从而来提高网络性能的一种技术。较大的数据包(超过标准1518B的帧)可以使用该技术,使操作系统减少必须处理的数据数量以提高性能。通常,当请求大量数据时,TCP发送...
  • 以太网卡TSO技术

    2016-08-17 22:43:00
    一、简介 TSO(TCP Segment Offload)技术是一种利用网卡的少量处理能力,降低CPU发送数据包负载的技术,需要网卡硬件及驱动的支持。 二、原理 在不支持TSO网卡上,TCP层向IP层发送数据会考虑mss,使得TCP向下发送...
  • 网卡TSO、UFO、GSO、LRO、GRO和RSS介绍

    千次阅读 2017-09-17 11:43:55
    TSO、UFO、GSO、LRO、GRO和RSS介绍 ethtool -k ,ethtool --show-offload ,或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0 Offload parameters for eth0: rx-checksumming: on tx-...
  • tso与mtu

    2020-07-30 18:59:02
    后来发现这跟网卡tso功能有关,tso(TCP Segment Offload)是一种利用网卡替代cpu对大数据包进行tcp分片,降低cpu负载的技术。因为开启了网卡tso功能,tcpdump又是在内核协议栈层面抓包,内核协议栈是不会tcp分...
  • 网卡offload功能介绍

    万次阅读 2021-06-08 20:33:09
    offload 是将本来该操作系统进行的一些数据包处理(如TCP分段、IP分片、重组...1)TSO(TCP-Segmentation-Offload):将TCP分段工作交由网卡驱动执行,该特性需要网卡硬件支持。使能TSO后,操作系统可以将一个不超过...
  • Linux TSO流程分析

    千次阅读 2020-06-20 12:27:48
    网卡具有TSO能力时,上层协议栈可以直接下发一个超过MTU数据包,而把数据包拆分的动作交给硬件去做,节省cpu资源。除了TSO,内核还有一个GSO,GSO不区分协议类型,GSO默认是开启的,GSO是在软件上实现的一种延迟...
  • TSO、UFO、GSO、LRO、GRO和RSS介绍(ethtool命令) 1. ethtool工具命令介绍 # ethtool -h RTL Ethtool(2.6.36): Usage: ethtool DEVNAME Display standard information about device ethtool -s|--change DEVNAME ...
  • 关掉主机网卡TSO、GSO功能。 sudo ethtool –K p1p1 tso off sudo ethtool –K p1p1 gso off iperf服务器端使用10G网卡,执行 iperf -s -p 12003 -i1 客户端多次执行如下命令,但每次启动的进程数会变化:
  • 作者:张华 发表于:2016-04-05版权声明...网卡能做的事(TCP/UDP组包校验和分段,IP添加包头校验与分片)尽量往网卡做,网卡不能做的也尽量迟后分片(发送)或提前合并片(接收)来减少在网络栈中传输和处理的包数目,
  • 什么是TSO(tidb配置tso

    千次阅读 2019-08-21 16:36:24
    使用 binlogctl 工具生成 Drainer 初次启动所需的 tso 信息,命令: $ cd /home/tidb/tidb-ansible $ resources/bin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd generate_meta INFO[0000] [pd] cr...
  • TSO相关的内容充斥着TCP的整个发送过程,弄明白其机制对理解TCP的发送过程至关重要,这篇笔记就来看看TSO相关内容。 1. 基本概念 我们知道,网络设备一次能够传输的最大数据量就是MTU,即IP传递给网络设备的每一个...
  • TSO、UFO、GSO、LRO、GRO和RSS介绍 ethtool -k ,ethtool --show-offload ,或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0 Offload parameters for eth0: rx-checksumming: on tx-...
  • 文章目录目录网络功能卸载TSO(TCP Segmentation Offload)GSO(Generic Segmentation Offload)LRO(Large Receive Offload)GRO (Generic Receive Offload) 网络功能卸载 为适应高速网络,现代网卡中普遍卸载了...
  • 网络协议栈TSO/UFO/GSO/LRO/GRO/RSS特性

    千次阅读 2019-06-19 19:41:06
    网卡多队列技术与RSS功能介绍 ETHTOOL设置网卡接收哈希(RSS) TSO、UFO、GSO、LRO、GRO和RSS介绍(ethtool命令) Linux 内核协议栈的 TSO、GSO linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和...
  • TCP数据发送之TSO/GSO

    千次阅读 2019-02-26 00:07:25
    TSO相关的内容充斥着TCP的整个发送过程,弄明白其机制对理解TCP的发送过程至关重要,这篇笔记就来看看TSO相关内容。 1. 基本概念 我们知道,网络设备一次能够传输的最大数据量是MTU,即IP传递给网络设备的每一个...
  • 网卡LRO测试

    2019-11-27 11:03:34
    TSO、UFO、GSO、LRO、GRO和RSS介绍 ...1、关闭本端网卡的gro功能,开启lro功能; ethtool -K ethx lro on ethtool -K eth1 gro off 2、使用TCP从对端发送文件到测试端,文件大小要求大于MSS值(例如文件大小为...
  • TSO/GSO/LRO/GRO

    2020-03-16 17:17:22
     TSO (TCP Segmentation Offload) 是一种利用网卡分割大数据包,减小 CPU 负荷的一种技术,也被叫做 LSO (Large segment offload),如果数据包的类型只能是 TCP,则被称之为 TSO,如果硬件支持 TSO 功能的话,也...
  • ethtool 用于查看和修改网络设备(尤其是有线以太网设备)的驱动参数和硬件设置。...你可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。通过对以太网卡的配置,你...
  • MSS 是 TCP 数据段每次能够传输的最大数据分段的长度。为了达到最佳的传输效能,TCP 协议在建立连接的时候通常要协商双方的 MSS值,这个值 TCP 协议在实现的时候往往用 MTU 值代替( MSS = MTU - IP 数据包包头大小...
  • TCP Segmentation Offload(TSO)

    千次阅读 2019-06-11 13:14:13
    功能需要网卡提供支持。TSO 是使得网络协议栈能够将大块 buffer 推送至网卡,然后网卡执行分片工作,这样减轻了CPU的负荷,其本质实际是延缓分片。这种技术在Linux中被叫做GSO(Generic Segmentat...
  • ethtool 是一个 Linux 下的网络驱动程序的诊断和...Ethtool命令:用途显示或修改以太网卡的配置信息。语法ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethXethtool [-A] ethX [autoneg on|off] [rx on|off...
  • TSO、GSO介绍与实现

    千次阅读 2018-12-13 18:59:10
    转载自:http://www.bsdmap.com/2012/02/22/转tso、ufo、gso、lro、gro和rss介绍/ 转载自:http://blog.chinaunix.net/uid-28541347-id-5763844.html 通过ethtoo命令来查看和设置 ethtool -k &lt; 网络接口&...
  • 我们知道,网络设备一次能够传输的最大数据量就是MTU,即IP传递给网络设备的每一个数据包不能超过MTU个字节,IP层的分段和重组功能就是为了适配网络设备的MTU而存在的。从理论上来讲,TCP可以不关心MTU的限定,只...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,044
精华内容 417
关键字:

网卡tso功能