核间负载分发装置及方法
技术领域
本发明涉及负载均衡技术领域,具体涉及一种核间负载分发装置及方法。
背景技术
在针对网络应用的多核处理器***中,每个核一般都基于报文流处理业务,定义一条报文流一般可采用网络协议的五元组如:源因特网协议(IP,Internet Protocol)地址、目的IP地址、源端口号、目的端口号、协议类型等。为了避免多核竞争、报文乱序等问题,一般在设计时将每一条报文流只分配到一个固定核上去处理,而不能将同一条报文流分到多个不同核上处理,否则会给软件处理带来很多额外负担,且难于实现。
多核处理器的各个核上处理的负载需要尽量均衡,才能充分发挥多核处理器的***整体性能优势。在当前越来越复杂的网络应用中,多核处理器的每个核在处理各个不同的报文流时,报文流占用每个核的处理时间也大不相同,进而造成各个核间的负载不易均衡分配,这是当前针对网络应用的多核处理器***中面临的一个普遍问题。
图1为网络设备处理报文流的实例示意图,该实例是一种基于多核处理器和逻辑应用相结合的设计方案,如图1所示,现场可编程逻辑门阵列(FPGA,Field Programmable Gate Array)逻辑从上行口接收报文,当FPGA逻辑中的报文流识别单元识别出一条报文流后,发送给输出判别单元,输出判别单元根据业务需要将报文流直接从物理出端口发送出去,或者送往多核处理器继续处理。送到多核处理器上的报文流需要在各个核上均匀分配负载,且保证特殊定义的报文流只分配到一个固定的核处理。
如图1所示,目前,一般针对网络应用的多核处理器片***(SOC,Systemof Chip)上都会集成一个简单的硬件负载分发单元,根据配置的负载分发规则来实现核间的负载均衡分配。
负载分发规则主要有以下几种:
规则1、配置入端口和各个核之间的映射关系,根据报文的入端口以及该映射关系,将报文送到相应的核上处理。
规则2、配置网络协议的特征值如:五元组、用户自定义字段等与各个核之间的映射关系,根据报文中携带的网络协议特征值以及该映射关系,将报文送到相应的核上处理。
上述负载分发机制有一定局限性,例如:从网络设备的各个入端口进入的报文量通常是不同的,同样,网络设备收到的具有不同网络协议特征的报文的数量通常也是不同的,因此采用规则1、2并不能保证负载被均匀分配到各个核上。另外,规则1不能以报文流形式为负载将报文送到固定的核上处理,这也给基于报文流处理业务的多核处理器带来了额外负担。
发明内容
本发明提供一种核间负载分发装置及方法,以提高多核处理器上的核间负载均衡分配效率。
本发明的技术方案是这样实现的:
一种核间负载分发装置,该装置包括:
配置单元,将配置的核标识、负载因子及权值的对应关系发送给核间负载分发单元;
报文处理单元,将来自物理入端口、且发往多核处理器的报文发送给核间负载分发单元;
核间负载分发单元,根据各个核的各负载因子的值,以及配置单元发来的核标识、负载因子及权值的对应关系,计算每个核的负载指数;接收报文处理单元发来的报文,选择负载指数最小的核,将报文发送给所选择的核。
所述报文处理单元包括:
报文流识别单元,接收来自物理入端口的报文,识别出该报文所属的流,将报文及流标识发送给输出判别单元:
输出判别单元,接收报文流识别单元发来的报文及流标识,判断该报文应从物理出端口发送出去还是发往多核处理器,若是前者,则将报文从物理出端口发送出去;若是后者,则将报文及流标识发送给核间负载分发单元。
所述核间负载分发单元包括:负载指数计算单元、流接收核记录单元和报文发送单元,
负载指数计算单元,根据各个核的各负载因子的值,以及配置单元发来的核标识、负载因子及权值的对应关系,计算每个核的负载指数,记录负载指数最小的核标识;
流接收核记录单元,记录流标识与该流所发往的核标识的对应关系;
报文发送单元,接收输出判别单元发来的报文及流标识,向流接收核记录单元查询该流标识,若未查询到,则从负载指数计算单元获取负载指数最小的核标识,将报文发给该核,并在流接收核记录单元中记录流标识与该核标识的对应关系;若查询到,将报文发送给与所述流标识对应的核标识所指向的核。
所述核间负载分发单元进一步包括:用于统计各个核的各个负载因子的值的子单元。
该装置位于多核处理器外部的FPGA逻辑内、或位于多核处理器SOC内、或位于多核处理器外部的专用芯片内。
一种核间负载分发方法,该方法包括:
根据多核处理器中各个核的一个或以上负载因子的值及负载因子的权值,计算各个核的负载指数,接收到发往多核处理器的报文,选择负载指数最小的核,将报文发给所选择的核。
所述接收到发往多核处理器的报文进一步包括:
确定该报文所属的流,
所述选择负载指数最小的核包括:判断该报文是否为所属流中的第一条报文,若是,选择负载指数最小的核,将该核作为报文所应发往的核,并记录流标识与所选择的核标识的对应关系;否则,根据已记录的流标识与核标识的对应关系,确定报文所应发往的核。
所述计算每个核的负载指数包括:计算每个核的各个负载因子的值与该负载因子的权值的和,将该和值作为核的负载指数。
所述负载因子包括:报文总长度、报文总数、报文流总数、流量速率中的一种或任意组合。
当负载因子包括流量速率时,所述计算各个核的负载指数之前进一步包括:分别统计每秒钟内发往各个核的报文总数,将该报文总数作为各个核的流量速率。
当负载因子包括报文总长度、或报文总数、或报文流总数时,所述计算各个核的负载指数之前进一步包括:多核处理器启动时,初始化各个核的报文总长度、或报文总数、或报文流总数为0,
所述将报文发给所选择的核进一步包括:将发给该核的报文总长度、或报文总数、或报文流总数加入当前该核的报文总长度、或报文总数、或报文流总数,以得到的和值更新当前该核的报文总长度、或报文总数、或报文流总数,
且,在收到该核发来的已处理完报文总长度、或报文总数、或报文流总数后,将当前该核的报文总长度、或报文总数、或报文流总数减去该已处理完的报文总长度、或报文总数、或报文流总数,以得到的差值更新当前该核的报文总长度、或报文总数、或报文流总数。
所述计算每个核的负载指数为:每隔预定时长根据各个核最新的负载因子的值,计算一次各个核的负载指数;
或者为:检测到核的负载因子的值更改,则根据更改后的负载因子的值,重新计算并更新核的负载指数。
与现有技术相比,本发明根据多核处理器中各个核的一个或以上负载因子的值及负载因子的权值,计算各个核的负载指数,当接收到发往多核处理器的报文时,选择负载指数最小的核,将报文发给所选择的核,提高了多核处理器上各个核间的负载均衡分配效率,从而提升了多核处理器的整体性能。另外,本发明通过识别报文流,将同一报文流发送到同一核上处理,降低了基于报文流处理业务的多核处理器的负担。
附图说明
图1为现有的网络设备处理报文流的实例示意图;
图2为本发明实施例提供的核间负载分发装置的结构示意图;
图3为本发明实施例提供的在FPGA逻辑上设计核间负载分发功能的示意图;
图4为本发明实施例提供的核间负载分发的流程图;
图5为本发明实施例提供的计算核的负载指数的示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图2为本发明实施例提供的核间负载分发装置的结构示意图,如图2所示,其主要包括:配置单元21、报文流识别单元22、输出判别单元23和核间负载分发单元24,其中:
配置单元21:将配置的各个核的核标识、负载因子及权值的对应关系发送给核间负载分发单元24。
报文流识别单元22:接收物理入端口发来的报文,根据应用定义如:五元组识别出该报文所属的流,将报文及流标识发送给输出判别单元23。
输出判别单元23:接收报文流识别单元22发来的报文及流标识,根据业务需要判断应将该报文发往物理出端口还是多核处理器,若是前者,则将报文直接从物理出端口发送出去,若是后者,则将报文及流标识发送到核间负载分发单元24。
核间负载分发单元24可由负载指数计算单元241、流接收核记录单元242和报文发送单元243组成,各个单元的功能如下:
负载指数计算单元241:接收配置单元21发来的核标识、负载因子及权值的对应关系,根据每个核的各负载因子的值及该负载因子的权值,计算并保存每个核的负载指数,记录负载指数最小的核标识。
流接收核记录单元242:记录流标识与该流所发往的核标识的对应关系。
报文发送单元243:接收输出判别单元23发来的报文及流标识,向流接收核记录单元242查询该流标识,若未查询到,则从负载指数计算单元241获取负载指数最小的核标识,将该报文发送给该核标识指向的核,并在流接收核记录单元242中记录流标识与该核标识的对应关系;若查询到,将报文发送给与所述流标识对应的核标识所指向的核。
在实际应用中,核间负载分发单元24可进一步用于:统计各个核的各个负载因子的值。
负载因子可以是报文流总数、报文总长度、报文总数、流量速率等中的一种或任意组合。
核间负载分发单元24可通过以下方式获得各个核的各负载因子的值:
一、可根据每秒钟内发往各个核的报文总数,确定各个核的流量速率。
二、获得报文流总数、报文总长度、报文总数的方式相同,以报文总数为例,多核处理器启动时,核间负载分发单元24初始化各个核的报文总数为0,并在每次将报文发送给核的同时,将该核的报文总数加上本次发给该核的报文总数,并在接收到该核发来的已处理完的报文总数后,将该核的报文总数减去该已处理完的报文总数。此时,每个核要每隔预定时长向核间负载分发单元反馈一次在该时长内处理完的报文总数。
在实际应用中,可将报文流识别单元22和输出判别单元23统称为报文处理单元,且,若多核处理器不基于报文流处理业务,则核间负载分发装置可不包括报文流识别单元22,从物理入端口进入的报文可直接进入输出判别单元23;同时,核间负载分发单元24不必包括流接收核记录单元242,且,报文发送单元243在接收到输出判别单元23发来的报文后,直接从负载指数计算单元241获取负载指数最小的核标识,将该报文发送给该核标识指向的核。
本发明实施例提供的核间负载分发装置可直接设计在多核处理器SOC芯片内部,也可采用FPGA逻辑或专用芯片设计在多核处理器外部,也可采用多核处理器上的软件来实现。若核间负载分发装置设计在多核处理器外部,则需在核间负载分发装置和多核处理器上分别增加与对方通信的接口。
图3为本发明实施例提供的在FPGA逻辑上设计核间负载分发功能的示意图,如图3所示,FPGA逻辑上具有实现核间负载分发功能的配置单元21、报文流识别单元22、输出判别单元23和核间负载分发单元24,核间负载分发单元24与多核处理器的硬件负载分发单元31相连。核间负载分发单元24在选择出负载指数最小的核后,将报文和该核标识发送给硬件负载分发单元31,硬件负载分发单元31根据该核标识,将报文发送到对应的核上。
如图3所示,多核处理器的某个核,如:核0通过配置单元21配置各个核的负载因子及权值的对应关系。
图4为本发明实施例提供的实现核间负载分发的流程图,如图4所示,其具体步骤如下:
步骤41:为多核处理器的每个核配置计算负载指数所需的负载因子,并配置每个负载因子的权值。
负载因子可以是报文流总数、报文总长度、报文总数、流量速率等中的一种或任意组合。
核的流量速率可以每秒钟发往该核的报文数目表示。
负载因子及权值可根据多核处理器的实际应用灵活配置。以下给出三种典型应用下的配置:
一、多核处理器的功能只为转发,此时多核处理器不对报文作复杂处理,则可将报文总数设置为各个核的必选负载因子,将流量速率设置为可选负载因子。例如:若负载因子只包括报文总数,则其权值自然为1;若负载因子包括:报文总数和流量速率,则可将报文总数的权值设置为0.6,将流量速率的权值设置为0.4。
二、多核处理器的功能只为安全侦测,此时,多核处理器需分析报文,则可将报文总长度设置为各个核的必选负载因子,将报文总数、流量速率设置为可选负载因子。例如:若负载因子包括报文总长度和报文总数,则可将报文总长度的权值设置为0.6,将报文总数的权值设置为0.4。
三、若多核处理器的功能既包括安全侦测又包括转发,则可将报文总数、报文总长度都设置为各个核的必选负载因子,将流量速率设置为可选负载因子,且,若多核处理器的主要功能为安全侦测,则将报文总长度的权值设置得最大,若多核处理器的主要功能为转发,则将报文总数的权值设置得最大。
四、若多核处理器是基于报文流处理业务,则可将报文流总数设置为各个核的必选负载因子。
第四种情况可和前三种情况结合使用。
步骤42:统计各个核上的负载因子的值,并根据每个核的各负载因子的值及该负载因子的权值,计算得到每个核的负载指数。
可以每隔预定时长统计一次各个核的所有负载因子的值,并计算、更新各个核的负载指数;也可只在某个核的某个负载因子的值更改时,再计算、更新该核的负载指数。
核的负载指数等于核的各个负载因子的值乘以负载因子的权值后再相加后的值。如图5所示,核0的负载指数=核0的报文总长度×权值1+核0的报文流总数×权值2+核0的报文总数×权值3+核0的流量速率×权值4。
步骤43:接收到报文,根据报文中的应用信息如:五元组识别出该报文所属的流。
步骤44:根据记录的已接收的流标识与所发往的核标识的对应关系,判断该报文是否为所属流的第一条报文,若是,执行步骤45;否则,执行步骤46。
步骤45:选择负载指数最小的核,将报文发送到该核上处理,并记录该报文所属的流标识与该核标识的对应关系,本流程结束。
步骤46:根据记录的已接收的流标识与所发往的核标识的对应关系,确定该流应发往的核,将报文发送到该核上处理。
由于同一报文流必须发送到同一核上处理,因此,只需在收到流的第一条报文时,进行选择负载指数最小的核的动作,此后收到该流的报文时直接将报文发送给所选择的核即可。
若多核处理器不是基于报文流而只基于报文处理业务,则步骤43中可不进行识别报文流的动作,同时,步骤44~46中,可直接将报文发送到负载指数最小的核上处理。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。