精华内容
下载资源
问答
  • 网卡TSO

    2021-02-26 19:08:06
    网卡TSO功能 当一个系统需要通过网络发送一大段数据时,计算机需要将这段数据拆分为多个长度较短的数据,以便这些数据能够通过网络中所有的网络设备,这个过程被称作分段。 而当网卡支持TSO时,TCP层会逐渐增大mss...

    网卡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、GSO功能。 sudo ethtool –K p1p1 tso off sudo ethtool –K p1p1 gso off iperf服务器端使用10G网卡,执行 iperf -s -p 12003 -i1 客户端多次执行如下命令,但每次启动的进程数会变化:

    操作系统采用Ubuntu 14.04,CPU有4物理核8逻辑核。10G网卡为Intel X520。

    关掉主机网卡的TSO、GSO功能。

    sudo ethtool –K p1p1 tso off
    sudo ethtool –K p1p1 gso off

    iperf服务器端使用10G网卡,执行

    iperf -s -p 12003 -i1

    客户端多次执行如下命令,但每次启动的进程数会变化:

    iperf -c 192.168.9.4 -p 12003 -i1 -t 15 -P 1

    注意到本次开启了1个进程,服务器端显示结果如下:


    CPU由于负载接近100%,仅能达到2.87G带宽。

    客户端开启2个进程,

    iperf -c 192.168.9.4 -p 12003 -i1 -t 15 -P 2
    服务器端显示结果如下:

    如此类推,当客户端开启5个进程时,可以达到最高总带宽。

    iperf -c 192.168.9.4 -p 12003 -i1 -t 15 -P 5

    服务器端显示结果如下:



    此后再增加进程数,总带宽逐渐减小,例如

    iperf -c 192.168.9.4 -p 12003 -i1 -t 15 –P 8

    关于多进程带宽反而小幅下降,这是一个有意思的现象。可以想到一些理由:竞争带宽导致的链路拥塞、TCP拥塞算法退避,进程上下文切换的开销等。

    展开全文
  • 关于网卡特性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与mtu

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

    2020-03-16 17:17:22
     TSO (TCP Segmentation Offload) 是一种利用网卡分割大数据包,减小 CPU 负荷的一种技术,也被叫做 LSO (Large segment offload),如果数据包的类型只能是 TCP,则被称之为 TSO,如果硬件支持 TSO 功能的话,也...
  • TCP Segmentation Offload(TSO)

    千次阅读 2019-06-11 13:14:13
    功能需要网卡提供支持。TSO 是使得网络协议栈能够将大块 buffer 推送至网卡,然后网卡执行分片工作,这样减轻了CPU的负荷,其本质实际是延缓分片。这种技术在Linux中被叫做GSO(Generic Segmentat...
  • 4.2 TCP Segmentation Offload(TSO)

    千次阅读 2015-03-23 20:53:41
    功能需要网卡提供支持。TSO 是使得网络协议栈能够将大块 buffer 推送至网卡,然后网卡执行分片工作,这样减轻了CPU的负荷,其本质实际是延缓分片。这种技术在Linux中被叫做GSO(Generic Segmentat
  • 目录 概念介绍 ... TSO 是(TCP segmentation offload)的缩写,主要把TCP分段这个offload到网卡(支持TSO)上做,减少CPU的负担,以达到提高TCP网络传输性能的目的。 GSO是() LRO/GRO ...
  • 网卡多队列技术与RSS功能介绍 ETHTOOL设置网卡接收哈希(RSS) TSO、UFO、GSO、LRO、GRO和RSS介绍(ethtool命令) Linux 内核协议栈的 TSO、GSO linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和...
  • 协议栈对GSO和TSO,UFO的支持

    千次阅读 2010-07-21 20:03:00
    TSO效率的节省源于对大包只走一次协议栈,而不是多次. 尽可能晚的推迟分段(segmentation), 最理想的是在网卡驱动里分段,在网卡驱动里把大包(super-packet)拆开,组成SG list,或在一块预先分配好的...
  • 网卡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 TCP Segmentation Offload的缩写,只针对TCP包发送,超过 MTU 大小的报文不需要在协议栈分段,直接offload到网卡,由网卡硬件实现分段,降低 CPU 负载。 GSO Generic Segment Offload的缩写,它是 TSO 的软件...
  • LAN offload 功能

    2019-10-11 14:10:05
    offload功能简单来说就是减轻CPU对网络数据包的校验,拆分,打包等操作。将工作交给网卡做。从而减轻CPU的load。 目前最主要就是3中offload 1.GSO:Generic-segment-offload 2.GRO:Generic-Receiver-Offload 3....
  • 1. 准备知识 1.1 Iperf命令 假设iperf服务端为主机tian04,使用TCP协议,那么在控制台执行以下两个命令开启...注意,与1G的实验环境使用的命令不同,当关闭网卡TSO、GSO时,R320服务器无法使用一个进程达到满带宽
  • 网络性能优化(NAPI)

    2013-08-19 19:01:40
     TSO (TCP Segmentation Offload) 是一种利用网卡分割大数据包,减小 CPU 负荷的一种技术,也被叫做 LSO (Large segment offload) ,如果数据包的类型只能是 TCP,则被称之为 TSO,如果硬件支持 TSO 功能的话,也...
  • tcp,ip的基础知识

    2019-12-25 16:30:46
    TSO,GSO,LRO,GRO,RSS的概念:TSO(TCPSegmentation Offload),网卡对tcp数据包分片,减轻cpu负荷的一种技术,也需要硬件支持TCP的校验计算的分散,聚集等功能。GSO(GenericSegmentation Offload):尽可能的...
  • 网络几个工具

    2015-04-06 20:52:49
    关闭多队列 rmmod ixgbe modprobe ixgbe MQ=1,0(表示第一个网口开着,第二个网口关着) ...ethtool -K eth3 tso off (网卡拆包) ethtool -K eth3 gro off (内核拆包) ethtool -K eth3 sg off ethtool

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

网卡tso功能