基于DPDK的数据包处理方法及装置与流程

文档序号:22626703发布日期:2020-10-23 19:35阅读:230来源:国知局
基于DPDK的数据包处理方法及装置与流程

本发明涉及计算机技术领域,更具体地,涉及一种基于dpdk的数据包处理方法及装置。



背景技术:

通用x86服务器在处理高速率数据包转发业务时,面临着严重的转发瓶颈,想要达到海量数据快速高效的得到处理,对平台的系统配置有较高的要求。

随着技术的发展,硬件的处理性能越来越高,多核平台以及大容量内存等资源极大地提高到了海量数据处理的效率,但多核处理器性能受到限制,虽然通过硬件加速能在一定程度上提高多核处理器处理数据包的性能,但仍有待提高。



技术实现要素:

本发明实施例提供一种基于dpdk的数据包处理方法及装置,用以解决或者至少部分地解决现有技术存在的多核处理器进行数据包处理时性能有限的缺陷。

第一方面,本发明实施例提供一种基于dpdk的数据包处理方法,包括:

根据网卡队列均衡策略,确定接收队列,将所述接收队列与指定的cpu逻辑核进行绑定后,通过所述接收队列接收数据包;

对所述数据包进行处理,将中间值和提取数据保存于所述数据包的封装结构中的headroom空间中,直至处理完成。

优选地,所述根据网卡队列均衡策略,确定接收队列,并通过所述接收队列接收数据包之前,还包括:

响应于内存池创建指令,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环。

优选地,所述根据网卡队列均衡策略,确定接收队列,并通过所述接收队列接收数据包之前,还包括:

响应于接收队列设定指令,设定每个接收队列的中断号。

优选地,所述对所述数据包进行处理,将中间值和提取数据保存于所述数据包的封装结构中的headroom空间中,直至处理完成的具体步骤包括:

按照网络协议层的顺序对所述数据包进行剥离,直至应用层,将剥离的中间值和提取数据保存于所述数据包的封装结构中的headroom空间中。

优选地,所述将所述接收队列与指定的cpu逻辑核进行绑定的具体包括:

通过中断的均衡处理,将所述接收队列与指定的cpu逻辑核进行绑定。

优选地,所述将所述接收队列与指定的cpu逻辑核进行绑定的具体包括:

根据中断的亲和性,将所述接收队列与指定的cpu逻辑核进行绑定。

优选地,所述响应于内存池创建指令,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环的具体步骤包括:

根据所述内存池创建指令携带的内存环大小和突发模式大小,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环。

第二方面,本发明实施例提供一种基于dpdk的数据包处理装置,包括:

接收模块,用于根据网卡队列均衡策略,确定接收队列,将所述接收队列与指定的cpu逻辑核进行绑定后,通过所述接收队列接收数据包;

处理模块,用于对所述数据包进行处理,将中间值和提取数据保存于所述数据包的封装结构中的headroom空间中,直至处理完成。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式供的基于dpdk的数据包处理方法的步骤。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式供的基于dpdk的数据包处理方法的步骤。

本发明实施例提供的基于dpdk的数据包处理方法及装置,根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包,对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成,能显著提升多核处理器进行数据包处理时性能,能实现高性能数据包处理。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为根据本发明实施例提供的基于dpdk的数据包处理方法的流程示意图;

图2为根据本发明实施例提供的基于dpdk的数据包处理装置的结构示意图;

图3为根据本发明实施例提供的电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了克服现有技术的上述问题,本发明实施例提供一种基于dpdk的数据包处理方法及装置,其发明构思是,在用户态实现对数据包的处理,绕过linux内核,针对网卡的队列个数,进行数据分发,并实现整个处理流程中数据传输零拷贝,提升处理性能。

图1为根据本发明实施例提供的基于dpdk的数据包处理方法的流程示意图。如图1所示,该方法包括:步骤s101、根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包。

需要说明的是,本发明实施例提供的数据包处理方法,基于数据平面开发套件实现。

数据平面开发套件(dpdk,dataplanedevelopmentkit)主要基于linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

步骤s101之前,需要搭建dpdk编译运行环境。

搭建dpdk编译运行环境的过程包括:

在x86服务器平台,利用dpdk平台提供的编译工具setup.sh,获得开发编译环境,网卡驱动,绑定网卡驱动,设置大页面;

获取服务器系统信息,设置网卡参数,设置队列参数,设置burst参数,绑定逻辑核。

利用dpdk平台提供的编译工具setup.sh,编译开发套件,在环境抽象层(eal)的运行环境进行初始化,设置巨页hugepage内存,大幅减少tlbmiss的发生,提升页表查询速度。dpdk预处理分配的内存都是利用巨业技术,所有的内存都是从巨页中分配,实现对内存池(mempool)的管理,并预先分配好同样大小的mbuf,供每一个数据分组使用。

绑定网卡驱动,eal实现了对操作系统内核底层网卡i/o操作的屏蔽(i/o旁路了内核及其协议栈),为dpdk应用程序提供了一组调用接口,通过uio或vfio技术将pci设备地址映射到用户空间,方便了应用程序的调用,避免了网络协议栈和内核切换造成的处理时延。另外,核心部件还包括创建适合报文处理的内存池、缓冲区分片管理、内存复制、定时器、环型缓冲区管理等。

dpdk基于intelcpu和网卡系列,环境易部署,向下兼容性好,dpdk版本长期稳定支持,可行性高。

对于待接收的数据包,根据网卡队列均衡策略,对网卡多队列进行配置,设置多个接收队列,绑定不同的核心(即cpu逻辑核),实现网卡i/o性能最优化。

针对网卡的接收队列的个数,进行数据分发,每一个或者多个接收队列绑定在一个核心,多个核心共享的资源分配在同一个槽位上,避免了核心之间的资源竞争,也避免了不同槽位间数据互动的额外开销,因而可以利用通用处理器在一定程度上并行地处理网络负载,多核处理器性能有得到显著的提升,具有高效性。

根据网卡多个dma队列的分配机制,为每个应用确定一个接收队列,应用可以根据自身需求来对数据包进行控制。

根据分发策略(即网卡队列均衡策略),解析ip层获取源ip、目的ip、源端口、目的端口和协议类型,组建五元组,通过五元组信息将数据包分发到不同的接收队列。

应用增加时,可以将应用数据分发到不同的接收队列,减少性能压力,也可以根据应用级别为其队列设置更高的发送优先级,或者使用更高优先级的队列,从而适应更高的网络流量。通过上述分流处理,极大提升网卡的吞吐量,可扩展性好。

数据包将绕过linux内核转移到dpdk提供的平台中,通过接收队列在dpdk提供的平台中接收数据包,并在dpdk提供的平台中进行后续的数据包处理。

步骤s102、对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成。

具体地,接收到网卡数据后,对mbuf数据空间参数结构化,根据网络协议,对数据包层层剥离,将获取的中间值保存在headroom空间。整个传输过程中,mbuf值为传输参数,携带headroom空间,即保留了原始数据和分析结果,整个处理流程实现了内存零拷贝,极大的提升了运行性能。

本发明实施例根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包,对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成,能显著提升多核处理器进行数据包处理时性能,能实现高性能数据包处理。

基于上述各实施例的内容,根据网卡队列均衡策略,确定接收队列,并通过接收队列接收数据包之前,还包括:响应于内存池创建指令,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环。

具体地,接收数据包之前,先创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环。

rx内存环和tx内存环,保存有地址索引,便于进行网络数据包的收发。

可以通过接收输入的内存池创建指令,创建内存池。内存池包括rx内存环和tx内存环。

内存池创建指令,用于指示创建rx内存环和tx内存环。

本发明实施例通过创建更适合报文处理的用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环,能进一步提高多核处理器进行数据包处理时性能,能实现高性能数据包处理。

基于上述各实施例的内容,响应于内存池创建指令,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环的具体步骤包括:根据内存池创建指令携带的内存环大小和突发模式大小,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环。

具体地,内存池创建指令可以携带有内存环大小和突发模式大小。

根据内存环大小,对rx内存环和tx内存环的大小进行设置,可以增加网卡处理能力,增加极限缓冲区。

根据突发模式大小,设置rx内存环和tx内存环的突发模式。burst收发包就是dpdk的优化模式,一次完成多个数据包的收发。

本发明实施例根据内存池创建指令携带的内存环大小和突发模式大小,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环,能提高多核处理器进行数据包处理时性能,能实现高性能数据包处理。

基于上述各实施例的内容,根据网卡队列均衡策略,确定接收队列,并通过接收队列接收数据包之前,还包括:响应于接收队列设定指令,设定每个接收队列的中断号。

具体地,响应于内存池创建指令,创建用于接收网络数据包的rx内存环和用于发送网络数据包的tx内存环,与根据网卡队列均衡策略,确定接收队列,并通过接收队列接收数据包之间,可以通过网卡驱动程序为每个接收队列设定相应的中断号。

中断号,可以用于实现网卡队列均衡策略。

接收队列设定指令,用于指示对接收队列进行设定。

本发明实施例通过响应于接收队列设定指令,设定每个接收队列的中断号,能提升多核处理器进行数据包处理时性能,能实现高性能数据包处理。

基于上述各实施例的内容,将接收队列与指定的cpu逻辑核进行绑定的具体包括:通过中断的均衡处理,将接收队列与指定的cpu逻辑核进行绑定。

具体地,将接收队列与指定的cpu逻辑核进行绑定,可以通过对中断的均衡处理来实现。

本发明实施例通过中断的均衡处理,将接收队列与指定的cpu逻辑核进行绑定,能利用通用处理器在一定程度上并行地处理网络负载,多核处理器性能有得到显著的提升,具有高效性。

基于上述各实施例的内容,将接收队列与指定的cpu逻辑核进行绑定的具体包括:根据中断的亲和性,将接收队列与指定的cpu逻辑核进行绑定。

具体地,将接收队列与指定的cpu逻辑核进行绑定,可以根据预先设置的中断的亲和性(smpirqaffinity)来实现。

本发明实施例根据中断的亲和性,将接收队列与指定的cpu逻辑核进行绑定,能利用通用处理器在一定程度上并行地处理网络负载,多核处理器性能有得到显著的提升,具有高效性。

基于上述各实施例的内容,对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成的具体步骤包括:按照网络协议层的顺序对数据包进行剥离,直至应用层,将剥离的中间值和提取数据保存于数据包的封装结构中的headroom空间中。

具体地,处理数据包时,数据包在各个处理模块间的传输过程中,按照网络协议层的顺序,一层层剥离上层数据,直至应用层有效信息。

mbuf值为传输参数,携带headroom空间,在剥离过程中,剥离的中间值和提取数据保存于该headroom空间中,避免了对内存的拷贝,实现了内存零拷贝,极大的提升了运行性能。

本发明实施例通过将数据包处理过程中的中间值和提取数据保存于数据包的封装结构中的headroom空间中,实现了内存零拷贝,能显著提升多核处理器进行数据包处理时性能,能实现高性能数据包处理。

图2为根据本发明实施例提供的基于dpdk的数据包处理装置的结构示意图。基于上述各实施例的内容,如图2所示,该装置包括接收模块201和处理模块202,其中:

接收模块201,用于根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包;

处理模块202,用于对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成。

具体地,接收模块201与处理模块202电连接。

接收模块201根据分发策略(即网卡队列均衡策略),解析ip层获取源ip、目的ip、源端口、目的端口和协议类型,组建五元组,通过五元组信息将数据包分发到不同的接收队列;每一个或者多个接收队列绑定在一个核心。

处理模块202对mbuf数据空间参数结构化,根据网络协议,对数据包层层剥离,将获取的中间值保存在headroom空间。整个传输过程中,mbuf值为传输参数,携带headroom空间,即保留了原始数据和分析结果。

本发明实施例提供的基于dpdk的数据包处理装置,用于执行本发明上述各实施例提供的基于dpdk的数据包处理方法,该基于dpdk的数据包处理装置包括的各模块实现相应功能的具体方法和流程详见上述基于dpdk的数据包处理方法的实施例,此处不再赘述。

该基于dpdk的数据包处理装置用于前述各实施例的基于dpdk的数据包处理方法。因此,在前述各实施例中的基于dpdk的数据包处理方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。

本发明实施例根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包,对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成,能显著提升多核处理器进行数据包处理时性能,能实现高性能数据包处理。

图3为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图3所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302和总线303;其中,处理器301和存储器302通过总线303完成相互间的通信;处理器301用于调用存储在存储器302中并可在处理器301上运行的计算机程序指令,以执行上述各方法实施例供的基于dpdk的数据包处理方法,例如包括:根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包;对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成。

本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例供的基于dpdk的数据包处理方法,例如包括:根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包;对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成。

此外,上述的存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例供的基于dpdk的数据包处理方法,例如包括:根据网卡队列均衡策略,确定接收队列,将接收队列与指定的cpu逻辑核进行绑定后,通过接收队列接收数据包;对数据包进行处理,将中间值和提取数据保存于数据包的封装结构中的headroom空间中,直至处理完成。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1