一种多核处理器及报文处理方法与流程

文档序号:14879542发布日期:2018-07-07 09:22阅读:140来源:国知局

本发明涉及网络通信技术领域,尤其涉及一种多核处理器及报文处理方法。



背景技术:

多核处理器是指在一个硬件芯片上集成有多个core(称为处理核或内核)的处理器。由于多核处理器中的多个处理核相对独立,可并行处理报文,因此,可提升基于多核处理器的网络设备的报文处理能力。

多核处理器在接收到报文后,首先为报文分配group(组),然后基于group与core的对应关系,由分配的group对应的core对报文进行处理。由于每一个core对应的group的数量不同,导致对应较多group的core的处理压力会较大。



技术实现要素:

本发明的目的在于提供一种多核处理器及报文处理方法,用以减轻core的处理压力。

为实现上述发明目的,本发明提供了如下技术方案:

本发明提供一种多核处理器,所述多核处理器包括:pki(packetinputunit,报文接收)模块、sso(schedule/synchronize/orderunit,报文调度)模块、多个core;其中,所述多个core包括:分流core和数据core;

所述pki模块,用于为报文分配分流core对应的group和所述报文的分流标识,将分配的group的group标识和所述分流标识填写到所述报文对应的work(工作项)中,并将所述报文存入内存,将所述work发送至所述sso模块,其中,属于同一数据流的报文的分流标识相同;

所述分流core,用于从所述sso模块获取包括所述分流core对应的group的group标识的work,基于获取的work包括的分流标识以及所述多个core包括的数据core的数量从所述数据core中分配第一数据core,将获取的work包括的group标识替换为所述第一数据core对应的group的group标识,将替换后的work发送至所述sso模块;

所述第一数据core,用于从所述sso模块获取包括所述第一数据core对应的group的group标识的work,并基于获取的work从所述内存中读取报文进行处理。

本发明还提供一种报文处理方法,应用于多核处理器包括的多个core中的分流core,所述多核处理器还包括:pki模块、sso模块,所述多个core还包括数据core,所述方法包括:

从所述sso模块获取包括所述分流core对应的group的group标识的work,所述分流core获取的work为所述pki模块为报文分配分流core对应的group和所述报文的分流标识后,将分配的group的group标识和所述分流标识填写到所述报文对应的work中,并将填写后的work发送至所述sso模块中的,其中,属于同一数据流的报文的分流标识相同;

基于所述获取的work包括的分流标识以及所述多个core包括的数据core的数量从所述数据core中分配第一数据core;

将所述获取的work包括的group标识替换为所述第一数据core对应的group的group标识;

将替换后的work发送至所述sso模块,以使所述第一数据core从所述sso模块获取包括所述第一数据core对应的group的group标识的work,并基于获取的work从内存中读取报文进行处理,所述第一数据core从内存中读取的报文为所述pki模块在填写报文对应的work后,将报文存入所述内存中的。

由以上描述可以看出,本发明首先由pki模块为报文分配分流core对应的group和报文的分流标识,并将分流core对应的group的group标识和报文的分流标识写入报文对应work中;当分流core获取到包括该分流core对应的group的work时,基于work中的分流标识和多核处理器中数据core的数量从数据core中分配第一数据core,并将work包括的group标识替换为第一数据core对应的group的group标识,以便第一数据core获取包含该第一数据core对应group的group标识的work,并基于获取的work从内存读取报文进行处理。也就是说,本发明对报文进行了二次分配,第一次分配是基于group和core的对应关系将报文分配给分流core,第二次分配是由分流core基于多核处理器中数据core的数量将报文分配给数据core(分流core不对报文进行处理,只执行第二次分配操作),正是由于分流core基于数据core的数量的第二次分配,使得基于所有数据core执行负载均衡成为可能,从而减轻单个数据core的处理压力。

附图说明

图1是本发明实施例示出的一种多核处理器的结构示意图;

图2是本发明实施例示出的一种报文处理方法的流程图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本发明实施例提出一种多核处理器,该多核处理器包括pki模块、sso模块以及多个core,其中,多个core包括:分流core和数据core。参见图1,为本发明实施例示出的一种多核处理器的结构示意图,其中,core1和core2为分流core,core3~core9为数据core,当然,本发明并不具体限制core的数量,图1所示core的数量仅为示例性说明。

以下将对多核处理器包括的各个模块进行描述:

pki模块:用于为报文分配分流core对应的group和所述报文的分流标识,将分配的group的group标识和所述分流标识填写到所述报文对应的work中,并将所述报文存入内存,将所述work发送至所述sso模块。

具体地,在pki模块中配置分流core对应的group的范围,该分流core对应的group的范围与sso模块中已配置的分流core与group的对应关系一致。参见表1,为sso模块中已配置的core与group的对应关系,其中,每一个group唯一对应一个core。

表1

如前所述,core1和core2为分流core,core3~core9为数据core,因此,在pki中配置分流core对应的group的范围为group0~group3。

pki接收到报文后,在已配置的分流core对应的group的范围内为报文分配group,例如,可基于报文的目的ip地址为报文分配分流core对应的group,即为具有相同目的ip地址的报文分配相同的group,当然,本发明并不限定为报文分配分流core对应的group的方式;此外,pki模块还为报文分配分流标识,其中,属于同一数据流的报文的分流标识相同。

pki将为报文分配的group的group标识和分流标识填写到报文对应的work中,并将work发送给sso模块,由sso模块保存到自身的硬件阵列中,同时,pki将报文存入位于多核处理器之外的内存中等待处理。

分流core:用于从所述sso模块获取包括所述分流core对应的group的group标识的work,基于获取的work包括的分流标识以及所述多个core包括的数据core的数量从所述数据core中分配第一数据core,将获取的work包括的group标识替换为第一数据core对应的group的group标识,将替换后的work发送至所述sso模块。

具体地,基于前述sso模块中配置的core与group的对应关系,分流core可以从sso模块中获取包括该分流core对应的group的group标识的work,也就是说,pki将报文对应的work(该work包括分流core对应的group的group标识)存入sso模块中,分流core再从sso模块中将包括该分流core对应的group的group标识的work取出来,即所有进入多核处理器的报文对应的work都要经过分流core处理,处理过程如下:

分流core基于从sso模块获取的work包括的分流标识以及多核处理器中数据core的数量,从数据core中确定处理该work对应的报文的数据core,记为第一数据core。具体为,在一种实施方式中,分流core基于获取的work包括的分流标识和多核处理器包括的数据core的数量进行哈希运算,基于运算结果确定为报文分配的第一数据core,例如,若报文的分流标识为10,数据core的数量为7,假设利用分流标识(10)对数据core的数量(7)进行哈希运算的结果为3(哈希结果0~6分别对应core3~core9),则应为当前报文分配数据core6,即由core6处理当前报文。

分流core将从sso模块获取的work包括的group标识替换为第一数据core对应的group的group标识,参见表1,core6对应的group为group113~group117,则可选择group113替换work包括的group标识,本发明对从数据core对应的多个group中选择用于替换的group的group标识的方法不作限定。分流core将替换后的work发送至sso模块,保存到sso模块的硬件阵列中。

第一数据core:用于从所述sso模块获取包括该第一数据core对应的group的group标识的work,并基于获取的work从内存中读取报文进行处理。

具体地,同样基于前述sso模块中配置的core与group的对应关系,第一数据core可以从sso模块中获取包括该第一数据core对应的group的group标识的work,例如,core6可以从sso模块中获取包括core6对应的group113的work。通常获取的work中还包括报文的存放地址,第一数据core基于work包括的地址从内存中读取报文进行处理。

从上述描述可以看出,本发明由分流core基于报文的分流标识和数据core的数量进行二次分配,使得具有不同分流标识的报文可均衡分配到各个数据core中,从而降低了单个数据core的处理压力。

进一步地,本发明中的多核处理器还包括中断控制器(图1中未示出),该中断控制器用于从多个core中确定目标core,该目标core对应于sso模块中存在的work包括的group标识对应的group,触发目标core从sso模块获取存在的work。也就是说,本发明中的分流core和数据core均基于中断触发从sso模块获取包括各自对应的group的group标识的work。这种中断触发的方式,避免了core定期查询sso模块中是否存在work时对core资源的占用。

此外,本发明中的分流core,还用于统计分配给第一数据core处理的报文的数量。第一数据core还用于统计从内存中读取的报文的数量;并获取分流core分配给第一数据core处理的报文的数量;当第一数据core基于从sso模块获取的work从内存中读取到报文后,判断分流core分配给自己处理的报文的数量与自身统计的从内存中读取的报文的数量的差值是否大于预设的数量阈值,若分配给第一数据core处理的报文的数量与第一数据core读取的报文的数量的差值大于预设的数量阈值,说明分流core向第一数据core分配报文的速度已经超过第一数据core处理报文的速度,导致内存中等待该第一数据core处理的报文的数量激增,过多挤占内存资源,因此,本发明中第一数据core将当前从内存中读取的报文直接丢弃,以加快释放内存。

本发明实施例还提出一种报文处理方法,参见图2,为本发明实施例示出的报文处理方法的流程图,该实施例从分流core侧对报文处理过程进行描述。

步骤201,从所述sso模块获取包括所述分流core对应的group的group标识的work,所述分流core获取的work为所述pki模块为报文分配分流core对应的group和所述报文的分流标识后,将分配的group的group标识和所述分流标识填写到所述报文对应的work中,并将填写后的work发送至所述sso模块中的,其中,属于同一数据流的报文的分流标识相同。

步骤202,基于获取的work包括的分流标识以及所述多个core包括的数据core的数量从所述数据core中分配第一数据core。

步骤203,将获取的work包括的group标识替换为第一数据core对应的group的group标识。

步骤204,将替换后的work发送至所述sso模块,以使所述第一数据core从所述sso模块获取包括所述第一数据core对应的group的group标识的work,并基于获取的work从内存中读取报文进行处理,所述第一数据core从内存中读取的报文为所述pki模块在填写报文对应的work后,将报文存入所述内存中的。

进一步地,所述多核处理器还包括中断控制器,所述从所述sso模块获取包括所述分流core对应的group的group标识的work,包括:

当接收到所述中断控制器的触发信号时,从所述sso模块获取包括所述分流core对应的group的group标识的work。

进一步地,所述基于获取的work包括的分流标识以及所述多个core包括的数据core的数量从所述数据core中分配第一数据core,包括:

基于所述获取的work包括的分流标识和所述多个core包括的数据core的数量进行哈希运算,基于运算结果从所述数据core中分配第一数据core。

进一步地,所述方法还包括:

统计分配给所述第一数据core处理的报文的数量,以使所述第一数据core基于从所述sso获取的work从所述内存中读取报文后,获取所述分流core分配给所述第一数据core处理的报文的数量,若分配给所述第一数据core处理的报文的数量与所述第一数据core统计的从所述内存中读取的报文的数量的差值大于预设的数量阈值时,丢弃从所述内存中读取的报文。

上述报文处理方法的实现过程具体详见上述对多核处理器中各模块的描述,在此不再赘述。

现仍以图1所示多核处理器为例,介绍该多核处理器以及报文处理过程。

首先,如表1所示,sso模块中已配置core与group的对应关系,其中,分流core对应的group的范围为group0~group3;在pki模块中配置分流core对应的group的范围group0~group3;预设内存中存放的分配给单个数据core处理的报文的数量阈值为30。

pki模块接收到报文(记为packet1)后,从配置的分流core对应的group的范围group0~group3中为packet1分配group1,同时,基于packet1的五元组信息为packet1分配分流标识(记为hash-tag1)为10,此外,pki模块还要确定packet1在内存中的存放地址(记为address1),将group1、hash-tag1、以及address1写入packet1对应的work(记为work1)中,并将work1发送给sso模块,将packet1存入内存(图1中未示出)。

由于group1对应core1,因此,中断控制器(图1中未示出)通过中断触发core1从sso模块中获取包括core1对应的group1的work1,core1从work1中获取packet1的hash-tag1的值(10),基于该hash-tag1的值(10)对多核处理器中数据core的数量(core3~core9,共7个数据core)进行哈希,假设哈希结果为3,根据该哈希结果为packet1分配数据core6,即分配core6处理packet1。从表1可知core6对应group113~group117,从该group113~group117范围内选择一个group,例如group113,利用该group113替换work1中的group1,将替换后的work(记为work2)发送至sso模块,同时,统计分配给core6处理的报文的数量(记为n1)。

同理,由于group113对应core6,因此,中断控制器通过中断触发core6从sso模块中获取包括core6对应的group113的work2,core6从work2中获取packet1在内存中的存放地址address1,基于address1从内存中读取packet1,同时,统计自身当前已读取的报文的数量(记为m1),core6获取所有分流core(core1和core2)统计的分配给自身的报文的数量,假设,core2分配给core6的报文的数量,记为n2,这里假设,n1=50,n2=60,m1=90,则core6计算(n1+n2)-m1=20<预设的数量阈值(30),说明内存中存放的等待core6处理的报文的数量尚未超过core6的处理能力,因此,core6可对当前读取的packet1进行正常处理。

假设,pki模块又接收到新的报文(记为packet2),从配置的分流core对应的group的范围group0~group3中为packet2分配group0,同时,基于packet2的五元组信息为packet2分配分流标识(记为hash-tag2)为7,pki模块将group0、hash-tag2、以及packet2的存放地址(记为address2)写入packet2对应的work(记为work3)中,并将work3发送给sso模块,将packet2存入内存。

由于group0对应core1,因此,中断控制器通过中断触发core1从sso模块中获取包括core1对应的group0的work3,core1从work3中获取packet2的hash-tag2的值(7),基于hash-tag2的值(7)对多核处理器中数据core的数量(7)进行哈希,假设哈希结果为0,根据该哈希结果为packet2分配数据core3,即分配core3处理packet2。从表1可知core3对应group101~group104,从该group101~group104范围内选择group102,利用该group102替换work3中的group0,将替换后的work(记为work4)发送至sso模块,同时,统计分配给core3处理的报文的数量(记为n3)。

同理,由于group102对应core3,因此,中断控制器通过中断触发core3从sso模块中获取包括core3对应的group102的work4,core3从work4中获取packet2在内存中的存放地址address2,基于address2从内存中读取packet2,同时,统计自身当前已读取的报文的数量(记为m2),core3获取core1和core2统计的分配给自身的报文的数量,假设,core2分配给core3的报文的数量,记为n4,这里假设,n3=70,n4=80,m2=100,则core3计算(n3+n4)-m2=50>预设的数量阈值(30),说明内存中存放的等待core3处理的报文过多,已超过core3的处理能力,且挤占其它数据core要处理的报文的存储空间,因此,core3对当前读取的packet2直接丢弃,以快速释放内存空间。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

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