一种报文处理方法及装置的制造方法

文档序号:10612760阅读:797来源:国知局
一种报文处理方法及装置的制造方法
【专利摘要】本发明公开了一种报文处理方法及装置。该方法,包括:将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;接着,将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。本发明实现了对IP数据报文的排序,以及根据该排序对各所述IP数据报文进行处理,从而保证了IP数据报文处理的有序性。
【专利说明】
一种报文处理方法及装置
技术领域
[0001]本发明涉及通信技术,尤指一种报文处理方法及装置。
【背景技术】
[0002]随着通信技术的发展,云操作系统广泛的应用在通信系统中,其中,云操作系统是一种以云计算、云存储技术作为支撑的操作系统。
[0003]图1为现有技术中基于云操作系统的数据处理系统结构示意图。如图1所示,该数据处理系统包括:物理服务器,以及运行于其上的云操作系统,所述的物理服务器上可以设置有Intel推出的带有加解密功能的高性能处理芯片CCK(Intel Cave Creek),还可以设置有至少一个网卡(NIC),所述云操作系统的虚拟机(Virtual Machine,简称VM)中至少包括用户空间(User space)和操作系统内核,该操作系统内核可以是Linux核(Linux kernel),其中,用户空间中可以设置报文快速处理的库和驱动的集合(DPDK),DPDK使用U1(Userspace I/O)机制使网卡驱动程序运行在用户态,并且可以从网卡NIC收发报文,所述CCK通过透传(PassThrough)技术将物理服务器直接映射到虚拟内存机VM中,在VM的用户空间调用与DPDK适配的接口实现快速的报文加解密处理。
[0004]在现有技术中,已经存在基于云操作系统,利用DPDK和CCK进行数据处理的系统,其可以实现高速数据转发和加解密功能,但是目前的技术方案中通常多个IP数据报文可以组合成一条流报文,而为了保证流报文中各报文顺序,只能采用一个核处理一条流报文的方案,而此时如果网卡收发流量超过一个核的处理能力时必然会产生丢包;而如果为了提高报文的处理能力,采用多个核处理一条流报文,流报文中各报文的顺序无法保证成了亟待解决的问题。

【发明内容】

[0005]为了解决上述技术问题,本发明提供了一种报文处理方法及装置,用以解决现有技术中采用多核处理同一条流报文时无法保证报文处理的有序性的问题。
[0006]为了达到本发明目的,本发明提供了一种报文处理方法,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,其特征在于,该方法包括:
[0007]将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;
[0008]将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。
[0009]进一步的,所述IP数据报文是由主机发送给网卡的;
[0010]将多个网卡通过DPDK发送的各IP数据报文进行排序,包括:
[0011]将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序;
[0012]将所述CCK发出的对各所述IP数据报文处理得到的各IPSec报文进行排序,包括:
[0013]将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进彳丁排序。
[0014]进一步的,所述将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序,包括:
[0015]根据所述IP数据报文中携带的用于标识主机对所述IP数据报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。
[0016]进一步的,所述数据处理系统包括:至少一个收包核和至少一个收包排序核;
[0017]在所述将多个网卡通过所述DPDK发送的各所述IP数据报文进行排序之前,还包括:
[0018]所述收包核接收所管理的多个网卡通过DPDK发送的各IP数据报文,将所述IP数据报文存储至所属的收包流队列中;
[0019]所述将多个网卡通过DPDK发送的各IP数据报文进行排序,包括:
[0020]所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列。
[0021]进一步的,所述方法还包括:
[0022]所述收包核读取所接收的所述IP数据报文携带的五元组信息中的目标信息;
[0023]所述收包核根据预先建立的IP数据报文携带的五元组信息中的目标信息与收包流队列之间的对应关系,确定与读取到的目标信息对应的收包流队列;
[0024]所述收包核将所确定的收包流队列作为所接收的IP数据报文所属的收包流队列;
[0025]其中,目标信息为五元组信息中的至少一项信息,不同的目标信息对应不同的收包流队列。
[0026]进一步的,所述数据处理系统还包括至少一个处理核;
[0027]在所述收包排序核将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列之后,还包括:
[0028]所述处理核从各收包排序队列中获取IP数据报文,并对所获取的所述IP数据报文做如下重构处理:重构报文头,并向报文中添加堆栈指针包头,该包头包括根据报文对应的SA计算的一个序列号,并依据所述SA构建所述CCK对报文进行加解密所需的信息;
[0029]所述将排序后的各IP数据报文发送至所述CCK进行处理,包括:
[0030]所述处理核将对获取的各IP数据报文的重构结果发送至所述CCK进行处理。
[0031]进一步的,所述处理核从各收包排序队列中获取IP数据报文,包括:
[0032]所述处理核按照对各收包排序队列的轮询顺序,遍历各收包排序队列从中获取IP数据报文。
[0033]进一步的,其特征在于,所述数据处理系统还包括调度核;
[0034]所述方法还包括:
[0035]所述调度核根据收包排序队列中的IP数据报文数量,动态地调整各收包排序队列的优先级;
[0036]所述调度核依据各收包排序队列当前优先级的高低以及所述处理核当前的轮询方式,得到所述处理核当前对各收包排序队列的轮询顺序,所述轮询方式为优先级从高到低或者从低到高的方式;
[0037]其中,IP数据报文数量越多,收包排序队列的优先级越高。
[0038]进一步的,所述方法还包括:
[0039]所述调度核动态地计算所述处理核的负载状态,所述负载状态为过载或空闲;
[0040]所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式。
[0041]进一步的,所述调度核动态地计算所述处理核的负载状态,包括:
[0042]所述调度核从所述处理核读取所记录的如下内容:所述处理核在最近时间窗口内尝试从收包排序队列中获取一个IP数据报文的次数X与实际取到的IP数据报文的数量Y;
[0043]所述调度核计算Y与X的比值,作为所述处理核当前的负载率;
[0044]如果所述负载率超过设定阈值,则所述调度核判断所述处理核当前的负载状态为过载;否则,负载状态为为空闲。
[0045]进一步的,所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式,包括:
[0046]如果本次计算的所述处理核的负载状态与最近一次计算的所述处理核的负载状态不一致,则所述调度核将所述处理核的轮询方式更新为与所述处理核最近一次的轮询方式相反的方式。
[0047]进一步的,所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列,包括:
[0048]按照设定周期,所述收包排序核从所管理的收包流队列中取出η个IP数据报文,将该η个IP数据报文和与所管理的收包流队列对应的收包排序队列中已经存在的m个IP数据报文一起排序,按照排序结果使用插入排序法将所述η个IP数据报文插入至所述收包排序队列中,其中所述η和m均为大于O的整数。
[0049]进一步的,所述数据处理系统还包括取包核和排序发包核;
[0050]在将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序之前,还包括:
[0051 ]所述取包核接收所述CCK发出的对各IP数据报文的重构结果处理得到的各IPSec报文,将所述IPSec报文存储至所属的发包流队列中;
[0052]将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡,包括:
[0053]所述排序发包核对所管理的发包流队列中的IPSec报文进行排序,按照排序结果顺序处理所管理的发包流队列中的各IPSec报文,其中所述处理操作包括按照所述IPSec报文中的目的IP查找路由,通过DPDK从相应的网卡发出。
[0054]本发明还提供一种报文处理装置,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,该装置包括:
[0055]第一处理模块,用于将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;
[0056]第二处理模块,用于将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。
[0057]进一步的,所述第一处理模块,具体用于将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序;
[0058]所述第一处理模块,具体用于将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进行排序。
[0059]进一步的,所述第一处理模块,具体用于根据所述IP数据报文中携带的用于标识主机对所述IP数据报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。
[0060]与现有技术相比,本发明实施例提供的报文处理方法,实现了对IP数据报文的排序,以及根据该排序对各所述IP数据报文进行处理,从而保证了 IP数据报文处理的有序性。
【附图说明】
[0061]附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
[0062]图1为现有技术中基于云操作系统的数据处理系统结构示意图;
[0063]图2为本发明报文处理方法一实施例的流程示意图;
[0064]图3为本发明报文处理方法一实施例的无锁环形队列示意图;
[0065]图4为本发明实施例提供的报文处理方法所应用的数据处理系统的一结构示意图;
[0066]图5为本发明实施例提供的报文处理方法所应用的数据处理系统的另一结构示意图;
[0067]图6为本发明实施例提供的报文处理方法中排序队列的优先级的示意图;
[0068]图7本发明实施例提供的报文处理方法中从排序队列中取包的流程示意图;
[0069]图8为本发明实施例提供的报文处理方法中根据负载状态轮询排序队列的流程示意图;
[0070]图9为本发明实施例提供的报文处理方法中根据负载状态轮询排序队列的流程示意图。
【具体实施方式】
[0071]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0072]本发明实施例提供的报文处理方法具体可以应用于云操作系统下多核环境中对报文处理时。本发明实施例提供的报文处理方法具体可以通过报文处理装置来执行,该报文处理装置可以集成在物理服务器中,或者单独设置,其中,该报文处理装置可以采用软件和/或硬件的方式来实现。以下对本实施例提供的报文处理方法及装置进行详细地说明。
[0073]图2为本发明报文处理方法一实施例的流程示意图,如图2所示,本实施例的执行主体是报文处理装置,本实施例提供的报文处理方法,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,其中,该DPDK可以是X86平台报文快速处理的库和驱动的集合,该方法,包括:
[0074]步骤201、将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理。
[0075]本实施例中的所述IP数据报文可以是由主机发送给网卡的,具体的,将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序;进一步的,可以根据所述IP数据报文中携带的用于标识主机对该报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。举例来讲,具体的,该IP数据报文携带的用于标识主机对该报文的实际发送顺序的标识字段是唯一标识,即主机发送的每一份IP数据报文过程中,每发送一个IP数据报文,就将此值加I,因此根据此值可以确定各IP数据报文的排序。
[0076]需要说明的是,为保证IP数据报文顺序的唯一性,一条IP数据报文的排序只由一个核来操作。为保证排序核不会成为性能瓶颈,排序核只做必要的最简单操作,其余操作由收包核和报文处理核来完成。
[0077]进一步的,所述数据处理系统还包括:至少一个收包核和至少一个收包排序核;具体的,所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列。其中,在所述将多个网卡通过所述DPDK发送的各所述IP数据报文进行排序之前,还可以包括,所述收包核接收所管理的多个网卡通过DPDK发送的各IP数据报文,将所述IP数据报文存储至所属的收包流队列中。
[0078]步骤202、将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。
[0079]具体的,将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进行排序,也就是说,根据所述IP数据报文中携带的用于标识主机对该报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序获得的排序。
[0080]在本实施例中,将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;接着,将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。实现了对IP数据报文的排序,以及根据该排序对各所述IP数据报文进行处理,从而保证了 IP数据报文处理的有序性。
[0081]在本实施例中,所述数据处理系统包括:至少一个收包核和至少一个收包排序核;
[0082]在上述实施例的基础上,在所述将多个网卡通过所述DPDK发送的各所述IP数据报文进行排序之前,还可以包括:
[0083]所述收包核接收所管理的多个网卡通过DPDK发送的各IP数据报文,将所述IP数据报文存储至所属的收包流队列中;
[0084]所述将多个网卡通过DPDK发送的各IP数据报文进行排序,包括:
[0085]所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列。
[0086]进一步的,在上述实施例的基础上,本实施例的报文处理方法还可以包括:
[0087]所述收包核读取所接收的所述IP数据报文携带的五元组信息中的目标信息;
[0088]所述收包核根据预先建立的IP数据报文携带的五元组信息中的目标信息与收包流队列之间的对应关系,确定与读取到的目标信息对应的收包流队列;
[0089]所述收包核将所确定的收包流队列作为所接收的IP数据报文所属的收包流队列;
[0090]其中,目标信息为五元组信息中的至少一项信息,不同的目标信息对应不同的收包流队列。
[0091]举例来讲,目标信息可以包括目的IP和/或目的端口,其中,所述五元组信息至少包括以下:源网络之间互连的协议IP、目的IP、协议号、源端口、目的端口。
[0092]进一步的,在上述实施例的基础上,所述数据处理系统还包括至少一个处理核;
[0093]在所述收包排序核将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列之后,还包括:
[0094]所述处理核从各收包排序队列中获取IP数据报文,并对所获取的所述IP数据报文做如下重构处理:重构报文头,并向报文中添加堆栈指针包头,该包头包括根据报文对应的SA计算的一个序列号,并依据所述SA构建所述CCK对报文进行加解密所需的信息;
[0095]所述将排序后的各IP数据报文发送至所述CCK进行处理,包括:
[0096]所述处理核将对获取的各IP数据报文的重构结果发送至所述CCK进行处理。
[0097]具体的,所述处理核从各收包排序队列中获取IP数据报文,包括:
[0098]所述处理核按照对各收包排序队列的轮询顺序,遍历各收包排序队列从中获取IP数据报文。
[0099]进一步的,在上述实施例的基础上,所述数据处理系统中还包括调度核;
[0100]本实施例中的所述方法还可以包括:
[0101]所述调度核根据收包排序队列中的IP数据报文数量,动态地调整各收包排序队列的优先级;
[0102]所述调度核依据各收包排序队列当前优先级的高低以及所述处理核当前的轮询方式,得到所述处理核当前对各收包排序队列的轮询顺序,所述轮询方式为优先级从高到低或者从低到高的方式;其中,IP数据报文数量越多,收包排序队列的优先级越高。
[0103]进一步的,在上述实施例的基础上,本实施例中的所述方法还可以包括:
[0104]所述调度核动态地计算所述处理核的负载状态,所述负载状态为过载或空闲;
[0105]所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式。
[0106]具体的,所述调度核动态地计算所述处理核的负载状态,包括:
[0107]所述调度核从所述处理核读取所记录的如下内容:所述处理核在最近时间窗口内尝试从收包排序队列中获取一个IP数据报文的次数X与实际取到的IP数据报文的数量Y;
[0108]所述调度核计算Y与X的比值,作为所述处理核当前的负载率;
[0109]如果所述负载率超过设定阈值,则所述调度核判断所述处理核当前的负载状态为过载;否则,负载状态为为空闲。
[0110]进一步的,所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式,包括:
[0111]如果本次计算的所述处理核的负载状态与最近一次计算的所述处理核的负载状态不一致,则所述调度核将所述处理核的轮询方式更新为与所述处理核最近一次的轮询方式相反的方式。
[0112]可选的,在上述实施例的基础上,所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列,包括:
[0113]按照设定周期,所述收包排序核从所管理的收包流队列中取出η个IP数据报文,将该η个IP数据报文和与所管理的收包流队列对应的收包排序队列中已经存在的m个IP数据报文一起排序,按照排序结果使用插入排序法将所述η个IP数据报文插入至所述收包排序队列中,其中所述η和m均为大于O的整数。
[0114]进一步的,在上述实施例的基础上,所述数据处理系统还包括取包核、取包排序核和发包核;
[0115]在将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序之前,还包括:
[0116]所述取包核接收所述CCK发出的对各IP数据报文的重构结果处理得到的各IPSec报文,将所述IPSec报文存储至所属的发包流队列中;
[0117]将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡,包括:
[0118]所述取包排序核对所管理的发包流队列中的IPSec报文进行排序,将所管理的发包流队列中的IPSec报文按照排序结果顺序存储至发包排序队列;
[0119]所述发包核从所管理的发包排序队列中获取IPSec报文,按照所述IPSec报文中的目的IP查找路由,通过DPDK从相应的网卡发出。
[0120]为使本发明实施例的技术方案更加易于理解,首先对基于DPDK的无锁环形队列进行说明。
[0121]图3为本发明报文处理方法一实施例的无锁环形队列示意图。如图3所示,DPDK提供无锁的环形队列,适用于单生产者单消费者、单生产者多消费者、多生产者单消费者、多生产者多消费者情形,可以在不同的逻辑核之间快速地传递大量的数据。无锁环形队列如图所示,队列的增长方向是顺时钟方向,也就说,生产者以顺时钟方向往队列中放数据,而消费者同样以顺时钟方向从队列中取数据。当生产者需要往队列中存数据时,先用生产者队列头指针加上需要存放数据的数量得到新的生产者头指针,然后从生产者尾指针开始向队列中逐个存入数据,直到所有要存入的数据都存入完成后,把生产者尾指针加上所生产的数据量得到新的生产者尾指针;当有消费者需要取数据时,先把原消费者头指针加上打算消费者的数量得到新的消费者头指针,然后从消费者尾部逐个取出数据,直到完成所要提取的数据量,最后把消费者尾指针加上所消费的数量得到新的消费者尾指针。需要说明的是,在本发明实施例中所涉及的所有队列均可采用上面所提到的无锁的环形队列。
[0122]图4为本发明实施例提供的报文处理方法所应用的数据处理系统的一结构示意图。图5为本发明实施例提供的报文处理方法所应用的数据处理系统的另一结构示意图。如图4和图5所示,本发明实施例中数据处理系统包括含多个逻辑核的处理装置,所述多个逻辑核core预先分为五类:(I)收包核;(2)收包排序核;(3)处理核;(4)取包核;(5)排序发包核。各类型逻辑核个数根据总核数分配设置为预定值,同时也可以根据容量需求灵活扩展核个数,进一步提高性能。上述配置的各种类型的逻辑核均指进行单一类型操作的核,不同类型的逻辑核之间通过队列传送报文,通过共享内存进行通信。
[0123]下面详细介绍基于图3所示的数据处理系统所实现的报文处理方法。
[0124](一)收包
[0125]每个收包核通过DPDK从所管理的多个网卡(NIC)收取IP数据报文(该报文为主机通过通信网络发送到网卡上的;对于同一个主机而言,每发一个IP数据报文,标识字段的值加I),并根据IP数据报文中携带的五元组信息(源IP、目的IP、协议号、源端口、目的端口)从安全联盟数据库(Security Associat1n Databas,SADB)中查找加解密所需的安全关联(Security Associat1n,SA),并将所述报文和SA分流到该报文所属的流队列进行缓存(一个流队列可视为一条报文流),此时对于每条报文流而言,其对应一个多生产者单消费者队列(也即流队列由多个收包核存储数据,而被单个收包排序核读取),以此,可以保证报文流中各报文的顺序。
[0126]其中,SADB中预先设置有五元组信息和SA的对应关系,典型地可以通过HASH算法来查找;所述报文所属的流队列确定方式也为预先设置,例如可以设置报文的五元组信息中单个信息与流队列的对应关系(例如,源IP与流队列之间的对应关系,不同源IP的IP数据报文对应于不同的流队列),也可以设置报文的五元组信息中的若干个信息与流队列的对应关系(例如,(源IP和目的IP)与流队列之间的对应关系),当然,还可以根据报文个数等其他因素来设置报文与所述流队列的对应关系,本发明,对于报文及其所属流队列的确定方式并非作为唯一限制,只是较优地可以根据五元组信息中的信息来确定。在本发明实施例中,每个收包核可以对应管理数据处理系统中所有网卡中的至少一个网卡。
[0127](二)收包排序
[0128]每个收包排序核按照设定周期对所管理的流队列中的报文进行排序,确定各报文的顺序,然后将各报文及对应的SA按照报文顺序放入排序队列。在本发明实施例中,一个收包流队列被单个收包排序核管理。例如,不同的收包流队列被不同的收包排序核管理。当然,一个收包排序核管理多个收包流队列也可。
[0129]由于IP数据报文的标识字段唯一地标识主机发送的每一份IP数据报文,而根据RFC791的规定,主机的协议栈每发送一个IP数据报文,就将此标识字段的值加1,由此,根据此标识字段的值可以确定同一流队列中各报文的顺序。
[0130]需要特别说明的一点是:为了保证报文排序的唯一性,一条流队列中各报文的排序由一个收包排序核来处理。而收包排序核使用一个单生产者多消费者队列作为排序队列(也即排序队列由单个收包排序核存储数据,而被多个处理核读取)。不同的流队列对应不同的排序队列。
[0131](三)重构
[0132]所有处理核都可以从所有的排序队列中获取报文及其对应的SA,而由哪个处理核读取哪个排序队列的报文及其对应的SA可以通过预定的规则来设定(例如,周期性的选定处理核与排序队列的对应关系,每个处理核通过轮询的方式读取一个排序队列中设定个数报文,等等);重构报文的报文头,并向报文中添加堆桟指针(Extended stack pointer,ESP)包头,该包头包括根据报文对应的SA计算的一个序列号,并依据该SA构建CCK加解密所需的信息,然后将该信息和修改后的报文送至CCK。其中,处理核对同一个排序队列中各报文的读取顺序为各报文的存储顺序。
[0133](四)CCK处理
[0134]CCK对接收到的报文进行加解密、摘要计算等处理,生成IPSec报文;
[0135](五)取包
[0136]取包核按照设定周期接收CCK发出的IPSec报文,并按照IPSec报文中的五元组信息将该IPSec报文分流到所属的发包流队列进行缓存,具体的分流方式与上述对IP数据报文的分流方式相同,在此不再赘述。
[0137](六)排序发包
[0138]由于CCK有多个(典型地,12个)引擎同时处理报文,由此也需要排序发包核根据预定排序算法对所管理的发包流队列中各报文进行排序,确定各报文的顺序。具体的,由于IPSec报文中依然包括对应的IP数据报文中的标识字段,所以排序发包核的预定排序算法可按照上述收包排序核对IP数据报文的排序算法,依据标识字段值的大小对IPSec报文进行排序,在此不再赘述。
[0139]排序发包核按照排序结果顺序处理所管理的发包流队列中的各IPSec报文,其中所述处理操作包括按照IPSec报文中目的IP查找路由,通过DPDK从相应的网卡发出。
[0140]由此可见,本发明实施例中通过将从多个网卡中接收的报文按照报文实际发包顺序进行重新排序后再转发至CCK,并对CCK发出的报文也进行排序后再发送到网卡,由此在充分利用多核的优势的情况下保证了报文处理的有序性。
[0141]在本发明以上实施例中,在收包排序过程中,收包排序核将从流队列中获取的报文按序排列后放置于排序队列中,而处理核从排序队列中取出已经排序的报文,如果此时由于各个逻辑核读取数据的周期不完全一致,而处理核取出的报文数数量有限时,则有可能出现处理核所取出的报文数量不仅包括当前周期收包排序核放置于排序队列中的报文还包括上一周期已经排序的报文,而此时也可能会发生错序,由此进一步优选地可采用排序算法来确定,就步骤如下:
[0142]假定排序队列的当前报文数为m,(在处理核取报文的首个周期,可以理解为所有已由收包排序核完成排序的报文数,在处理核取报文的非首周期,也可理解为上一个周期处理核取报文后在排序队列中剩余的已排序报文数),按照设定周期收包排序核从流队列中取出η个报文,将该η个报文和排序队列中已经存在的m个报文一起利用于IP数据报文的标识字段确定(n+m)个报文顺序,并使用插入排序法完成排序。
[0143]该优选实施方式可以使得方案对各类型逻辑核对IP数据报文的读取和存储周期之间无特殊要求,不必严格一致,并且对存储IP数据报文的各队列(包括流队列和排序队列)长度也没有特别限定。
[0144]在本发明以上描述的实施例中,报文的重构将占用最多的处理核的处理时间,而重构时处理核的数量将直接影响到系统的吞吐量,因此如何充分利用多核优势平衡各核之间的负载是影响系统性能的重要因素,由此,本发明实施例中较优地可单独设置一个逻辑核:调度核,其可以实现基于动态优先级的队列调度和基于负载的处理核调度来选择处理核和排序队列的关系。需要说明的是,在说明书相应部分标出(图4中未示出)
[0145]在本发明的上述实施例中,报文重构过程需要确定由处理核读取哪个排序队列的报文,较优地可以通过基于动态优先级的队列调度方式来确定,此时,还需要增加一种功能的逻辑核:调度核。处理核在读取数据时根据排序队列的优先级,以轮询的方式遍历排序队列,从中读取报文,而排序队列的优先级由调度核根据排序队列中的报文数量动态调整,报文数量越多优先级越高。
[0146]图6为本发明实施例提供的报文处理方法中排序队列的优先级的示意图。图7本发明实施例提供的报文处理方法中从排序队列中取包的流程示意图。具体的,如图6和图7所示,调度核维护一个排序队列优先级表,处理核根据优先级表,优先从优先级高的排序队列中取包。流程如下:
[0147]Sll调度核以设定时长(例如,100ms)为周期,以优先级表中优先级由小至大的顺序查询所有排序队列中报文的数量,并记录到优先级表中。
[0148]S12调度核以报文数量由多到少的顺序使用插入排序算法对优先级表中的排序队列进彳丁排序。
[0149]S13调度核按照排序后的优先级表顺序将各排序队列的优先级分别置为l-n(l表不最尚优先级,η为排序队列的数量);
[0150]S14处理核读取优先级表,先从优先级为I的排序队列中取包,待此队列取空时再从优先级为2的排序队列中取包,以此类推。
[0151]对于上述排序队列优先级设置,需要特别说明的是:上述的优先级被置为1-η是为了标识各个排序队列的优先级,也可以采用其他标识优先级的方法,只要能对各个排序队列的优先级进行排序并且加以区分即可;另外,如果两个排序队列中的报文数量相同可以随机设定优先级或者按照原有优先级高低顺序排列,或者预置高低等本领域普通人员已知可实施的其他方式。
[0152]进一步地,如果只使用基于优先级的队列调度,有可能会导致频繁的队列优先级调整,尤其是如果某些排序队列中流量较大,一直保持高优先级,处理核将一直处于高负载状态,同时还会导致低优先级队列中的报文长时间得不到处理,由此本发明实施例对于队列调度还可以进一步地基于负载进行处理核调度。对处理核负载设定阈值(如80% ),由调度核来维护处理核负载表,记录处理核当前的负载状态,如果处理核负载超过此阈值则以排序队列优先级反转的方式轮询排序队列。
[0153]图8为本发明实施例提供的报文处理方法中根据负载状态轮询排序队列的流程示意图。如图8所不,流程如下:
[0154]S21处理核记录自己在当前设定周期内(例如,最近Is内)尝试从排序队列中取报文的次数(一次取一个报文)和实际取到的报文数量。
[0155]S22调度核以所述设定周期(此处为Is)为周期,从所述处理核读取所记录的如下内容:所述处理核在最近时间窗口内尝试从收包排序队列中获取一个IP数据报文的次数X与实际取到的IP数据报文的数量Y;所述调度核计算Y与X的比值,作为所述处理核当前的负载率;
[0156]S23根据处理核的负载率是否超过阈值,判断处理核当前的负载状态是过载还是空闲。
[0?57] S24判断负载表中记录的处理核的负载状态是否与当前判断出的该处理核的负载状态一致,如果不一致则将当前处理核根据优先级取包的方式置反(即将排序队列优先级从高至低的收包顺序置为从低至高的收包顺序,反之亦然),并将处理核当前判断出的负载状态记录到负载表中。
[0158]需要说明的是,在上述各实施例中,SA是在收包核执行收包过程中根据IP数据报文中携带的五元组信息从SADB中查找得到,之后该SA连同对应的IP数据报文一起被存储在队列中,但是本领域普通技术人员应理解,SA只要在处理核对IP数据报文进行重构处理时能够被获取到即可。并且,在本发明上述示例中,由多个处理核执行对排序后的IP数据报文的重构处理操作,其实该处理操作也可以由CCK中的多个引擎执行,上述示例是考虑到CCK负担过重,所以将重构处理操作交由处理核执行,本发明实施例对此不作具体限定。
[0159]图9为本发明实施例提供的报文处理方法中根据负载状态轮询排序队列的流程示意图。如图9所示,本实施例提供的报文处理装置,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,其特征在于,该装置包括:第一处理模块91和第二处理模块92。其中,
[0160]第一处理模块91,用于将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;
[0161]第二处理模块92,用于将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。
[0162]在本实施例中,将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理;接着,将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。实现了对IP数据报文的排序,以及根据该排序对各所述IP数据报文进行处理,从而保证了 IP数据报文处理的有序性。
[0163]在上述实施例基础上,所述第一处理模块91,具体用于将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序;
[0164]所述第一处理模块,具体用于将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进行排序。
[0165]进一步的,在上述实施例基础上,所述第一处理模块91,具体用于根据所述IP数据报文中携带的用于标识主机对该报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。
[0166]在本实施例中,实现了对IP数据报文的排序,以及根据该排序对各所述IP数据报文进行处理,从而保证了 IP数据报文处理的有序性。
[0167]虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
【主权项】
1.一种报文处理方法,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,其特征在于,该方法包括: 将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理; 将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。2.根据权利要求1所述的方法,其特征在于,所述IP数据报文是由主机发送给网卡的; 将多个网卡通过DPDK发送的各IP数据报文进行排序,包括: 将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进彳丁排序; 将所述CCK发出的对各所述IP数据报文处理得到的各IPSec报文进行排序,包括: 将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进行排序。3.根据权利要求2所述的方法,其特征在于,所述将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序,包括: 根据所述IP数据报文中携带的用于标识主机对所述IP数据报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述数据处理系统包括:至少一个收包核和至少一个收包排序核; 在所述将多个网卡通过所述DPDK发送的各所述IP数据报文进行排序之前,还包括: 所述收包核接收所管理的多个网卡通过DPDK发送的各IP数据报文,将所述IP数据报文存储至所属的收包流队列中; 所述将多个网卡通过DPDK发送的各IP数据报文进行排序,包括: 所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列。5.根据权利要求4所述的方法,其特征在于,所述方法还包括: 所述收包核读取所接收的所述IP数据报文携带的五元组信息中的目标信息; 所述收包核根据预先建立的IP数据报文携带的五元组信息中的目标信息与收包流队列之间的对应关系,确定与读取到的目标信息对应的收包流队列; 所述收包核将所确定的收包流队列作为所接收的IP数据报文所属的收包流队列; 其中,目标信息为五元组信息中的至少一项信息,不同的目标信息对应不同的收包流队列。6.根据权利要求4所述的方法,其特征在于,所述数据处理系统还包括至少一个处理核; 在所述收包排序核将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列之后,还包括: 所述处理核从各收包排序队列中获取IP数据报文,并对所获取的所述IP数据报文做如下重构处理:重构报文头,并向报文中添加堆栈指针包头,该包头包括根据报文对应的SA计算的一个序列号,并依据所述SA构建所述CCK对报文进行加解密所需的信息; 所述将排序后的各IP数据报文发送至所述CCK进行处理,包括: 所述处理核将对获取的各IP数据报文的重构结果发送至所述CCK进行处理。7.根据权利要求6所述的方法,其特征在于,所述处理核从各收包排序队列中获取IP数据报文,包括: 所述处理核按照对各收包排序队列的轮询顺序,遍历各收包排序队列从中获取IP数据报文。8.根据权利要求7所述的方法,其特征在于,所述数据处理系统还包括调度核; 所述方法还包括: 所述调度核根据收包排序队列中的IP数据报文数量,动态地调整各收包排序队列的优先级; 所述调度核依据各收包排序队列当前优先级的高低以及所述处理核当前的轮询方式,得到所述处理核当前对各收包排序队列的轮询顺序,所述轮询方式为优先级从高到低或者从低到高的方式; 其中,IP数据报文数量越多,收包排序队列的优先级越高。9.根据权利要求8所述的方法,其特征在于,所述方法还包括: 所述调度核动态地计算所述处理核的负载状态,所述负载状态为过载或空闲; 所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式。10.根据权利要求9所述的方法,其特征在于,所述调度核动态地计算所述处理核的负载状态,包括: 所述调度核从所述处理核读取所记录的如下内容:所述处理核在最近时间窗口内尝试从收包排序队列中获取一个IP数据报文的次数X与实际取到的IP数据报文的数量Y; 所述调度核计算Y与X的比值,作为所述处理核当前的负载率; 如果所述负载率超过设定阈值,则所述调度核判断所述处理核当前的负载状态为过载;否则,负载状态为为空闲。11.根据权利要求9所述的方法,其特征在于,所述调度核依据所述处理核的负载状态确定所述处理核的轮询方式,包括: 如果本次计算的所述处理核的负载状态与最近一次计算的所述处理核的负载状态不一致,则所述调度核将所述处理核的轮询方式更新为与所述处理核最近一次的轮询方式相反的方式。12.根据权利要求4所述的方法,其特征在于,所述收包排序核对所管理的收包流队列中的IP数据报文进行排序,将所管理的收包流队列中的IP数据报文按照排序结果顺序存储至收包排序队列,包括: 按照设定周期,所述收包排序核从所管理的收包流队列中取出η个IP数据报文,将该η个IP数据报文和与所管理的收包流队列对应的收包排序队列中已经存在的m个IP数据报文一起排序,按照排序结果使用插入排序法将所述η个IP数据报文插入至所述收包排序队列中,其中所述η和m均为大于O的整数。13.根据权利要求6所述的方法,其特征在于,所述数据处理系统还包括取包核和排序发包核; 在将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序之前,还包括: 所述取包核接收所述CCK发出的对各IP数据报文的重构结果处理得到的各IPSec报文,将所述IPSec报文存储至所属的发包流队列中; 将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡,包括: 所述排序发包核对所管理的发包流队列中的IPSec报文进行排序,按照排序结果顺序处理所管理的发包流队列中的各IPSec报文,其中所述处理操作包括按照所述IPSec报文中的目的IP查找路由,通过DPDK从相应的网卡发出。14.一种报文处理装置,应用于包含有数据平面开发工具集DPDK和带有加解密功能的高性能处理芯片CCK的数据处理系统,其特征在于,该装置包括: 第一处理模块,用于将多个网卡通过DPDK发送的各IP数据报文进行排序,并将排序后的各IP数据报文发送至所述CCK进行处理; 第二处理模块,用于将所述CCK发出的对各IP数据报文处理得到的各IPSec报文进行排序,并将排序后的各IPSec报文通过DPDK发送至所述多个网卡。15.根据权利要求14所述的装置,其特征在于,所述第一处理模块,具体用于将多个网卡通过DPDK发送的各IP数据报文,按照所述主机对所述IP数据报文的实际发送顺序进行排序; 所述第一处理模块,具体用于将所述各IPSec报文,按照主机对所述IPSec报文对应的IP数据报文的实际发送顺序进行排序。16.根据权利要求15所述的装置,其特征在于,所述第一处理模块,具体用于根据所述IP数据报文中携带的用于标识主机对所述IP数据报文的实际发送顺序的标识字段,将所述多个网卡通过所述DPDK发送的各IP数据报文进行排序,其中所述标识字段的数值越大,所述IP数据报文的排序越靠后。
【文档编号】G06F9/50GK105975433SQ201610513945
【公开日】2016年9月28日
【申请日】2016年6月30日
【发明人】刘胜旺
【申请人】瑞斯康达科技发展股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1