发明内容
有鉴于此,本发明提供了一种报文处理方法,该方法应用于多核网络设备上,该方法包括:
在接收到用户报文后,从所述用户报文中提取用户标识,根据预先配置的用户标识与硬件队列的对应关系,将所述用户报文存储到对应的硬件队列中;
根据预先配置的用户标识与CPU核的对应关系,将所述用户标识对应的硬件队列中的用户报文发送给对应的CPU核进行处理。
本发明还提供了一种报文处理装置,该装置应用于多核网络设备上,该装置包括:
报文存储单元,用于在接收到用户报文后,从所述用户报文中提取用户标识,根据预先配置的用户标识与硬件队列的对应关系,将所述用户报文存储到对应的硬件队列中;
报文处理单元,用于根据预先配置的用户标识与CPU核的对应关系,将所述用户标识对应的硬件队列中的用户报文发送给对应的CPU核进行处理。
本发明为每一个用户配置了对应的硬件资源,在接收到用户报文后,根据报文中携带的用户标识,选择对应的硬件资源进行处理,避免由于某个用户报文过多,独占所有硬件资源,而使得其他用户无法正常接收报文进行处理。
具体实施方式
以下结合附图对本发明进行详细说明。
本发明提供一种报文处理装置,以下以软件实现为例进行说明,但是本发明并不排除诸如硬件或者逻辑器件等其他实现方式。如图1所示,该装置运行的硬件环境包括CPU、内存、非易失性存储器以及其他硬件。该装置作为一个逻辑层面的虚拟装置,其通过CPU来运行。该装置包括报文存储单元和报文处理单元。请参考图2,该装置的使用和运行过程包括以下步骤:
步骤101,报文存储单元在接收到用户报文后,从所述用户报文中提取用户标识,根据预先配置的用户标识与硬件队列的对应关系,将所述用户报文存储到对应的硬件队列中;
步骤102,报文处理单元根据预先配置的用户标识与CPU核的对应关系,将所述用户标识对应的硬件队列中的用户报文发送给对应的CPU核进行处理。
为了满足大流量、高速的网络通讯要求,普遍采用多核网络设备进行报文处理。对于不同用户的访问需求,现有技术已经实现了在操作系统层面上的隔离,即为不同的用户分配其对应的CPU核,只处理本用户的报文,避免了由于某一个用户报文过多,而占用大量CPU核,影响其他用户对CPU核的使用。但现有技术中并未解决其他硬件资源的占用问题。在将用户报文送往CPU核处理之前,不同用户的报文仍然共享其他硬件资源。若某一用户报文过多,占用了整个硬件资源,则即使其他用户的CPU核空闲,也无法接收报文进行处理。
本发明通过对硬件资源进行配置,提高用户报文的处理效率。在多核网络设备中通常包括网络业务引擎芯片,图3所示为网络业务引擎芯片的基本结构,该类型芯片为多核处理器芯片,包括多核CPU、硬件阵列以及网络接口。本发明根据从网络接口上送的用户报文中携带的不同用户标识,选择对应的硬件阵列和CPU核进行报文处理。下面结合一种具体的芯片架构,对本发明的报文处理过程进行详细说明。
如图4所示,某一网络业务引擎芯片包括如图3所示的多核CPU、硬件阵列以及网络接口,其中,硬件阵列包括报文接收模块、硬件调度模块以及CPU调度模块。报文接收模块主要用于对从网络接口上送的用户报文进行字段提取和解析分类,并根据解析结果向硬件调度模块申请内存指针,将硬件调度模块返回的内存指针发送给CPU调度模块,由CPU调度模块将内存指针发送给指定的CPU核,CPU核根据该内存指针,从内存中读取用户报文进行处理。
本发明通过上述模块之间的配合,实现不同用户报文利用各自的硬件通道进行处理。首先,不同的用户报文在通过物理网口上送时,由以太网驱动为用户报文添加对应的用户标识。本发明采用私有串行总线互联协议HIGIG报文作为用户报文,以太网驱动在HIGIG报文的模块标识或端口标识字段添加用户标识。例如,某网络设备有3个物理网口,且3个物理网口分别分配给3个用户,每一个网口在接收到用户报文后,将用户标识添加到用户报文的端口标识字段。
interface1:dest port=1
interface2:dest port=2
interface3:dest port=3
上述为3个网口对用户报文的处理过程,以网口1(interface1:dest port=1)为例,“interface1”表示网络接口1;“dest port”表示用户报文的端口标识字段,“1”表示用户1的用户标识。
当添加了用户标识的报文上送到硬件阵列的报文接收模块时,报文接收模块对用户报文头进行逐层解析。报文接收模块不仅可以解析TCP/IP协议栈的标准七层报文头,还可以解析HIGIG、VLAN(Virtual Local Area Network,
虚拟局域网)以及根据需求在报文起始位置添加的任意长度的自定义报文头。本发明中报文接收模块接收到HIGIG报文后,对该协议报文的报文头进行逐层解析,从报文头中提取字段与报文接收模块内部的存储匹配子模块中的表项进行匹配。每一个表项表示一个用户标识与报文分类结果的对应关系。该对应关系需要预先配置,具体配置过程如下:
PCAM Entry1:term=higig,value=destport=1,style=1
PCAM Entry2:term=higig,value=destport=2,style=2
PCAM Entry3:term=higig,value=destport=3,style=3
上述提供3个用户标识与报文分类结果对应关系的配置示例,以第一个表项“PCAM Entry1:term=higig,value=destport=1,style=1
”为例阐述该表项含义。“PCAM Entry1”表示存储匹配子模块1的表项;“term=higig”表示可以处理的报文格式为HIGIG;“value=destport=1”表示对HIGIG报文头的destport字段为1的用户报文进行处理,即对用户1的报文进行处理;“style”表示报文的类型标记。本发明基于用户进行报文分类,因此,对3个用户的报文分类style分别标记为1、2、3,以下简称style1、style2以及style3。
当报文接收模块提取到HIGIG报文的端口标识字段时,若该字段与某一个存储匹配子模块中的预设表项匹配,则按照预先配置的用户标识与硬件队列的对应关系,将用户报文存储到对应的硬件阵列中。其中,用户标识与硬件队列的对应关系主要是指报文接收模块根据分类结果style为每一个用户预先分配的硬件调度模块的指针队列和CPU调度模块的缓存队列,具体配置过程如下。
style1:AURA=1,Group=1
style2:AURA=2,Group=2
style3:AURA=3,Group=3
上述指令是报文接收模块为3个用户配置的硬件队列,其中,AURA是硬件调度模块的指针队列标识,3个用户的AURA分别标记为1、2、3,以下简称AURA1、AURA2以及AURA3;Group是CPU调度模块的缓存队列标识,3个用户的Group分别标记为1、2、3,以下简称Group1、Group2以及Group3。
报文接收模块接收到用户报文后,根据用户标识向其对应的指针队列申请指针,例如,若接收到的报文为用户1的报文,则向硬件调度模块中的AURA1指针队列申请指针。若申请成功,则硬件调度模块将内存指针返回给报文接收模块,报文接收模块将用户报文保存到该指针指向的内存中,每一个内存指针对应一个用户报文。同时,报文接收模块将该指针发送给CPU调度模块,CPU调度模块根据报文接收模块的配置将内存指针保存到对应的Group中,例如,用户1的报文的内存指针送入CPU调度模块的Group1中进行缓存,以便在后续处理中将内存指针上送指定的CPU核进行处理。
接收到的用户报文具体由哪几个CPU核处理,是由预先配置的用户标识与CPU核的对应关系决定的,为每一个用户指定处理其报文的专用CPU核。对CPU核的具体配置过程如下。
Group1:cpu1、cpu2
Group2:cpu3、cpu4
Group3:cpu5、cpu6
上述指令为CPU调度模块为每一个Group配置的CPU核,例如,Group1为用户1的缓存队列,用户1的报文上送到cpu1和cpu2进行处理。用户报文上送CPU的过程具体为:CPU调度模块将Group1中的内存指针上送给cpu1或cpu2,cpu1或cpu2从内存中读取用户报文进行处理。
由于每一个用户对网络的使用情况不尽相同,为了最大限度提高报文处理效率,在配置用户标识与硬件队列的对应关系时,根据用户的数据流量设置对应硬件队列的长度。假设用户1的数据流量>用户2的数据流量>用户3的数据流量,则可以按照各个用户数据流量比例(假设为4:2:1)分配指针队列长度。
AURA1:4096
AURA2:2048
AURA3:1024
设置的指针队列长度越大,则为对应用户分配的存储空间越多,可以处理的数据量越多。通过合理配置,可最大程度发挥网络设备的报文处理能力。
本发明通过为每一个用户配置了专用的报文处理通道,避免由于某个用户报文过多,独占所有硬件资源,而使得其他用户无法正常接收报文进行处理。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。