极速前进!DPDK GRO/GSO的转发性能提升实例

作者简介

王艺楠,软件测试工程师,主要从事DPDK虚拟化相关方向的测试工作。

通常,以太网的MTU是1500B,除去TCP/IP的协议首部,TCP的MSS(Max Segment Size)大小是1460B。一般情况下,协议栈会对超过1460B的TCP payload进行切片,保证生成的IP包不超过MTU的大小,但对于支持TSO的网卡,我们可以把最多64KB大小的TCP payload直接往下传给协议栈,此时IP层也不会进行segmentation,一直会传给网卡驱动,支持TSO的网卡会自己进行TCP切片,这样可以减少很多协议栈上的数据包处理数量。切片、checksum计算等原本靠CPU来做的工作都转移给了网卡,从而提高网络性能。相对应的,LRO(Large Receive Offload)是在接收方向上,通过将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理的开销。当然,如果都是小包,那么功能基本就作用不大了。

TCP Segmentation Offload (TSO),UDP Fragmentation Offload (UFO)和Large Receive Offload (LRO)技术基于网卡特性,可在网卡上进行包合并和拆分,减轻CPU负荷。其中,TSO是针对TCP的拆包,UFO是针对UDP的拆包,LRO是针对TCP的合包。然而,LRO、TSO和UFO只能处理TCP和UDP包,而且并非所有的网卡都支持这些特性。而软件包合并(Generic Receive Offload,GRO)和包拆分(Generic Segmentation Offload,GSO)在网卡不支持分片、重组offload能力(如TSO、UFO、LRO)的情况下,GSO推迟数据分片直至数据发送到网卡驱动之前进行分片后再发往网卡,GRO将大量的小报文合并为少量的大报文,再将合并后的大报文提交给OS协议栈处理。同时GSO、GRO不仅支持TCP和UDP包,还可支持vxlan和gre。

本文将介绍DPDK GRO和GSO的测试方法并与Kernel GSO/GRO等进行网络应用性能的对比。

测试环境信息:

640?wx_fmt=png

640?wx_fmt=png


▌DPDK GRO测试拓扑图

640?wx_fmt=png

以DPDK 18.05 为例,在IO转发TCP数据包的配置下,不同包合并方式的转发性能比较如下(以DPDK GRO为基准):

640?wx_fmt=png

640?wx_fmt=png

可以看到,DPDK GRO的吞吐量较KernelGRO和No GRO offload分别高出49%和63%。

DPDK GSO测试拓扑图

640?wx_fmt=png

以DPDK 18.05 为例,在IO转发TCP数据包的配置下,对比以下不同拆包方式的转发性能(以DPDK GSO为基准):

640?wx_fmt=png

640?wx_fmt=png

可以看到,TSO 硬件拆包具有最好的吞吐量,而软件拆包中DPDK GSO的吞吐量较Kernel GSO 和No GSO offload分别高出33%和55%。

640?wx_fmt=jpeg

 推荐阅读 

640?wx_fmt=jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值