关注华体会智能掌握最新行业动态与资讯
当前位置:首页 >  新闻中心 >  公司新闻

华体会,怎样通过DPDK GRO和GSO来提高网络的应用性能?

发布日期:2023-10-21

今朝,有年夜量的收集利用在处置数据包的时辰只需要处置数据包头,而不会操作数据负载部门,例如防火墙、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。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

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

为了帮忙基在DPDK的利用法式(如Open vSwitch)削减包头处置开消,DPDK别离在17.08和17.11撑持了GRO和GSO。如图2所示, GRO和GSO是DPDK中的两个用户库,利用法式间接挪用它们进行包归并和分片。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

图2. DPDK GRO和DPDK GSO

1、GRO库和GSO库布局

图3描画了GRO库和GSO库的布局。按照数据包类型,GRO库界说了分歧的GRO类型。每种GRO类型担任归并一品种型的数据包,如TCP/IPv4 GRO处置TCP/IPv4数据包。一样的,GSO库也界说了分歧的GSO类型。GRO库和GSO库别离按照MBUF的pa�����APPcket_type域和ol_flags域将输入的数据包交给对应的GRO和GSO类型处置。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

图3. GRO库和GSO库的框架

2、若何利用GRO库和GSO库?

利用GRO和GSO库十分简单。如图4所示,只需要挪用一个函数即可以对包进行归并和分片。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

图4. 代码示例

为了撑持分歧的用户场景,GRO库供给了两组API:轻量模式API和分量模式API,如图5所示。轻量模式API利用在需要快速归并少许数据包的场景,而分量模式API则用在需要细粒度地节制合包并需要归并年夜量数据包的场景。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

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

3、DPDK GRO的合包算法

算法挑战

●在高速的收集情况下,高开消的合包算法极可能会致使网卡丢包。

●包乱序(“Packet Reordering”)增添了合包难度。例如Linux GRO没法归并乱序的数据包。

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

足够轻量以顺应高速的收集情况

可以或许归并乱序包

基在Key的合包算法

为处理上述两点挑战,DPDK GRO采取基在Key的合包算法,其流程如图6所示。对新到的数据包,起首依照流(“flow”)对其进行分类,再在其地点的流中寻觅相邻的数据包(“neighbor”)进行归并。若没法找到婚配的流,就插入一条新流并将数据包存储到新流中。若没法找到邻人,则将数据包存储到对应的流中。

基在Key的合包算法有两个特点。起首,经由过程流分类来加快数据包的归并是十分轻量的一种做法;其次,保留没法归并的数据包(如乱序包)使得以后对其进行归并成为可能,故减轻了包乱序对合包带来的影响。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

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

4、DPDK GSO的分片策略

分片流程

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

怎样通过DPDK GRO和GSO来提高网络的应用性能?

图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仅需拷贝长度较短的包头,而不需要拷贝较长的数据负载部门。

怎样通过DPDK GRO和GSO来提高网络的应用性能?

图8. Two-part MBUF的布局

GRO库和GSO库的状况

今朝,GRO库还处在一个早期阶段,仅对利用最普遍的TCP/IPv4数据包供给了合包撑持。GSO库则撑持更丰硕的包类型,包罗TCP/IPv4、VxLAN和GRE。

Copyright © 2019 华体会智能技术股份有限公司.粤ICP备16017609号

粤公网安备44030402003674号

友情链接: 友情链接 | 网站地图

微信关注 微信关注
微博
0755-83218588
TOP