千家信息网

怎么用DPDK GRO和GSO来提高网络应用性能

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,怎么用DPDK GRO和GSO来提高网络应用性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。目前,有大量的网络应用在处理数据包的时候只
千家信息网最后更新 2026年11月02日怎么用DPDK GRO和GSO来提高网络应用性能

怎么用DPDK GRO和GSO来提高网络应用性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

  目前,有大量的网络应用在处理数据包的时候只需要处理数据包头,而不会操作数据负载部分,例如防火墙、TCP/IP协议栈和软件交换机。对这类网络应用而言, 包头处理产生的开销(称为"per-packet overhead")占了整体开销的大部分。因此,如何减少包头处理开销是优化这类应用性能的关键。

  减少包头处理开销最直接的方法:减少数据包数量

  如何减少包数量?

  ●增大Maximum Transmission Unit (MTU)。在数据量一定的情况下,使用大MTU的数据包可携带更多数据,从而减少了包的总量。但MTU值依赖于物理链路,我们无法保证数据包经过的所有链路均使用大MTU。

  ●利用网卡特性:Large Receive Offload (LRO),UDP Fragmentation Offload (UFO)和TCP Segmentation Offload (TSO)。如图1所示,LRO将从物理链路收到的TCP包(如1500B)合并为长度更长的TCP包(如64KB);UFO和TSO将上层应用发送的长数据负载的UDP和TCP包(如64KB)拆分成长度更短的数据包(如1500B),以满足物理链路的MTU限制。通过在网卡上进行包合并和拆分,在不需要任何CPU开销的情况下,上层应用就可以处理数量大大减少的大包。然而,LRO、TSO和UFO通常只能处理TCP和UDP包,而且并非所有的网卡都支持这些特性。

  ●软件包合并 (Generic Receive Offload,GRO)和包拆分 (Generic Segmentation Offload,GSO)。与前两种方法相比,GRO和GSO有两个优点:第一,不依赖于物理链路和网卡;第二,能够支持更多的协议类型,如VxLAN和GRE。

  图1. LRO、UFO和TSO工作原理

  为了帮助基于DPDK的应用程序(如Open vSwitch)减少包头处理开销,DPDK分别于17.08和17.11支持了GRO和GSO。如图2所示, GRO和GSO是DPDK中的两个用户库,应用程序直接调用它们进行包合并和分片。

  图2. DPDK GRO和DPDK GSO

  1、GRO库和GSO库结构

  图3描绘了GRO库和GSO库的结构。根据数据包类型,GRO库定义了不同的GRO类型。每一种GRO类型负责合并一种类型的数据包,如TCP/IPv4 GRO处理TCP/IPv4数据包。同样的,GSO库也定义了不同的GSO类型。GRO库和GSO库分别根据MBUF的packet_type域和ol_flags域将输入的数据包交给对应的GRO和GSO类型处理。

  图3. GRO库和GSO库的框架

  2、如何使用GRO库和GSO库?

  使用GRO和GSO库十分简单。如图4所示,只需要调用一个函数便可以对包进行合并和分片。

  图4. 代码示例

  为了支持不同的用户场景,GRO库提供了两组API:轻量模式API和重量模式API,如图5所示。轻量模式API应用于需要快速合并少量数据包的场景,而重量模式API则用于需要细粒度地控制合包并需要合并大量数据包的场景。

  图5. 轻量模式API和重量模式API

  3、DPDK GRO的合包算法

  算法挑战

  ●在高速的网络环境下,高开销的合包算法很可能会导致网卡丢包。

  ●包乱序("Packet Reordering")增加了合包难度。例如Linux GRO无法合并乱序的数据包。

  这就要求DPDK GRO的合包算法:

  足够轻量以适应高速的网络环境

  能够合并乱序包

  基于Key的合包算法

  为解决上述两点挑战,DPDK GRO采用基于Key的合包算法,其流程如图6所示。对新到的数据包,首先按照流("flow")对其进行分类,再在其所在的流中寻找相邻的数据包("neighbor")进行合并。若无法找到匹配的流,就插入一条新流并将数据包存储到新流中。若无法找到邻居,则将数据包存储到对应的流中。

  基于Key的合包算法有两个特点。首先,通过流分类来加速数据包的合并是十分轻量的一种做法;其次,保存无法合并的数据包(如乱序包)使得之后对其进行合并成为可能,故减轻了包乱序对合包带来的影响。

  图6. 基于Key的合包算法流程

  4、DPDK GSO的分片策略

  分片流程

  如图7所示,将一个数据包分片有3个步骤。首先,将包的数据负载分成许多长度更小的部分;其次,为每一个数据负载部分添加包头(新形成的数据包称为GSO Segment);最后,为每个GSO segment更新包头(如TCP Sequence Number)。

  图7. GSO分片流程

  GSO Segment的结构

  生成一个GSO Segment的最简单方法就是拷贝包头和数据负载部分。但频繁的数据拷贝会降低GSO性能,因此,DPDK GSO采用了一种基于零拷贝的数据结构--Two-part MBUF--来组织GSO Segment。如图8所示,一个Two-part MBUF由一个Direct MBUF和多个Indirect MBUF组成。Direct MBUF用来存储包头,Indirect MBUF则类似于指针,指向数据负载部分。利用Two-part MBUF,生成一个GSO Segment仅需拷贝长度较短的包头,而不需要拷贝较长的数据负载部分。

  图8. Two-part MBUF的结构

  GRO库和GSO库的状态

  目前,GRO库还处于一个初期阶段,仅对使用最广泛的TCP/IPv4数据包提供了合包支持。GSO库则支持更丰富的包类型,包括TCP/IPv4、VxLAN和GRE。

看完上述内容,你们掌握怎么用DPDK GRO和GSO来提高网络应用性能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 应用 包头 处理 算法 类型 开销 如图 网络 模式 部分 支持 拷贝 方法 结构 网卡 轻量 链路 性能 网络应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 上海睿民互联网科技有限公司 互联网科技网 互联网科技工作委员会毛军 鸠鸠互联网科技 互联网科技公司发展 为想互联网科技 宜安科技 互联网金融 海南购全球互联网科技 科技互联网的估值 福州新华互联网科技学校 知乎 字节跳动和互联网科技 湖南诚度互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 卓翼科技产业互联网合作 雨阳互联网卡科技有限公司 工业互联网科技创业 广州燕处互联网科技有限公司 福建互联网展示科技馆设计 现代互联网科技公司 广州万易互联网科技有限公司 善班互联网科技有限公司 上海致骋互联网科技 湖北码尼互联网科技有限公司电话 互联网媒体平台算高科技产业 哈尔滨屹滨互联网科技有限公司 小米互联网科技园入驻 江苏互联网智能科技产品出厂价 互联网高科技行业有哪些企业 福仕德教育科技互联网
0