一种基于IntelDPDK的网络数据处理方法及装置与流程

文档序号:14914533发布日期:2018-07-11 00:21阅读:444来源:国知局

本发明涉及数据处理技术领域,尤其涉及一种基于Intel DPDK的网络数据处理方法及装置。



背景技术:

DPDK(Data Plane Development Kit,数据面开发套件)是Intel公司提出的一种高速网络数据包的软件开发套件,现已开源。前期主要支持采用Intel CPU及网卡的系统,现已支持IBM Power、Cavium等其他CPU,以及部分非Intel的网卡。DPDK通过旁路Linux系统网络协议栈,直接对网卡进行读写,结合对多核CPU中不同内核的绑定,能够实现10Gbit网络小包流量下的线速收发。

如图1所示的普通DPDK模型,目前通常基于Intel DPDK的网络数据包并行处理方法为:将数据面与控制面分开,控制面留给Linux系统本身,并绑定在单独的CPU核上,数据面交给应用程序,同时为数据面创造一个没有线程调度,没有系统调用,没有网卡中断的环境,实现对数据的高效分析与并行处理。另外业务面和非业务面交互通常采用“内存映射”加“消息传递指针”的方式。

然而,这种DPDK的使用方法只适合单个服务器的DPDK使用,当采用多个服务器搭建大的业务面系统时,难以扩充系统规模。比如多台服务器之间的消息交互,跨服务器的DPDK之间或协议栈到另一服务器的DPDK消息交互都没有合适的交互方式。而且同一服务器内的操作系统协议栈和DPDK之间的多个模块共用一个通道,一个模块没释放缓冲会影响其它模块。另外“消息传递指针”的方式很容易导致指针管理混乱,内存风险增加,从而导致系统稳定性降低。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种基于Intel DPDK的网络数据处理方法及装置。

第一方面,本发明提供了一种基于Intel DPDK的网络数据处理方法,所述方法包括:

构建数据面开发套件Intel DPDK运行环境;

利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;

将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

可选地,所述利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表,包括:

在物理网口和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;

向所述操作系统IP协议栈及所述物理网口发送地址解析协议arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈或者所述物理网口发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

用这种方法增加IP节点时要注意对广播arp及目的地址不是本处DPDK增加的ip/MAC的arp报文,需要透传而不能在DPDK内截止,否则会影响其它ip节点。

可选地,所述利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表,包括:

在调用rte_kni_init()时传进的端口参数大于物理网口的数量时,在DPDK和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;(区别于前一种增加ip节点的方法,此处增加的是虚拟网口,不绑定实际物理网口);

向所述操作系统IP协议栈发送arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

可选地,所述将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址,包括:

各DPDK模块通过一个所述IP地址与所述操作系统IP协议栈进行交互;

当使用所述IP地址的DPDK模块需从物理网口发出数据包时,通过brct1桥方式将所述IP地址连接到物理网口,以将所述数据包从所述物理网口发出。

可选地,所述利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表之前,所述方法还包括:

创建多个工作线程,进行网络数据包的并行处理。

可选地,所述创建多个工作线程,进行网络数据包的并行处理,包括:

为每个负责处理报文的第一工作线程分配一个RX内存环,为每个负责接收和发送报文的第二工作线程分配一个RX内存环和一个TX内存环;

第一工作线程发送报文时,通过存储器缓存mbuf保存所述报文,并将数据mbuf指针发送至所述第二工作线程的TX内存环,以通过所述第二工作线程将所述报文发出;

所述第二工作线程接收到报文时,将所述报文转发至第一工作线程的RX内存环。

第二方面,本发明提供了一种基于Intel DPDK的网络数据处理装置,所述装置包括:

运行环境构建单元,用于构建数据面开发套件Intel DPDK运行环境;

IP地址添加单元,用于利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;

报文处理单元,用于将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

可选地,所述IP地址添加单元,具体用于:

在物理网口和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;

向所述操作系统IP协议栈及所述物理网口发送地址解析协议arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈或者所述物理网口发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

可选地,所述IP地址添加单元,具体用于:

在调用rte_kni_init()时传进的端口参数大于物理网口的数量时,在DPDK和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;

向所述操作系统IP协议栈发送arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

可选地,所述报文处理单元,具体用于:

各DPDK模块通过一个所述IP地址与所述操作系统IP协议栈进行交互;

当使用所述IP地址的DPDK模块需从物理网口发出数据包时,通过brct1桥方式将所述IP地址连接到物理网口,以将所述数据包从所述物理网口发出。

由上述技术方案可知,本发明提供的一种基于Intel DPDK的网络数据处理方法及装置,通过构建Intel DPDK运行环境;利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。如此,本发明采用增加IP节点的方法,实现全IP多节点的p2p访问,扩充了跨服务器的数据包交互通道,可方便的建立基于DPDK的多服务器低成本高效互联的分布式大系统;可以利用DPDK增加虚拟ip节点,实现各模块独自拥有ip节点,独立拥有mbuf接收缓冲,不会因为一个模块的缓冲管理问题影响其它模块。

附图说明

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

图1是现有技术中的DPDK模型的结构示意图;

图2是本发明一实施例提供的一种基于Intel DPDK的网络数据处理方法的流程示意图;

图3是本发明另一实施例提供的一种基于Intel DPDK的网络数据处理方法的流程示意图;

图4是本发明另一实施例提供的全IP DPDK模型1的结构示意图;

图5是本发明另一实施例提供的一种基于Intel DPDK的网络数据处理方法的流程示意图;

图6是本发明另一实施例提供的全IP DPDK模型2的结构示意图;

图7是本发明一实施例提供的一种基于Intel DPDK的网络数据处理装置的结构示意图;

图8是本发明另一实施例提供的一种基于Intel DPDK的网络数据处理装置的结构示意图。

具体实施方式

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

图2是本发明一实施例中的一种基于Intel DPDK的网络数据处理方法的流程示意图,如图2所示,所述方法包括:

S1:构建数据面开发套件Intel DPDK运行环境。

具体来说,构建Intel DPDK运行环境具体包括:

设置内核启动参数isolcpus=1-n(n为从0开始的最后一个CPU core的序号),使得这些保留的CPU core专门用来进行DPDK数据面事务的处理;设置中断的cpu affinity关闭将要运行DPDK的CPU core中断;设置huge page内存;加载Intel网卡UIO内核驱动模块和kni内核模块;绑定相关物理网口到Intel UIO驱动;调用rte_kni_init()启动DPDK的网络工作机制。

S2:利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表。

具体来说,本步骤包括两种方案:一是在物理网口和协议栈间的数据路径中添加一个或多个ip/mac地址,以在全交换网里增加了多个针对DPDK的ip节点,从而方便所有节点进行直接的点对点消息交互;二是在调用rte_kni_init()时传递进比实际物理网口多的数时,在DPDK和操作系统IP协议栈之间添加一个或多个IP地址,从而为每个DPDK模块生成一个这样连通操作系统协议栈和DPDK的虚拟网口。

S3:将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

具体来说,DPDK模块可通过添加的一个或多个IP地址进行报文的交互。

由此可见,本实施例通过构建Intel DPDK运行环境;利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。如此,本实施例采用增加IP节点的方法,实现全IP多节点的p2p访问,扩充了跨服务器的数据包交互通道,可方便的建立基于DPDK的多服务器低成本高效互联的分布式大系统;可以利用DPDK增加虚拟ip节点,实现各模块独自拥有ip节点,独立拥有mbuf接收缓冲,不会因为一个模块的缓冲管理问题影响其它模块。

在本发明的一个可选实施例中,上述步骤S2之前,所述方法还包括如下步骤:

创建多个工作线程,进行网络数据包的并行处理。

本实施例中,创建多个工作线程,以实现网络数据包的并行处理。则当增加的ip节点接收到报文时可转发给相应的DPDK工作线程进行处理,而DPDK模块需从ip发出报文时,查询路由信息表取得源mac和目的mac,从而将报文发送至对应的目的mac。即进一步基于在全交换网里增加了多个针对DPDK的ip节点,从而方便所有节点进行直接的点对点消息交互。

图3是本发明另一实施例中的一种基于Intel DPDK的网络数据处理方法的流程示意图,如图3所示,所述方法包括:

S301:构建Intel DPDK运行环境。

S302:创建多个工作线程,进行网络数据包的并行处理。

具体地,本步骤具体包括:为每个负责处理报文的第一工作线程分配一个RX内存环,为每个负责接收和发送报文的第二工作线程分配一个RX内存环和一个TX内存环;第一工作线程发送报文时,通过存储器缓存mbuf保存所述报文,并将数据mbuf指针发送至所述第二工作线程的TX内存环,以通过所述第二工作线程将所述报文发出;所述第二工作线程接收到报文时,将所述报文转发至第一工作线程的RX内存环。这种将报文的收发和处理分开的方法在获得高效率的同时拥有最大的灵活性。

S303:在物理网口和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址。

如图4所示,在物理网口和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址后,得到本实施例对应全IP DPDK模型1如图4所示,新增的IP地址对应的网口是面向操作系统协议栈和物理网口两个方向同时呈现。

S304:向所述操作系统IP协议栈及所述物理网口发送地址解析协议arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈或者所述物理网口发送的arp请求发送arp响应消息。

具体来说,负责接受/发送报文的工作线程定期向操作系统IP协议栈和物理网口都发送arp广播(一般是免费arp,只针对该网口上DPDK增加的ip(命名为ADDED_IP)地址发送,每个ADDED_IP绑定不同的mac)。

可理解地,本实施例中添加的IP地址对应的网口是面向操作系统IP协议栈及物理网口的,因此,arp广播消息向操作系统IP协议栈及物理网口发送,而接收的arp请求可能是操作系统IP协议栈或者物理网口发送的。

需要说明的是,对从任意方向收到广播arp及目的地址不是本处DPDK增加的ip/MAC的arp报文,需要透传而不能在DPDK内截止,否则会影响其它ip节点。

S305:根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

具体地,根据arp消息建立DPDK路由信息表,定期查询DPDK路由信息表里的ip节点的arp状态,更新ip节点的状态。

S306:将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

具体来说,将发给IP地址的消息(来自操作系统IP协议栈或者物理网口)分发给不同的DPDK模块(每个DPDK模块对应一个工作线程)处理,对每个从ADDED_IP发出的报文,查询DPDK路由信息表取得源和目的mac,填写mac层后发出。

本实施例中的方法相当于在全交换网里增加了多个针对DPDK的ip节点,从而方便所有节点进行直接的点对点消息交互,采用增加DPDK ip节点的方法,实现全ip多节点的p2p访问可方便的建立多服务器低成本的大系统。

图5是本发明另一实施例中的一种基于Intel DPDK的网络数据处理方法的流程示意图,如图5所示,所述方法包括:

S501:构建Intel DPDK运行环境。

S502:创建多个工作线程,进行网络数据包的并行处理。

S503:在调用rte_kni_init()时传进的端口参数大于物理网口的数量时,在DPDK和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址。

具体来说,调用rte_kni_init()时传递进比实际物理网口多的数,比如DPDK实际物理网口是3个,如果再增加2个虚拟网口,则需将5作端口参数传进rte_kni_init()。而在调用rte_kni_init()时传递进比实际物理网口多的数,对每个新增的虚拟网口调用rte_kni_alloc()生成虚拟网口{在调用时第1个参数传入mbuf池指针,第3个参数传NULL空指针},在物理网口和协议栈间添加一个或多个ip/mac地址(称这种ip为“DPDK本地ip”)。

需要说明的是,rte_kni_alloc()(DPDK下无论是物理网口还是虚拟网口都通过该函数生成网络节点,该函数的返回值是进行收发功能的句柄)传进的第一个参数可以是一个独立申请的mbuf池(该mbuf池不能再出现在其它网口的rte_kni_alloc()中,是虚拟网口独占的),也可以是和其他网口共享的mbuf池。

如图6所示,在DPDK和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址,即为每个DPDK模块生成一个这样连通操作系统协议栈和DPDK的虚拟网口,得到本实施例对应的全IP DPDK模型1如图6所示,新增的IP地址对应的虚拟网口则只面向操作系统IP协议栈呈现,因此无论是arp还是普通ip收发都只是面向协议栈的。

可理解地,区别于上述实施例中增加ip节点的方法,本实施例中增加的是虚拟网口,不绑定实际物理网口。

S504:向所述操作系统IP协议栈发送arp广播消息,并对所述IP地址接收的所述操作系统IP协议栈发送的arp请求发送arp响应消息。

具体地,独立ip是通过和协议栈的arp交互,生成arp地址广播产生。

可理解地,本实施例中添加的IP地址对应的网口仅是面向操作系统IP协议栈的,因此,arp广播消息仅向操作系统IP协议栈发送,而接收的arp请求只是操作系统IP协议栈发送的。

S505:根据所述arp广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

S506:将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

具体地,本步骤包括:各DPDK模块通过一个所述IP地址与所述操作系统IP协议栈进行交互;当使用所述IP地址的DPDK模块需从物理网口发出数据包时,通过brct1桥方式将所述IP地址连接到物理网口,以将所述数据包从所述物理网口发出。例如,brctl addif br0 vEthV0就是虚拟网口vEthV0添加到桥br0中。

本实施例中增加IP地址对应的的网口都是面向协议栈的,即该端口上只和操作系统IP协议栈进行报文交互,当使用该网口的模块需要从物理网口发出数据包时(比如向另一服务器发送ip包),即可以通过brctl桥方式连接到实际的物理网口出包,也可以使用DPDK接管的任意物理网口发包(因为DPDK下的模块一般都是同一进程下的线程,相互资源共享)。

本实施例中,采用利用DPDK增加虚拟ip节点的方法,实现各DPDK模块独自拥有ip节点,独立拥有mbuf接收缓冲,不会因为一个模块的缓冲管理问题影响其它模块。进一步的,这种利用DPDK生成的虚拟网口可以通过brctl桥(虚拟网桥)方式连接到实际的物理网口,实现ip全连通的系统架构。

由此可见,上述实施例针对不同的风险等级采用不同的方法(比如,为OM、调试上报增加单独的虚拟ip节点,就不会影响协议层报文<因为协议面报文很重要>,而为业务报文、协议层报文按方案1增加ip节点。)增加ip节点,既能实现不同的通道,又能提升系统的稳定性,还能方便定位排查问题。

图7是本发明一实施例中的一种基于Intel DPDK的网络数据处理装置的结构示意图,如图7所示,所述装置包括:运行环境构建单元701、IP地址添加单元702及报文处理单元703。其中:

运行环境构建单元701用于构建数据面开发套件Intel DPDK运行环境;IP地址添加单元702用于利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;报文处理单元703用于将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。

本实施例中,通过运行环境构建单元701构建Intel DPDK运行环境;IP地址添加单元702利用DPDK添加一个或多个IP地址,并建立所述一个或多个IP地址对应的路由信息表;报文处理单元703将所述IP地址接收的报文转发给DPDK相应的工作线程处理,并将所述IP地址发出的报文发送至所述路由信息表中对应的目的地址。如此,本实施例采用增加IP节点的方法,实现全IP多节点的p2p访问,扩充了跨服务器的数据包交互通道,可方便的建立基于DPDK的多服务器低成本高效互联的分布式大系统;可以利用DPDK增加虚拟ip节点,实现各模块独自拥有ip节点,独立拥有mbuf接收缓冲,不会因为一个模块的缓冲管理问题影响其它模块。

在本发明的一个可选实施例中,所述IP地址添加单元702,具体用于:

在物理网口和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;

向所述操作系统IP协议栈及所述物理网口发送地址解析协议arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈或者所述物理网口发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

在本发明的一个可选实施例中,所述IP地址添加单元702,具体用于:

在调用rte_kni_init()时传进的端口参数大于物理网口的数量时,在DPDK和操作系统IP协议栈之间的数据路径上添加一个或多个IP地址;

向所述操作系统IP协议栈发送arp请求广播消息,并对所述IP地址接收的所述操作系统IP协议栈发送的arp请求发送arp响应消息;

根据所述arp请求广播消息及所述arp响应消息建立所述一个或多个IP地址对应的路由信息表。

进一步地,所述报文处理单元703,具体用于:

各DPDK模块通过一个所述IP地址与所述操作系统IP协议栈进行交互;

当使用所述IP地址的DPDK模块需从物理网口发出数据包时,通过brct1桥方式将所述IP地址连接到物理网口,以将所述数据包从所述物理网口发出。

在本发明的一个可选实施例中,如图8所示,所述装置还包括:工作线程创建单元704,用于:

创建多个工作线程,进行网络数据包的并行处理。

在本发明的一个可选实施例中,所述工作线程创建单元704,具体用于:

为每个负责处理报文的第一工作线程分配一个RX内存环,为每个负责接收和发送报文的第二工作线程分配一个RX内存环和一个TX内存环;

第一工作线程发送报文时,通过存储器缓存mbuf保存所述报文,并将数据mbuf指针发送至所述第二工作线程的TX内存环,以通过所述第二工作线程将所述报文发出;

所述第二工作线程接收到报文时,将所述报文转发至第一工作线程的RX内存环。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

在本发明的描述中,需要说明的是,术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

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

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