专利名称:报文保序的方法及装置的制作方法
技术领域:
本发明实施例涉及通信技木,尤其涉及一种报文保序的方法及装置。
背景技术:
随着多核技术的发展,多核中央处理器(Central Processing Unit,简称CPU)得到了越来越广泛的应用,然而,当多核CPU处理及转发报文时,容易产生报文乱序的现象,例如,三核CPU按照报文1、2、3的顺序依次接收到3个报文并分别分发给核Cl、C2、C3进行处理,由于报文内容,CPU处理策略以及每个核的负载情况均存在差异,有可能出现报文2和报文3先处理完毕,报文I后处理完毕的情況,此时,若CPU把处理完毕的报文直接发送出去,就出现了发送报文顺序为2、3、1的乱序现象。现有网络中部分网络设备和终端对组播报文的乱序敏感,乱序的报文会导致网络设备和终端的工作异常。目前,对于单播报文,CPU在发送报文之前先将处理后报文的报文包放到报文入发送队列中,按照进入设备的顺序放置,进而保证处理后的报文包在出接ロ发送的顺序跟进入设备的顺序一致。而对于组播报文,实现报文保序的方式为将同一个组播组的流量按照一定的哈希(Hash)算法分配到固定的核进行处理,其对组播流量的处理性能跟单核设备相当,在对报文进行处理时对每个发送接ロ拷贝ー份进行发送,在组播组较少或者不同组播组间的流量差别大的情况下,也容易造成多 个核的负载严重不均,无法充分发挥多核设备的处理性能,使得CPU的处理效率无法提高。
发明内容
有鉴于此,本发明实施例提供一种报文保序的方法及装置,用以解决现有技术中对于组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。第一方面,提供了一种报文保序的方法,包括在中央处理器CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后,所述CPU的第N核接收所述CPU分发的包括编号为M的第M个报文包;所述第N核确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包,并将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中;所述第N核确定所述报文入发送队列中有当前直接发送的报文包,则确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个;若不是,则所述第N核将所述报文入发送队列中当前直接发送的报文包发送,并向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,以及在所述第P核处理后的报文包对应的出接ロ不是最后ー个时,重复向下一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文;其中,所述N、M、P、Q为大于等于I的自然数。结合第一方面,在第一种可能的实现方式中,所述第N核确定所述第M个报文包为组播报文的报文包之后,处理第M个报文包,包括所述第N核确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ;所述第P核处理所述第N核处理后的第M个报文包,包括所述第P核将所述第N核处理后的第M个报文包中的出接ロ信息中的排在最前的出接ロ取出,以及在所述出接ロ信息中删除第P核所取出的出接ロ。结合第一方 面及上述可能的实现方式,在第二种可能的实现方式中,所述将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中的步骤之后,还包括所述第N核确定所述报文入发送队列中无当前直接发送的报文包,则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。结合第一方面,在第三种可能的实现方式中,所述确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个的步骤之后,还包括若是,所述第N核将所述报文入发送队列中当前直接发送的报文包发送,并通知所述第N核所在的CPU回收所述报文占用的内存。结合第一方面,在第四种可能的实现方式中,所述第N核确定所述第M个报文包为组播报文的报文包,包括若所述报文为三层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包;或者,若所述报文为ニ层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。第二方面,提供了一种处理装置,包括接收单元,用于在CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后,接收所述CPU分发的包括编号为M的第M个报文包;第一确定单元,用于在所述接收単元接收所述第M个报文包之后,确定所述第M个报文包是否为组播报文的报文包;处理单元,用于在所述第一确定单元确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包;排列単元,用于将所述处理単元处理后的第M个报文包按照所述编号M排列在报文入发送队列中;第二确定单元,用于在所述排列单元将处理后的第M个报文包排列在报文入发送队列之后,确定所述报文入发送队列中是否有当前直接发送的报文包;第三确定单元,用于在所述第二确定单元确定所述报文入发送队列中有当前直接发送的报文包之后,确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个;
发送单元,用于在所述第三确定单元确定处理后的第M个报文包对应的出接ロ不是所述报文对应的所有出接口中的最后ー个,将所述报文入发送队列中当前直接发送的报文包发送,井向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复所述第三确定单元确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,在所述第P核处理后的报文包对应的出接ロ不是最后ー个时,重复所述发送单元向下一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文;其中,所述N、M、P、Q为大于等于I的自然数。结合第二方面,在第一种可能的实现方式中,所述处理単元,具体用于确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接ロ中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ。结合第二方面及上述可能的实现方式,在第二种可能的实现方式中,所述第二确定单元,还用于确定所述报文入发送队列中无当前直接发送的报文包,则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。结合第二方面,在第三 种可能的实现方式中,所述第三确定单元,还用于确定处理后的第M个报文包对应的出接ロ是所述报文对应的所有出接ロ中的最后ー个,将所述报文入发送队列中当前直接发送的报文包发送,并通知所述第N核所在的CPU回收所述报文占用的内存。结合第二方面,在第四种可能的实现方式中,所述第一确定单元,具体用于在所述报文为三层转发报文时,确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包;或者,在所述报文为ニ层转发报文时,确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。第三方面,提供ー种中央处理器,包括上述任一所述的处理装置。第四方面,提供一种设备,包括上述任一所述的CPU。由上述技术方案可知,本发明实施例的报文保序的方法及装置,通过CPU将报文逐包分配到CPU的两个以上的核分别进行处理,使得第N核处理编号为M的第M个报文包,并将处理后的第M个报文包排列在报文入发送队列中,在报文入发送队列中有当前直接发送的报文包,且第M个报文包对应的出接ロ不是所述报文对应的所有出接ロ中的最后ー个时,将报文入发送队列中当前直接发送的报文包发送,井向第P核发送用于指示所述第P核处理所述第M个报文包的通知消息,实现了 CPU中多核的负载均衡,进而解决了现有技术中对于组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作一简单地介绍,显而易见地下面附图只是本发明的一些实施例的附图,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得同样能实现本发明技术方案的其它附图。图1A为当前组播组网的场景图;图1B为本发明一实施例提供的报文保序的方法的流程示意图;图2A为本发明一实施例提供的报文保序的方法的流程示意图;图2B为本发明一实施例提供的报文保序的方法的流程示意图;图3为本发明一实施例提供的处理装置的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述。显然,下述的各个实施例都只是本发明一部分的实施例。基于本发明下述的各个实施例,本领域普通技术人员即使没有作出创造性劳动,也可以通过等效变换部分甚至全部的技术特征,而获得能够解决本发明技术问题,实现本发明技术效果的其它实施例,而这些变换而来的各个实施例显然并不脱离本发明所公开的范围。图1A示出了当前组播组网的场景图,其中,组播源发出的组播数据(如高清视频)到达多核设备(如多核防火 墙)后,需要按照进入多核设备的顺序发送到A、B、C三个接受者,每个接受者收到组播报文的顺序必须和报文进入多核设备的顺序一致,如果不一致,则出现乱序,会导致接受者的视频解码异常,出现如花屏现象等。图1B示出了本发明ー实施例提供的报文保序的方法的流程示意图,如图1所示,本实施例中的报文保序的方法如下所述。101、在CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后;所述CPU的第N核接收所述CPU分发的包括编号为M的第M个报文包;102、所述第N核确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包,并将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中;103、所述第N核确定所述报文入发送队列中有当前直接发送的报文包(即第N核处理的第M个报文包为当前直接发送的报文包),则确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个;104、若不是,则所述第N核将所述报文入发送队列中当前直接发送的报文包(SP第N核处理的第M个报文包)发送,井向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,以及在所述第P核处理后的报文包对应的出接ロ不是最后ー个时,重复向再一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文;其中,所述N、M、P、Q为大于等于I的自然数。
在实际应用中,上述步骤104中,在第N核确定处理后的第M个报文包对应的出接ロ不是所述报文对应的所有出接口中的最后ー个时;可以由CPU的发送硬件単元向第P核发送通知消息,具体过程如下 在第N核确定处理后的第M个报文包对应的出接ロ不是所述报文对应的所有出接ロ中的最后ー个之后,可向CPU内的发送硬件单元发送一消息,该消息可包括第N核处理后的第M个报文包的数据地址和长度,以及还可包括向第P核发送通知消息的信息;进而在发送硬件単元根据第N核处理后的第M个报文包的数据地址和长度将处理后的第M个报文包发送,并可向第P核发送通知消息,以使第P核处理所述第N核处理后的第M个报文包。当然,若在第N核确定处理后的第M个报文包对应的出接ロ是所述报文对应的所有出接口中的最后ー个,则可向CPU内的发送硬件単元发送另一消息,该另ー消息可包括第N核处理后的第M个报文包的数据地址和长度;进而在发送硬件単元根据第N核处理后的第M个报文包的数据地址和长度将处理后的第M个报文包发送,并回收所述报文占用的内存。举例来说,上述第P核为所述第N核按照预设算法算出的用于向另ー个出接ロ发送报文包的核,具体地第P核为所述第N核按照哈希(HASH)算法算出的用于向另ー个出接ロ发送报文包的核。可选地,上述步骤102中的“所述第N核确定所述第M个报文包为组播报文的报文包之后,处理第M个报文包”的步骤, 包括所述第N核确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ。举例来说,可根据组播路由转发表查找所述第M个报文包对应的所有出接ロ的信
o可选地,上述步骤104中的“所述第P核处理所述第N核处理后的第M个报文包”的步骤,包括所述第P核将所述第N核处理后的第M个报文包中出接ロ的信息中的排在最前的出接ロ取出,以及在所述出接ロ的信息中删除第P核所取出的出接ロ。应理解,在实际应用中,报文/报文包在向不同的接ロ发送吋,还需要修改报文头信息。举例来说,在三层组网下,报文在向不同的接ロ发送时,报文的源MAC地址需要修改为接ロ对应的MAC地址。由于修改不同的接ロ发送报文修改报文头信息为现有公知的内容,故上述实施例中未详细说明修改报文头信息的过程。在第一种可实现的场景中,上述步骤102中的“将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中”的步骤之后,上述报文保序的方法还可包括如下的图中未示出的步骤103’ 103’、所述第N核确定所述报文入发送队列中无当前直接发送的报文包(即第N核处理的第M个报文包不是当前可直接发送的报文包,排在第M个报文包之前的报文包还未处理完),则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。在第二种可实现的场景中,上述步骤103中的“确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个”的步骤之后,上述报文保序的方法还可包括如下的图中未示出的步骤104’ 104’、若是,所述第N核将所述报文入发送队列中当前直接发送的报文包(即第N核处理的第M个报文包)发送,并通知所述第N核所在的CPU回收所述报文占用的内存。通常,在发送报文第N核可告诉硬件模块如CPU发送完成后自动回收报文所占用的内存。在第三种可实现的场景中,上述步骤102中的“第N核确定所述第M个报文包为组播报文的报文包”的步骤,包括如下图中未示出的步骤1021或1021’ 1021、若所述报文为三层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包;或者1021’、若所述报文为ニ层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。由上述实施例可知,本实施例的报文保序的方法,通过CPU将报文逐包分配到CPU的两个以上的核分别进行处理,使得第N核处理编号为M的第M个报文包,并将处理后的第M个报文包排列在报文入发送队列中,在报文入发送队列中有当前直接发送的报文包,且第M个报文包对应的出接ロ不是所述报文对应的所有出接ロ中的最后ー个时,将报文入发送队列中当前直接发送的报文包发送,井向第P核发送用于指示所述第P核处理所述第M个报文包的通知消息,实现了 CPU中多核的负载均衡,进而解决了现有技术中对于组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。图2A示出了本发明ー实施例提供的报文保序的方法的流程示意图,如图2所示,本实施例中的报文保序的方 法如下所述。201、CPU接收报文之后,将所述报文逐包分发到CPU的四个核(第一核、第二核、第三核、第四核)分别进行处理;202、第一核在接收所述CPU分发的包括编号I的第一报文包之后,确定所述第一报文包是否是组播报文的报文包,若确定是组播报文的报文包,则处理所述第一报文包,例如,查找所述第一报文包对应的所有出接ロ的信息,并将所有出接ロ的信息记录到所述第一报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ。当然,在该步骤中,若确定所述第一报文包不是组播报文的报文包即单播报文,则按照现有的方式进行单播报文的处理,例如,在处理后的报文包发送前将处理后的报文包放到报文入发送队列中,按照进入CPU的顺序放置,进而保证处理后的报文包在出接ロ发送的顺序跟进入CPU的顺序一致,不会出现报文乱序的情形。203、第一核将处理后的第一报文包按照所述第一报文包的编号I排列在报文入发送队列的编号I对应的位置上。204、第一核确定所述报文入发送队列中是否有当前直接发送的报文包,由于编号I排列在报文入发送队列的编号I对应的位置,则第一核可以确定所述报文入发送队列中有当前直接发送的报文包,即第一核处理后的第一报文包。举例来说,若上述步骤202至步骤204为第二核进行的相关处理,则第二核将编号2的第二报文包排列在报文入发送队列的编号2对应的位置上,此时,则报文入发送队列无当前直接发送的报文包,则第二核需等待所述报文分发的第一核的处理后的第一报文包排列到报文入发送队列之后,再发送。205、在第一核确定所述报文入发送队列中有当前直接发送的报文包后,确定处理后的第一报文包对应的出接ロ不是所述报文对应的所有出接口中的最后一个;将报文入发送队列中的当前直接发送的报文包(即第一核处理后的第一报文包)发送,井向第四核发送通知消息,所述通知消息用于指示所述第四核处理所述第一核处理后的第一报文包,其中,第四核为所述第一核按照哈希算法算出的用于向第二出接ロ发送的报文包的核。需要说明的是,在实际应用中,该通知消息发送至哪ー个核,可以使用不同的Hash计算方式来决定。采用这种方式后能保证所有往第一个出接ロ发送的报文发送完成后按照发送顺序通知到同一个核进行处理。如图2B所示,图2B中按照顺序将报文包向同一个出接ロ发送完成后会发送通知消息依次通知图2B中CPU的4号核。哈希算法可以如下往终端A发送的接ロ的索引编号为100,CPU中核的数量为32,使用100% 32=4,指定接收通知消息的CPU核就为4号核,实际应用中可以灵活选择计
算方法。另外,若上述步骤202至步骤205为第二核进行的相关处理,则第二核将编号2的第二报文包排列在报文入发送队列的编号2对应的位置上,在报文入发送队列有当前直接发送的报文包,则第二核将处理后的第二报文包发送,井向第四核发送通知消息,所述通知消息用于指示所述第四核处理所述第二核处理后的第二报文包,其中,第四核为所述第二核按照哈希算法算出的用于向第二出接ロ发送的报文包的核。当然,在其他实施例中,也可由发送硬件単元向第四核发送通知消息,本实施例仅为举例说明,不同的核分别处理报文的过程。本实施例中的Hash算法可保证报文向多个出接ロ发送时分配到CPU的不同的核进行处理,进而发挥了多核CPU的处理性能。206、所述第四核在接收所述通知消息之后,处理所述第一核处理后的第一报文包,如将第一核处理后的第一报文包中出接ロ的信息中的第二个出接ロ(出接ロ的信息中排在最前的出接ロ)取出,以及删除所述出接ロ信息中第四核取出的出接ロ即删除出接ロ的信息中的第二个出接ロ的信息。207、第四核确定第四核处理后的第一报文包对应的出接ロ是不是所述报文对应的所有出接ロ中的最后ー个,若不是,将第四核处理后的第一报文包直接发送,井向第二核发送另一通知消息,所述另一通知消息用于指示所述第二核处理第四核处理后的第一报文包,其中,第二核为所述第四核按照哈希算法算出的用于向第三出接ロ发送的报文包的核。可以理解的是,该处第四核对报文包的处理,可等同于单核设备向同一个接ロ发送报文,保证了报文中各报文包的顺序发送。208、第二核在接收所述另一通知消息之后,处理第四核处理后的第一报文包,如将第四核处理后的第一报文包中的出接ロ信息中的第三个出接ロ取出,以及在出接ロ信息中删除第二核所取出的第三出接ロ。209、在第二核确 定第二核处理后的第一报文包对应的出接ロ是所述报文对应的所有出接口中的最后ー个时;第二核将第二核处理后的第一报文包发送,并通知第二核所在的CPU回收报文所占的内存。当然,在第二核确定第二核处理后的第一报文包对应的出接ロ不是所述报文对应的所有出接口中的最后ー个时,重复如上步骤207的过程,将第二核处理后的第一报文包直接发送,井向第Q核发送通知消息,所述通知消息用于指示所述第Q核处理第二核处理后的第一报文包,其中,第Q核为所述第二核按照哈希算法算出的用于向第四出接ロ发送的报文包的核。其中,第Q核处理第一报文包可按照步骤208所示的过程进行处理。上述报文保序的方法,使得组播报文跟普通报文ー样分发到不同的核进行处理,充分利用多核的处理性能,实现了 CPU中多核的负载均衡,进而解决了现有技术中对于组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。图3示出了本发明ー实施例提供的处理装置的结构示意图,如图3所示,本实施例的处理装置包括接收单元31、第一确定单元32、处理单元33、排列单元34、第二确定单元35、第三确定单元36和发送单元37 ;其中,接收单元31用于在CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后,接收所述CPU分发的包括编号为M的第M个报文包;第一确定单元32用 于在所述接收単元31接收所述第M个报文包之后,确定所述第M个报文包是否为组播报文的报文包;处理单元33用于在所述第一确定单元32确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包;排列単元34用于将所述处理単元33处理后的第M个报文包按照所述编号M排列在报文入发送队列中;第二确定单元35用于在所述排列単元34将处理后的第M个报文包排列在报文入发送队列之后,确定所述报文入发送队列中是否有当前直接发送的报文包;第三确定单元36用于在所述第二确定单元35确定所述报文入发送队列中有当前直接发送的报文包(即第N核处理的第M个报文包)之后,确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个;发送单元37用于在所述第三确定单元36确定处理后的第M个报文包对应的出接ロ不是所述报文对应的所有出接口中的最后ー个,将所述报文入发送队列中当前直接发送的报文包(即第N核处理的第M个报文包)发送,井向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复所述第三确定单元确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,在所述第P核处理后的报文包对应的出接ロ不是最后一个时,重复所述发送单元向下一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文;其中,所述N、M、P、Q为大于等于I的自然数。在ー种具体的应用场景中,上述的处理单元33具体用于,确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ。所述第一确定单元32具体用干,在所述报文为三层转发报文时,确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包;或者,在所述报文为ニ层转发报文时,确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。在另ー种可选的应用场景中,所述第二确定单元35还用于,确定所述报文入发送队列中无当前直接发送的报文包,则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。所述第三确定单元36还用于,确定处理后的第M个报文包对应的出接ロ是所述报文对应的所有出接口中的最后ー个,将所述报文入发送队列中当前直接发送的报文包发送,并通知所述第N核所在的CPU回收所述报文占用的内存。上述处理装置可以使得组播报文跟普通报文ー样分发到CPU的不同核进行处理,充分利用多核的处理性能,实现了 CPU中多核的负载均衡,进而解决了现有技术中对于组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。根据本发明的另一方面,本发明还提供ー种中央处理器,该中央处理器包括本发明任ー实施例所述的处理装置。
当然,在实际应用中,该中央处理器还可包括逻辑运算模块、控制模块、寄存器等,上述逻辑运算模块、控制模块、寄存器可与处理装置耦合以执行上述的报文报序的方法。根据本发明的再一方面,本发明还提供一种设备,该设备包括本发明任一实施例所述的CPU。当然,在实际应用中,上述是设备可以是通信设备,其还可以包括用于存储程序例程的存储器、用于和网络设备或其他设备接ロ的接ロ単元(如,以太网接ロ、帧中继接ロ等)用于完成设备内个单元之间的通信、数据交互的总线设备等。上述的CPU可与存储器、接ロ単元、总线设备耦合,实现设备内报文保序的方法的执行。另外,在本发明的任意实施例中,为方便描述,使用了报文和报文的报文包进行说明,该些报文包在实际应用中均为报文,即属于同一个报文流/数据流中的报文。本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于ー计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管參照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种报文保序的方法,其特征在于,包括 在中央处理器CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后,所述CPU的第N核接收所述CPU分发的包括编号为M的第M个报文包; 所述第N核确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包,并将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中; 所述第N核确定所述报文入发送队列中有当前直接发送的报文包,则确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后ー个; 若不是,则所述第N核将所述报文入发送队列中当前直接发送的报文包发送,井向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,以及在所述第P核处理后的报文包对应的出接ロ不是最后ー个时,重复向下一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文; 其中,所述N、M、P、Q为大于等于I的自然数。
2.根据权利要求1所述的方法,其特征在于,所述第N核确定所述第M个报文包为组播报文的报文包之后,处理第M个报文包,包括 所述第N核确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ; 所述第P核处理所述第N核处理后的第M个报文包,包括 所述第P核将所述第N核处理后的第M个报文包中出接ロ的信息中的排在最前的出接ロ取出,以及在所述出接ロ的信息中删除第P核所取出的出接ロ。
3.根据权利要求1或2所述的方法,其特征在于,所述将处理后的所述第M个报文包按照所述编号M排列在报文入发送队列中的步骤之后,还包括 所述第N核确定所述报文入发送队列中无当前直接发送的报文包,则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。
4.根据权利要求1所述的方法,其特征在于,所述确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接ロ中的最后ー个的步骤之后,还包括 若是,所述第N核将所述报文入发送队列中当前直接发送的报文包发送,并通知所述第N核所在的CPU回收所述报文占用的内存。
5.根据权利要求1所述的方法,其特征在于,所述第N核确定所述第M个报文包为组播报文的报文包,包括 若所述报文为三层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包; 或者, 若所述报文为ニ层转发报文,则所述第N核确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。
6.一种处理装置,其特征在于,包括接收单元,用于在CPU接收报文,并将所述报文逐包分发到所述CPU的两个以上的核进行处理之后,接收所述CPU分发的包括编号为M的第M个报文包; 第一确定单元,用于在所述接收単元接收所述第M个报文包之后,确定所述第M个报文包是否为组播报文的报文包; 处理单元,用于在所述第一确定单元确定所述第M个报文包为组播报文的报文包之后,处理所述第M个报文包; 排列単元,用于将所述处理単元处理后的第M个报文包按照所述编号M排列在报文入发送队列中; 第二确定单元,用于在所述排列単元将处理后的第M个报文包排列在报文入发送队列之后,确定所述报文入发送队列中是否有当前直接发送的报文包; 第三确定单元,用于在所述第二确定单元确定所述报文入发送队列中有当前直接发送的报文包之后,确定处理后的第M个报文包对应的出接ロ是否是所述报文对应的所有出接口中的最后Iv ; 发送单元,用于在所述第三确定单元确定处理后的第M个报文包对应的出接ロ不是所述报文对应的所有出接ロ中的最后ー个,将所述报文入发送队列中当前直接发送的报文包发送,井向第P核发送通知消息,所述通知消息用于指示所述第P核处理所述第M个报文包;所述第P核为所述第N核按照预设算法算出的用于向另一个出接ロ发送报文包的核;以使所述第P核处理所述第N核处理后的第M个报文包,并重复所述第三确定单元确定所述第P核处理后的报文包对应的出接ロ是否是所有出接口中最后ー个的过程,在所述第P核处理后的报文包对应的出接ロ不是最后ー个时,重复所述发送单元向下一个出接ロ发送报文包的第Q核发送通知消息的过程,直至所述报文对应的所有出接ロ都依序发送有处理后的报文; 其中,所述N、M、P、Q为大于等于I的自然数。
7.根据权利要求6所述的处理装置,其特征在于,所述处理単元,具体用于 确定所述第M个报文包为组播报文的报文包之后,查找所述第M个报文包对应的所有出接ロ的信息,将所有出接ロ的信息记录到所述第M个报文包中,且取出所有出接口中的第一个出接ロ,以及删除所述所有出接口中的第一个出接ロ。
8.根据权利要求6或7所述的处理装置,其特征在于,所述第二确定单元,还用于 确定所述报文入发送队列中无当前直接发送的报文包,则等待所述报文入发送队列中排在编号M之前的能够直接发送的报文包。
9.根据权利要求6所述的处理装置,其特征在于,所述第三确定单元,还用于 确定处理后的第M个报文包对应的出接ロ是所述报文对应的所有出接口中的最后ー个,将所述报文入发送队列中当前直接发送的报文包发送,并通知所述第N核所在的CPU回收所述报文占用的内存。
10.根据权利要求6所述的处理装置,其特征在于,所述第一确定单元,具体用于 在所述报文为三层转发报文时,确定所述第M个报文包所在的报文的目的IP地址为组播地址,获知所述第M个报文包为组播报文的报文包; 或者, 在所述报文为ニ层转发报文吋,确定所述第M个报文包所在的报文的目的MAC信息为组播MAC信息,获知所述第M个报文包为组播报文的报文包。
11.ー种中央处理器,其特征在于,包括如上权利要求6至10任一所述的处理装置。
12.—种设备,其特征在于,包括如上权利要求11所述的中央处理器CPU。
全文摘要
本发明实施例提供一种报文保序的方法及装置,其中,方法包括CPU的第N核接收CPU分发的编号M的第M报文包;确定第M报文包为组播报文的报文包后,处理第M报文包,将处理的第M报文包排在报文入发送队列中,若队列中有直接发送的报文包,且处理后的第M报文包对应的出接口不是报文对应的所有出接口的最后一个,将报文包发送并向第P核发送指示第P核处理第M报文包的消息;在第P核处理第M报文包后,重复确定第P核处理后的报文包对应的出接口是否是所有出接口中最后一个的过程,直至所有出接口都依序发送有报文。上述方法用以解决现有技术中组播报文易造成多核负载不均衡,导致CPU的处理效率降低的问题。
文档编号H04L12/863GK103067304SQ201210578439
公开日2013年4月24日 申请日期2012年12月27日 优先权日2012年12月27日
发明者赵桃李 申请人:华为技术有限公司