一种基于DPDK的数据包处理方法及装置制造方法及图纸

技术编号:23163919 阅读:75 留言:0更新日期:2020-01-21 22:25
本申请提供一种基于DPDK的数据包处理方法及装置,该方法包括:在DPDK运行环境中,从至少一个网卡中读取数据包,并将所述数据包保存在mbuf中;将mbuf分别加入到预先创建的多个无锁队列中,所述多个无锁队列中的每个无锁队列分别与一个数据包处理服务绑定,以使所述数据包处理服务从绑定的无锁队列中读取所述mbuf并处理所述mbuf中的数据包。本申请使用数据平面开发套件DPDK,从一个或多个网卡接收数据包并将其放到多个无锁共享队列中,应用层服务从绑定的共享队列中读取数据包并进行包处理,从而实现多个服务间数据包的共享。

A data packet processing method and device based on dpdk

【技术实现步骤摘要】
一种基于DPDK的数据包处理方法及装置
本申请涉及计算机
,具体而言,涉及一种基于DPDK的数据包处理方法及装置。
技术介绍
在网络数据处理场景中,存在同一台服务器上需要将采集到的网络数据包交给多个服务进行处理的场景。目前常用的方式是通过linuxBridge网桥或者OpenVSwitch(OVS)来构造虚拟交换设备,虚拟出多个端口,并将物理端口采集到的数据转发到虚拟端口中,每个服务绑定不同的虚拟端口,读取虚拟端口中的数据包并进行处理。但是该方式在应用时需要创建虚拟交换机,并根据需求做相应的配置,而且存在数据包多次拷贝的情况,降低收发性能。
技术实现思路
本申请实施例的目的在于提供一种基于DPDK的数据包处理方法及装置,使用数据平面开发套件DPDK实现零拷贝的多服务数据包共享,不需要部署虚拟交换机,有效提升性能。第一方面,本专利技术实施例提供一种基于DPDK的数据包处理方法,包括:在DPDK运行环境中,从至少一个网卡中读取数据包,并将所述数据包保存在mbuf中;将mbuf分别加入到预先创建的多个无锁队列中,所述多个无锁队列中的每个无锁队列分别与一个数据包处理服务绑定,以使所述数据包处理服务从绑定的无锁队列中读取所述mbuf并处理所述mbuf中的数据包。上述方案中,在从网卡中读取到数据包后,将数据包保存在mbuf中,并将mbuf入队到已与数据包处理服务绑定的多个无锁队列中,上层应用服务通过绑定的无锁队列从队列中读包,由于每个无锁队列中存放的mbuf指针指向同一个mbuf,因此所有的无锁队列中这个mbuf是共享的,从而多个数据包处理服务可以共用mbuf中的这一数据包,实现零拷贝的多服务数据包共享。在可选的实施方式中,在将mbuf分别加入到预先创建的多个无锁队列中之前,所述方法还包括:设定数据包的引用计数,并在所述mbuf中存储引用计数的值。在可选的实施方式中,所述方法还包括:在mbuf中引用计数的值为0的情况下,释放所述mbuf。在上述的两个实施方式中,通过设定引用计数使得mbuf能够被多个数据包处理服务使用,并在多个数据包处理服务处理结束后被释放。在可选的实施方式中,在从至少一个网卡中读取数据包之前,所述方法还包括:初始化所述DPDK,以确定所述网卡的工作模式、申请内存池以及创建多个无锁队列。在上述的初始化中,通过内存池机制能够便于DPDK更加简单的管理内存,同时,创建多个无锁队列后,通过将无锁队列与数据包处理服务绑定,使得数据包能够得到共享。在可选的实施方式中,所述无锁队列为ring队列,所述方法还包括:当存在多余的ring队列时,且有待扩展数据包处理服务,则从所述多余的ring队列中选取与所述待扩展数据包处理服务数量相同的ring队列作为目标ring队列,并将所述目标ring队列分别与一个所述待扩展数据包处理服务进行绑定。在上述方案中,数据包处理服务的个数可以动态扩展,当存在待扩展的数据包处理服务时,只需要将服务与预创建的多个ring队列中未使用的ring队列绑定即可,服务的动态扩展十分便捷。第二方面,本专利技术实施例提供一种基于DPDK的数据包处理装置,包括:读取模块,用于在DPDK运行环境中,从至少一个网卡中读取数据包,并将所述数据包保存在mbuf中;共享模块,用于将mbuf分别加入到预先创建的多个无锁队列中,所述多个无锁队列中的每个无锁队列分别与一个数据包处理服务绑定,以使所述数据包处理服务从绑定的无锁队列中读取所述mbuf并处理所述mbuf中的数据包。在可选的实施方式中,所述共享模块还用于:设定数据包的引用计数,并在所述mbuf中存储引用计数的值。在可选的实施方式中,所述无锁队列为ring队列,所述装置还包括:服务扩展模块,用于在存在多余的ring队列时,且有待扩展数据包处理服务,则从所述多余的ring队列中选取与所述待扩展数据包处理服务数量相同的ring队列作为目标ring队列,并将所述目标ring队列分别与一个所述待扩展数据包处理服务进行绑定。第三方面,本专利技术实施例提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如前述第一方面的实施方式所述的方法。第四方面,本专利技术实施例提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如前述第一方面的实施方式所述的方法。附图说明为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1为本申请实施例提供的数据包处理方法的流程图;图2为本申请实施例提供的数据包处理方法的示意图;图3为本申请实施例提供的数据包处理装置的示意图;图4为本申请实施例提供的电子设备的示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。数据平面开发套件(DataPlaneDevelopmentKit,DPDK)是由Intel等多家公司开发,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。本申请实施例使用DPDK为应用层的多个数据包处理服务提供零拷贝的数据包共享,以下将根据图1所示的流程图详细介绍本实施例提供的数据包处理方法。该方法包括如下步骤:S101:预先进行DPDK环境部署。DPDK的环境部署包括设置运行环境与系统变量、加载驱动模块、绑定需要采集数据包的一个或者多个网卡和分配大页内存等。首先需进行DPDK目标环境的安装,在目标环境创建完成后,将包含构建客户应用程序所需DPDK运行环境的所有库,包括DPDK的轮询驱动程序和DPDK环境头文件。在创建好目标环境之后,用户也可以通过编辑目录中的.config文件对DPDK配置进行修改。DPDK程序在运行前,将设备中使用的所有网卡绑定到uio_pci_generic,igb_uio或者是vfio-pci模块上。如果是由linux内核驱动控制的网络端口,则需先将端口从linux解绑,然后将其绑定到uio_pci_generic,igb_uio或者vfio-pci模块上供DPDK使用。DPDK通过轮询方式不断从绑定的网卡中读取数据包,未与DPDK绑定的网卡将被DPDK轮询驱动忽略,不能被DPDK程序读取。linux的内存页默认采用4KB为一页,页越小内存越大,页表的内存占用也越大,通过分配大页内存,程序需要更少的页面,有效提升性能。大页内存的分配应当在设备系统启动时或者在设备系统启动后尽快完成,以避免物理内存碎片化。大页内存的申请可以指定申请的内存页个数和默认内存页的本文档来自技高网...

【技术保护点】
1.一种基于DPDK的数据包处理方法,其特征在于,包括:/n在DPDK运行环境中,从至少一个网卡中读取数据包,并将所述数据包保存在mbuf中;/n将mbuf分别加入到预先创建的多个无锁队列中,所述多个无锁队列中的每个无锁队列分别与一个数据包处理服务绑定,以使所述数据包处理服务从绑定的无锁队列中读取所述mbuf并处理所述mbuf中的数据包。/n

【技术特征摘要】
1.一种基于DPDK的数据包处理方法,其特征在于,包括:
在DPDK运行环境中,从至少一个网卡中读取数据包,并将所述数据包保存在mbuf中;
将mbuf分别加入到预先创建的多个无锁队列中,所述多个无锁队列中的每个无锁队列分别与一个数据包处理服务绑定,以使所述数据包处理服务从绑定的无锁队列中读取所述mbuf并处理所述mbuf中的数据包。


2.根据权利要求1所述的方法,其特征在于,在将mbuf分别加入到预先创建的多个无锁队列中之前,所述方法还包括:
设定数据包的引用计数,并在所述mbuf中存储引用计数的值。


3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在mbuf中引用计数的值为0的情况下,释放所述mbuf。


4.根据权利要求1所述的方法,其特征在于,在从至少一个网卡中读取数据包之前,所述方法还包括:
初始化所述DPDK,以确定所述网卡的工作模式、申请内存池以及创建多个无锁队列。


5.根据权利要求1所述的方法,其特征在于,所述无锁队列为ring队列,所述方法还包括:
当存在多余的ring队列时,且有待扩展数据包处理服务,则从所述多余的ring队列中选取与所述待扩展数据包处理服务数量相同的ring队列作为目标ring队列,并将所述目标ring队列分别与一个所述待扩展数据包处理服务进行绑定。


6.一种基于D...

【专利技术属性】
技术研发人员:许小奎马奥
申请(专利权)人:南京中孚信息技术有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1