报文转发
相关申请的交叉引用
本专利申请要求于2015年12月30日提交的、申请号为201511019401.2、发明名称为“一种报文转发方法及装置”的中国专利申请的优先权,该申请的全文以引用的方式并入本文中。
背景技术
在SMP(Symmetric Multi-Processing,对称多处理)系统中,多个处理核(core)通过共享系统总线访问内存可能会冲突。因此,提出了一种可以采用NUMA(Non-Uniform Memory Architecture,非统一内存架构)模式的NFV(Network Function Virtualization,网络功能虚拟化)设备。采用NUMA模式的NFV设备可以包括多个NUMA节点,即NUMA-NODE,每个节点可被分配存储空间,例如该节点的本地内存。每个NUMA节点可包括多个处理核,这些处理核可被配置为控制核、接收核、转发核,并且转发核分布于多个NUMA节点内,接收核可以将报文转发至任何一个NUMA节点中的转发核。
接收核接收报文时,可使用该接收核所在的NUMA节点的本地内存,但是,当该报文要被转发至另一个NUMA节点中的转发核时,转发核对报文的读取将进行对非本地内存的访问,例如进行跨内存访问。
附图说明
图1是本公开一个例子中的NFV设备的结构示意图。
图2是本公开一个例子中的一种报文转发方法的流程图。
图3是本公开一个例子中的报文转发设备的硬件结构图。
具体实施方式
下面将结合附图,对本公开示例中的技术方案进行清楚、完整地描述,显然,所描述的示例仅仅是本公开一部分示例,而不是全部的示例。基于本公开的示例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他示例,都属于本公开保护的范围。
首先,对NUMA模式的系统结构进行简单的描述。在NUMA模式的系统结构中,多个处理核可分别属于不同的NUMA节点。每个NUMA节点都有自己的本地内存。
在NUMA节点周边可布置多个NIC(Network Interface Card,网卡),这些NIC都可以与NUMA节点关联。一个NIC接收的网络报文可以通过其关联的NUMA节点进行转发。
例如,在一种NUMA模式的系统结构中有12个处理核,这12个处理核分属于两个NUMA节点(NUMA节点A,NUMA节点B)。其中,有两个处理核可作为接收核,剩余的处理核中除了控制核都是转发核。其中,这两个接收核都分布在一个NUMA节点A中,转发核的一部分可分布在NUMA节点A中,另一部分可分布在另一NUMA节点B中。由于各个转发核功能上是平等的,所以接收核接收到的报文可以被发送至转发核中的任何一个。例如,当NUMA节点A上的接收核从网卡接收报文时,该接收核可将报文存储在NUMA节点A的本地内存中。而当该报文要被转发至NUMA节点B的转发核时,NUMA节点B中的转发核可将报文从NUMA节点A的本地内存中取走,使用的不是NUMA节点B的本地内存,这造成了跨NUMA节点访问即跨内存访问的问题,从而降低转发效率。随着NUMA节点数量的增加,跨内存访问的出现概率也相应变大,严重降低NFV设备的吞吐性能。
为了尽可能的减少跨内存访问的出现,提高转发效率,本公开示例提供了一种报文转发方法。根据该方法,在转发报文的过程中,接收核和转发核可被限定在一个NUMA节点中,使得报文的接收和转发均可利用本地内存进行。在以上例子中,如果NUMA节点A中的接收核接收的报文是发送至该NUMA节点A中的转发核,那么这两个处理核都使用本地内存就可以完成对报文的转发。基于此,本公开的报文转发方法将重新配置各个处理核在报文转发过程中的角色,以实现在同一个NUMA节点完成报文转发。
初始化配置
该初始化配置可包括对NFV设备中的各个NUMA节点、以及NUMA节点中的各个处理核进行重新设置的操作,该初始化配置可以由NFV设备中的一个指定的处理核执行。例如,可对一个NFV设备中所有的处理核统一编号,可以将编号最小或最大的作为该指定的处理核执行初始化配置,在初始化配置过程中,该指定的处理核会将自身配置为控制核。例如,如图1所示,示例了两个NUMA节点,各个NUMA节点之间可以通过QPI(QuickPath Interconnect,快速通道互联)总线20连接。在每个NUMA节点中都具有本地内存(本地内存13,14)。图1中共有12个处理核,编号为0至11,假设第0个处理核为控制核。
该初始化配置包括如下几个方面:
转发组的创建:
假设某个NFV设备采用了NUMA模式,包括多个NUMA节点,且每个NUMA节点中可包括多个处理核。可以遍历所有的NUMA节点,为每个NUMA节点创建一个对应的转发组(Forwarding Group),该转发组可包括该NUMA节点中的所有core。这些core可在转发组的初始化过程中被分别配置为接收核或转发核。在转发组的初始化过程完毕后,可形成接收核、转发核和转发组的对应关系,例如,该对应关系可以通过一个core角色表来表示,该core角色表定义了各个core的角色以及与所属的转发组之间的对应关系。Core角色表可被保存在内存中,并在转发报文时被调用。需要说明的是,接收核、转发核和转发组的对应关系并不仅限于上述的core角色表,任何能够表明上述对应关系的方式均可。
通过上述方式创建的各个转发组能够独立完成对报文的转发,即通过该转发组内部的处理核就可以实现报文转发,不需要使用其他转发组(即其他NUMA节点)中的处理核。请结合参见图1,可以为两个NUMA节点分别创建一个转发组,即转发组21和转发组22。
转发组内的处理核的配置:
对于每个转发组,遍历该转发组中的所有处理核,为每个处理核配置角色,这里的角色可以是接收核或转发核。例如,每个转发组可以配置一个接收核,该转发组内的其余处理核配置为转发核。当转发组中的处理核的数量较多时,也可以配置两个或更多接收核,以减轻报文转发的压力。控制核属于其中一个转发组,比如,在转发组21中还包括控制核。
对转发组中的处理核角色的设定
例如,上述指定的处理核将自身配置为控制核。
在一个示例中,如果转发组不包括控制核,则控制核可按照预设规则将该转发组中的至少一个处理核配置为接收核,并将剩余的处理核均配置为转发核。例如,该控制核可以将转发组中编号最小或最大的处理核设定为接收核,将其余处理核均设定为转发核。结合图1所示,在转发组22中,不包括控制核control,则控制核control可以将转发组22中的六个core中编号最小的core设定为接收核Data-Rx1,将其余core均设定为转发核,共五个转发核Data-Fwd4至Data-Fwd8。
如果转发组包括控制核,则控制核可按照预设规则将转发组中除自身以外的至少一个处理核配置为接收核,并将剩余的处理核均配置为转发核。假设首个NUMA节点包含控制核,则可将该转发组中除去控制核之外的所有处理核中编号最小或最大的处理核设定为接收核,
并将控制核和接收核之外的其余处理核均设定为转发核。结合图1所示,在转发组21的六个core中,编号最小的core为控制核control,在control之外的另外五个core中,可以将编号最小的core设定为接收核Data-Rx0,将其余core均设定为转发核,共四个转发核Data-Fwd0至Data-Fwd3。
经过上述配置,在转发组21中,可以包括:一个控制核、一个接收核Data-Rx0、四个转发核Data-Fwd0至Data-Fwd3。在转发组22中,可以包括:一个接收核Data-Rx1、五个转发核Data-Fwd4至Data-Fwd8。可以看到,在本例子中,每个转发组内都包括接收核和转发核。这样,接收核在接收到报文后,可以只将报文发送至所属的转发组内的转发核进行处理。
以一个包括四个NUMA节点,且每个NUMA节点中的处理核的数量为六个的NFV设备为例。表1示例了该设备的NUMA资源分布。
表1 NUMA资源分布
NUMA-NODE 1 |
Core0 |
Core1 |
Core2 |
Core3 |
Core4 |
Core5 |
NUMA-NODE 2 |
Core6 |
Core7 |
Core8 |
Core9 |
Core10 |
Core11 |
NUMA-NODE 3 |
Core12 |
Core13 |
Core14 |
Core15 |
Core16 |
Core17 |
NUMA-NODE 4 |
Core18 |
Core19 |
Core20 |
Core21 |
Core22 |
Core23 |
相应地,可以为该NFV设备的各个NUMA节点创建转发组以及对每个转发组中的处理核进行配置。如表2所示,可包括四个转发组,每个转发组有一个接收核。
表2 转发组的创建
Forwarding Group 0 |
Control |
Data-Rx0 |
Data-Fwd0 |
Data-Fwd1 |
Data-Fwd2 |
Data-Fwd3 |
Forwarding Group 1 |
Data-Rx1 |
Data-Fwd4 |
Data-Fwd5 |
Data-Fwd6 |
Data-Fwd7 |
Data-Fwd8 |
Forwarding Group 2 |
Data-Rx2 |
Data-Fwd9 |
Data-Fwd10 |
Data-Fwd11 |
Data-Fwd12 |
Data-Fwd13 |
Forwarding Group 3 |
Data-Rx3 |
Data-Fwd14 |
Data-Fwd15 |
Data-Fwd16 |
Data-Fwd17 |
Data-Fwd18 |
转发组对应的入接口设定:
在创建了转发组之后,还可为每个转发组配置对应的入接口,转发组可转发从该入接口接收的报文。
在一个例子中,提供了一种为转发组分配接口的方式。例如,网卡通常与某个socket关
联,该socket对应一个NUMA节点。因此,可以识别网卡所关联的NUMA节点,并将该网卡的接口分配给该NUMA节点的转发组。如果某一个接口接收到了报文,则与该接口对应的转发组中的接收核可从该接口读取到报文,该接口可以称为入接口。
以图1为例,在转发组21和转发组22的周边,设置有NIC1至NIC8这八个网卡。可以将NIC2的接口分配给转发组21,转发组21中的接收核Data-Rx0可从该接口读取NIC2接收的报文进行转发。可以将NIC3的接口分配给转发组22,转发组22中的接收核Data-Rx1可从该接口读取NIC3接收的报文进行转发。这种分配接口的方式,可以使得网卡与转发组之间的传输距离较短,降低损耗。
在一个例子中,提供的另外一种为转发组分配接口的方式。可以使用命令行方式输入接口配置命令,通过该命令指定将某个网卡的接口分配给某个NUMA节点对应的转发组。这种方式有利于动态的调整网卡接口与转发组的对应关系。比如,当其中一个转发组的报文流量较大,负载较重,可以将该转发组对应的一部分接口分配给其他的转发组。即可通过接口配置命令从转发组对应的接口中删除部分接口,同时可将所删除的部分接口分配给其他转发组,建立接口与转发组的新的对应关系。
转发组与接口的对应关系,可以是控制核在为转发组分配对应接口时,记录在内存中;当后续转发报文时,接收核可以通过该存储的对应关系限定的这些接口读取网卡接收的报文。
经过上述的初始化配置,已经为NFV设备中的各个NUMA节点创建了对应的转发组,并且对每个转发组的处理核设定了角色,以及为每个转发组配置了对应的入接口。接着,NFV设备中的各个转发组将可以开始进行报文的转发。各个转发组可以是独立的,各自执行报文的转发,从而尽可能的减少跨内存访问,也使得该NFV设备的转发报文的吞吐性能得到提高。
以下结合图2所示,描述了根据本公开的示例的一种报文转发方法,该报文转发方法可以包括:
在步骤201中,转发组中的接收核由从入接口读取报文,该入接口是接收核所在的转发组对应的接口。
以转发组21为例,结合图1所示的箭头线表示的报文转发路径,该转发组21中的接收核Data-Rx0可通过NIC2的接口读取报文。
本例子中,一个转发组所对应的入接口的数量可以是多个,比如三个接口、八个接口等。转发组中的接收核可以遍历该转发组对应的所有入接口,当入接口接收到报文时可读取报文。
在步骤202中,该转发组中的接收核可将读取的报文发送至该转发组中的转发核。
本公开中可在接收核所属的转发组中选择转发核。在步骤201中读取到报文的接收核可通过查找内存中记录的接收核、转发核和转发组的对应关系来确定该接收核所属的转发组中的转发核。然后可在所确定的转发核内选择要进行报文转发的转发核。例如,转发组21中的接收核Data-Rx0在读取到报文后,可将报文发送至转发核Data-Fwd2。在转发组内选择转发核可以采用以下两种方式。一种是逐流选择,即接收核可将某个固定五元组的报文发送到本转发组内的一个固定转发核。一种是逐包选择,即可遍历转发组内的转发核以进行报文转发。例如,可将报文1发送给转发核1,报文2发送给转发核2,报文3发送给转发核3,报文4发送给转发核4,报文5又可发送给转发核1,报文6发送给转发核2,等等。逐包选择可采用这种依次轮转的方式。当然,选择转发核的方式并不限于上述两种,还可以根据其他策略来选择,例如根据转发核的优先级来选择等等。
在步骤203中,该转发核可将报文发送至对应的出接口。
转发核在接收到报文后,可以根据转发规则将报文继续转发(例如,根据报文的目的地址选择对应的出接口),从出接口将报文发出。如图1所示,Data-Fwd2在接收到Data-Rx0发送的报文后,可以将报文发往NIC8。
以转发组22为例,该转发组22同样可按照上述的步骤201至步骤203所示的转发方式进行报文的转发。如图1中所示,接收核Data-Rx1可读取NIC3接收到的报文,并将报文发送至与该Data-Rx1同处于转发组22的转发核Data-Fwd7,再由Data-Fwd7将报文从NIC6发出。
对于使用NUMA系统架构的NFV设备而言,将该设备的处理器资源划分为多个高效、相对独立的转发组,避免了跨不同NUMA节点导致的消耗,使得系统整体吞吐能力得到了很大的提升。此外,本公开示例中的转发组,可以是虚拟机或者裸金属形态的NFV产品。
本公开还提供了一种报文转发设备,该报文转发设备可以采用如图3所示的硬件结构。与图1相比,图3更加清楚地示出了报文转发设备中各个硬件组件之间的连接关系。如图3所示,该报文转发设备中除了可包括接收核、转发核以外,还可以包括存储有用于报文转发控制逻辑的机器可读指令的非易失性存储介质301。图3所示的各个部件可以通过内部总线302相互通信。同属一个转发组的多个处理核可对应一个NUMA节点。其中,所述接收核和转发核可执行所述机器可读指令来实现如下操作。所述接收核从入接口读取报文,所述入接口是所述接收核所在的转发组对应的接口;所述接收核将读取的所述报文发送至所述转发组中的转发核;所述转发核将所述报文发送至对应的出接口。
该报文转发设备可以通过控制核进行初始化配置,为报文转发设备中的每个NUMA节点创建对应的转发组,并将转发组中的各个处理核配置为接收核、转发核或者控制核;还可以为各个转发组分配对应的接口,以使得转发组中的接收核从该接口读取报文。
在初始化配置完成后,该报文转发设备中就已经形成了多个独立的转发组,各自独立的执行报文的转发处理,而在转发报文时,每个转发组都可以按照上述本公开的报文转发方法进行报文的转发处理。例如,接收核在接收到报文时,将报文发送至同一转发组中的转发核,从而尽可能的减少跨内存访问,也使得该报文转发设备的转发报文的吞吐性能得到提高。
在本公开使用的术语仅仅是出于描述特定示例的目的,而非限制本公开。本公开和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
以上所描述的示例仅仅是本公开一部分示例,而不是全部的示例。基于本公开的示例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他示例,都属于本公开保护的范围。
以上所述仅为本公开的较佳示例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。