CN106612236B - 众核网络处理器及其微引擎的报文调度方法、系统 - Google Patents
众核网络处理器及其微引擎的报文调度方法、系统 Download PDFInfo
- Publication number
- CN106612236B CN106612236B CN201510695926.1A CN201510695926A CN106612236B CN 106612236 B CN106612236 B CN 106612236B CN 201510695926 A CN201510695926 A CN 201510695926A CN 106612236 B CN106612236 B CN 106612236B
- Authority
- CN
- China
- Prior art keywords
- mapping table
- microengines
- flow queue
- microengine
- idle
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000013507 mapping Methods 0.000 claims description 188
- 238000012545 processing Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 239000000306 component Substances 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000032683 aging Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种众核网络处理器及其微引擎的报文调度方法、系统,包括:当有报文输入时,为所述报文申请空闲指针;将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。
Description
技术领域
本发明涉及网络处理器技术,尤其涉及一种众核网络处理器及其微引擎的报文调度方法、系统。
背景技术
网络处理器是数据通信领域转发面的核心部件,它是一种兼顾处理器速度与使用灵活性的解决方案,可以通过灵活地修改业务微码以满足各种基本与复杂网络服务的需求,便于业务的扩展升级。
由于网络服务高速发展的需求,对网络处理器的处理能力要求越来越高,单个或少量微引擎已经远远不能满足处理能力的需求。目前解决的方案主要有:提高系统主频、增加内核数量等方法。提高系统主频的方法,半导体工艺的发展速度已经远远落后于处理能力提升的需求,单纯依靠采用新工艺提高系统主频的方法已经不能满足处理能力提升的需求。目前对高端网络处理器的处理能力已经达到了500Gbps以上,而微引擎的主频一般在1GHz~2GHz范围内,几个或几十个微引擎根本无法达到需要的处理能力。因此,采用众核结构的网络处理器成为一个必然的选择。网络处理器中微引擎的数量可以简单地用下面的公式估算:
其中,Me_num为微引擎数量,Performance为处理能力(单位bps),Pkt_len为包长,Instr_num为业务微码条数,Freq为系统主频。
根据对网络处理器处理性能需求的分析,利用上面的公式,可以估算出未来商用网路处理器的微引擎数量可达256甚至更多,这必然是一种众核处理器。巨大的微引擎数量带来了一系列的问题。
首先,由于微引擎数量众多,微引擎之间的组织架构,即片上网络与路由,成为影响性能的关键之一。常用的片上网络主要有:ring、mesh、torus、树型、碟型等,随着微引擎数量的增多,片上网络节点急剧增加,路由算法带来的带宽、时延、负载不均衡等问题越来越严重。
其次,报文到微引擎之间的映射也是一个复杂的问题,目前提出的映射算法很多,但大多数都只能改善某一方面或算法过于复杂,很难在硬件上实现,由于网络数据流中,同一条数据流之间报文具有上层应用的局部性,需要尽可能地保证进出网络处理器的报文顺序,以避免网络上层的超时重传。负载均衡关系到处理能力能否充分使用、处理时延的长短等。此外,微引擎的指令存储一般采用缓存(cache)结构以提高取指效率,那么相同处理流程的报文如果可以进同一个内核处理,那么可以使指令cache的效率提高。因此一个好的映射算法,需要在保序、负载均衡、指令cache效率等方面做到最佳平衡点,这也是众核网络处理器的难点与研究热点之一。
发明内容
为解决上述技术问题,本发明实施例提供了一种众核网络处理器及其微引擎的报文调度方法、系统。
本发明实施例提供的基于众核网络处理器中微引擎的报文调度方法包括:
当有报文输入时,为所述报文申请空闲指针;
将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;
当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;
当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。
本发明实施例中,每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数。
本发明实施例中,所述方法还包括:
根据所述报文状态的更新,更新所述动态映射表。
本发明实施例中,所述根据所述报文状态的更新,更新所述动态映射表中微引擎的状态,包括:
当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
本发明实施例中,所述方法还包括:
在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
本发明实施例提供的基于众核网络处理器中微引擎的报文调度系统包括:
申请单元,用于当有报文输入时,为所述报文申请空闲指针;
存储单元,用于将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;
调度单元,用于当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;
所处存储单元,还用于当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。
本发明实施例中,每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数。
本发明实施例中,所述系统还包括:
更新单元,用于根据所述报文状态的更新,更新所述动态映射表。
本发明实施例中,所述更新单元,还用于当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
本发明实施例中,所述更新单元,还用于在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
本发明实施例提供的众核网络处理器由多个微引擎组成;其中,
多个所述微引擎组成一个组,所述多个组组成一个族,在所述组与所述族之间采用全并行结构;所述族之间采用二维网状结构;在所述族网格中间,设置有多个路由模块,所述路由模块采用二维网状结构;
所述路由模块,用于向其上下左右4个族输入输出报文、访问片外存储、访问协处理模块;
所述路由模块,用于完成报文、访问片外存储请求与返回、访问协处理模块请求与返回的路由,完成报文、请求或返回到指定目的族或调度模块的传输。
本发明实施例的技术方案中,众核网络处理器由多个微引擎组成;其中,多个所述微引擎组成一个组,所述多个组组成一个族,在所述组与所述族之间采用全并行结构;所述族之间采用二维网状结构;在所述族网格中间,设置有多个路由模块,所述路由模块采用二维网状结构。当有报文输入时,为所述报文申请空闲指针;将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。如此,减少同一条报文流中报文乱序程度,提高微引擎指令cache效率,实现负载均衡、报文保序、指令cache效率三者的平衡,满足高性能转发的需求。
附图说明
图1为本发明实施例的基于众核网络处理器中微引擎的报文调度方法的流程示意图;
图2为本发明实施例的基于众核网络处理器中微引擎的报文调度系统的结构组成示意图;
图3为一个常规结构的256核网络处理器微引擎结构示意图;
图4为一个多层次结构的256核处理器微引擎结构示意图;
图5为一个cluster内部的微引擎层次结构示意图;
图6为本发明实施例的报文映射过程示意图;
图7为本发明实施例串行方式的实施案例示意图;
图8为本发明实施例串并混合方式的实施案例示意图。
具体实施方式
为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。
图1为本发明实施例的基于众核网络处理器中微引擎的报文调度方法的流程示意图,如图1所示,所述基于众核网络处理器中微引擎的报文调度方法包括以下步骤:
步骤101:当有报文输入时,为所述报文申请空闲指针。
本发明实施例中,所有微引擎的线程、状态由一个监控模块进行实时监控,以实现基于线程粒度的全局调度。
其中,采用虚拟输出队列(VOQ,Virtual Out Queue)的方式,防止不同流之间报文映射的“头阻塞”现象。每个报文输入后,先申请一个空闲指针,报文存入共享的缓存中指针指向的位置,指针存入对应流的队列。流队列之间采用轮询调度(公平、加权或优先级等轮询测量都可以)输出到映射模块。映射失败的报文重新回到相应流队列,下次再进行映射(可以采用优先或者其他方式)。
其中,每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数,即一开始优先选择微引擎0。
步骤102:将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度。
步骤103:当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎。
步骤104:当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。
本发明实施例中,所述方法还包括:
根据所述报文状态的更新,更新所述动态映射表。
具体地,当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
本发明实施例中,在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
下面对上述规则进一步解释说明。
(1)如果某条流的映射表,表头的微引擎中没有报文或只有1条流,且有空闲线程,那么映射表无需更新。
(2)如果某条流的映射表,表头的微引擎只有1条流,但没有空闲线程,那么按照映射表中的顺序,从表头开始,按照如下算法选择微引擎:
优先选择完全空闲的微引擎。
其次选择,只有1条流,且空闲线程最多的微引擎。
如果以上两者都不满足,往该映射表写入无效标志,即该流的报文暂时不能映射到微引擎中,缓存在队列中。
根据以上原则,将选中的微引擎编号移到映射表的表头,表中的其余条目依次向后移动。
(3)如果某条流的映射表,表头的微引擎中有2条流,且有空闲线程,按照如下算法更新映射表:
为了防止一个微引擎中总是有2条流,如果该微引擎中一条流占用的线程数大于另外一条流,且有完全空闲的微引擎,那么将占用线程少的流重新映射到完全空闲的微引擎中,优先选择映射表中,靠前的空闲微引擎。
如果微引擎中一条流占用的线程数大于另外一条流,但没有完全空闲的微引擎,那么映射关系不变。
(4)如果某条流的映射表,表头的微引擎有2条流,但没有空闲线程,按照如下算法更新映射表:
其中占用线程数较少的流对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择其中只有1条流且空闲线程最多的微引擎,否则映射表不变。将选择的微引擎移到映射表的头部,其余条目依次后移。
微引擎中的另外一条流,映射关系不变。
(5)如果某条流在所有微引擎中的报文总数为0,且超过一定的时间阈值th,那么将这条流的映射表条目全部置无效。这样做的目的是,某条流超过一段时间没有新报文进来时,原来这条流占用的微引擎可能已经被其他流占用,那么这条流再进来的报文,优先选择完全空闲的微引擎可以使负载更均衡。
图2为本发明实施例的基于众核网络处理器中微引擎的报文调度系统的结构组成示意图,如图2所示,所述基于众核网络处理器中微引擎的报文调度系统包括:
申请单元21,用于当有报文输入时,为所述报文申请空闲指针;
存储单元22,用于将所述报文存储至共享缓存中所述指令指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;
调度单元23,用于当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;
所处存储单元22,还用于当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列。
每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数。
所述系统还包括:
更新单元24,用于根据所述报文状态的更新,更新所述动态映射表。
所述更新单元24,还用于当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
所述更新单元24,还用于在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
本发明实施例提供的众核网络处理器由多个微引擎组成;其中,
多个所述微引擎组成一个组,所述多个组组成一个族,在所述组与所述族之间采用全并行结构;所述族之间采用二维网状结构;在所述族网格中间,设置有多个路由模块,所述路由模块采用二维网状结构;
所述路由模块,用于向其上下左右4个族输入输出报文、访问片外存储、访问协处理模块;
所述路由模块,用于完成报文、访问片外存储请求与返回、访问协处理模块请求与返回的路由,完成报文、请求或返回到指定目的族或调度模块的传输。
为了更好地理解本发明实施例,首先介绍一下众核网络处理器中的微引擎的互连结构。目前网络处理器的微引擎数量已经发展到数百个,由于数量巨大,路由节点众多,现有的多核处理器内核互连结构与路由算法已经不能满足需求。最常用的微引擎连接结构是网状(mesh)结构,即按照二维矩阵的方式连接,每个微引擎都通过互连接口与路由模块连接,用于报文或其他数据穿过微引擎网络到达目的模块(如:片外存储、协处理器等)。这种结构的路由很容易造成局部拥塞、负载不均衡、延迟大等问题。下面以一个256核的网络处理器为例介绍,如图3所示,是一个采用常规结构的256核网络处理器中微引擎互连的结构图,可以看出路由算法的复杂度、可靠性、带宽、可实现性的难度都是非常大的。
本发明实施例采用多层次结构方案,前面已经描述过组织结构,即采用“cluster-group-me”层次结构。微引擎数量为me_num,cluster数量为cluster_num,每个cluster中group数量为group_num,每个group中微引擎数量为group_me_num,那么它们之间的关系可以用如下的公式表示:
me_num=cluster_num×group_num×group_me_num
公式中各个参数的选取,应该综合考虑带宽与后端实现等因素。
以一个256核网络处理器为例介绍,本发明实施例的权利保护范围不限于此例。将4个微引擎组成一个group,4个group组成一个cluster,16个cluster采用二维mesh结构,如图4所示。路由模块在网格中间,也采用二维mesh结构,每个路由模块负责向其上下左右4个cluster输入输出报文、访问片外存储、协处理模块等,同时路由模块之间的互连完成报文、访问片外存储请求与返回、访问协处理模块请求与返回的路由,完成报文、请求或返回到指定目的cluster或调度模块的传输。这种结构的路由节点只有4个,相比于常规结构的256个节点,节点数量大大减少,节点数量减少带来的好处是,路由算法简单,易于硬件实现,同时可以很好地实现负载均衡。一个cluster中微引擎的组织结构,有group一层,group里面再是4个me,如图5所示。
本发明的报文映射的过程如图6所示,报文向空闲指针fifo申请指针,将报文存储在缓存中的相应地址,指针存入相应流队列。流队列采用轮询的仲裁机制,调度到映射模块进行报文到微引擎的映射。根据报文中的流号flow_num,查对应的流映射表,得到当前的映射表结果。如果查表结果为“无效映射”,表示当前流是一条新流或者是一条映射关系已经老化删除的流,按照如下原则映射:
如果有完全空闲的微引擎,按照映射表中,微引擎的顺序,选择第一个完全空闲的微引擎。这样做的目的是,该微引擎是完全空闲的微引擎中最后使用的微引擎,指令cache中可能还存有有效指令,可以提高指令cache效率。
如果没有完全空闲的微引擎,选择只有1条流在其中,且空闲线程数最多的微引擎。保证一个内核中最多只有2条流,指令cache效率几乎没有损失,但微引擎的处理能力浪费可以减少很多。
如果上述2个条件都不满足,则将报文重新入队,等待下次轮询到再重新映射。重新入队的报文,下次轮询到该队列时,优先映射。
如果查表结果可以找到有效映射关系,那么将映射表头的微引擎做为处理微引擎。在前面发明内容中已经介绍了映射表的动态更新机制,映射表会根据监控的微引擎状态自动将最新的映射结果放在表头,旧的映射依次向后移。
映射表的动态更新在前面发明内容中已经很详细地描述,在实施示例中不再重复。
按照上述的映射步骤与映射表动态更新机制,可以做到尽可能地将同一条流的报文送到最近使用的微引擎中处理,指令cache效率得以提升,同时也大大降低了报文的乱序程度。
此外,优先选择完全空闲的微引擎、优先选择线程数最多的微引擎、保证一个内核中最多只有2条流,这些规则保证了报文在微引擎中分布的均衡。
虽然以上的描述中,微引擎的组织架构是全并行的,但是本发明的另一个优点在于,它同时可以支持串行的组织结构。很长一段时间,商用网络处理器中,串行微引擎结构是一种主流的架构,它具有性能可保证、无乱序等优点。本发明实现串行结构的实施案例如下:
所有报文从第一个cluster进,经过处理后,通过微码指定其下一级的处理cluster编号,报文出第一个cluster后,在路由模块中,根据微码指定其下一级的cluster编号将报文从到下一个cluster,如此直到报文经过所有cluster后,完成报文处理。如图7所示。
本发明也支持串并混合的方式,一个具体的实施案例如图8所示,每4个cluster一组,每组cluster内部报文串行在4个clustre之间逐级处理。4组cluster之间是并行的。报文进来后,首先进行1到4的调度,将报文发送都4组cluster中的一个,然后报文在选择的组中,逐级通过4个cluster,最后4组cluster的报文通过一个4到1的汇聚,将报文输出。
本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (11)
1.一种基于众核网络处理器中微引擎的报文调度方法,其特征在于,所述方法包括:
当有报文输入时,为所述报文申请空闲指针;
将所述报文存储至共享缓存中所述指针指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;
当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;
当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列;
其中,所述当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列包括:
如果有完全空闲的微引擎,按照映射表中微引擎的顺序,选择第一个完全空闲的微引擎;
如果没有完全空闲的微引擎,选择只有1条流在其中,且空闲线程数最多的微引擎;
如果上述2个条件都不满足,则将所述指针再次存储至对应的流队列。
2.根据权利要求1所述的基于众核网络处理器中微引擎的报文调度方法,其特征在于,每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数。
3.根据权利要求2所述的基于众核网络处理器中微引擎的报文调度方法,其特征在于,所述方法还包括:
根据所述报文状态的更新,更新所述动态映射表。
4.根据权利要求3所述的基于众核网络处理器中微引擎的报文调度方法,其特征在于,所述根据所述报文状态的更新,更新所述动态映射表,包括:
当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
5.根据权利要求4所述的基于众核网络处理器中微引擎的报文调度方法,其特征在于,所述方法还包括:
在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
6.一种基于众核网络处理器中微引擎的报文调度系统,其特征在于,所述系统包括:
申请单元,用于当有报文输入时,为所述报文申请空闲指针;
存储单元,用于将所述报文存储至共享缓存中所述指针指向的位置,以及将所述指针存储至对应的流队列,其中,所述流队列之间采用轮询调度方式进行调度;
调度单元,用于当所述流队列中的指针被调度时,查找所述指针对应的微引擎,以将所述指针对应的报文映射到所述微引擎;
所处存储单元,还用于当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列;
其中,所述当未查找到所述指针对应的微引擎时,将所述指针再次存储至对应的流队列包括:
如果有完全空闲的微引擎,按照映射表中微引擎的顺序,选择第一个完全空闲的微引擎;
如果没有完全空闲的微引擎,选择只有1条流在其中,且空闲线程数最多的微引擎;
如果上述2个条件都不满足,则将所述指针再次存储至对应的流队列。
7.根据权利要求6所述的基于众核网络处理器中微引擎的报文调度系统,其特征在于,每一条流队列维护一个动态映射表,每条流队列的动态映射表中,条目0到条目N-1的初始值依次为微引擎0到微引擎N-1;
其中,N为微引擎总数。
8.根据权利要求7所述的基于众核网络处理器中微引擎的报文调度系统,其特征在于,所述系统还包括:
更新单元,用于根据所述报文状态的更新,更新所述动态映射表。
9.根据权利要求8所述的基于众核网络处理器中微引擎的报文调度系统,其特征在于,所述更新单元,还用于当所述报文完成映射或所述报文在微引擎中处理完成后,更新如下状态:
所述微引擎是否完全空闲的标志;
所述微引擎被1条还是2条流队列占用的标志;
所述微引擎中的空闲线程数;
所述微引擎中被2条流队列占用时,每条流队列各占用线程的数目;
所述流队列在所有微引擎中的报文总数统计。
10.根据权利要求9所述的基于众核网络处理器中微引擎的报文调度系统,其特征在于,所述更新单元,还用于在所述状态更新后,根据更新后的所述状态按照如下规则更新动态映射表:
当所述流队列的映射表的表头中的微引擎中没有报文或只有1条流队列,且有空闲线程时,则不更新所述映射表;
当所述流队列的映射表的表头中的微引擎只有1条队列流,且没有空闲线程时,按照所述映射表中的顺序从表头开始,按照如下规则选择微引擎:
优先选择完全空闲的微引擎;其次选择只有1条流队列且空闲线程最多的微引擎;如果以上两者都不满足,向所述映射表写入无效标志;根据以上规则,将选中的微引擎编号移至所述映射表的表头,所述映射表中的其余条目依次向后移动;
当所述流队列的映射表的表头中的微引擎中有2条流队列,且有空闲线程时,按照如下规则更新所述映射表:
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且有完全空闲的微引擎时,将占用线程少的流队列重新映射到完全空闲的微引擎中,其中,优先选择所述映射表中靠前的空闲微引擎;
当所述微引擎中一条流队列占用的线程数目大于另外一条流队列,且没有完全空闲的微引擎时,保持映射关系不变;
当所述流队里的映射表的表头中的微引擎有2条流队列,且没有空闲线程时,按照如下规则更新所述映射表:
对于占用线程数目较少的流队列对应的映射表,优先选择映射表中靠前的完全空闲的微引擎,其次选择只有1条流队列且空闲线程最多的微引擎;否则保持所述映射表不变;将选择的微引擎移到所述映射表的头部,其余条目依次后移;对于所述微引擎中的另外一条流队列,保持所述映射表不变;
当所述流队列在所有微引擎中的报文总数为0,且超过一定的时间阈值时,将所述流队列的映射表条目全部置为无效。
11.一种众核网络处理器,其特征在于,所述处理器由多个微引擎组成;其中,所述处理器还包括如权利要求6至10任一项所述的报文调度系统。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510695926.1A CN106612236B (zh) | 2015-10-21 | 2015-10-21 | 众核网络处理器及其微引擎的报文调度方法、系统 |
PCT/CN2016/088163 WO2017067215A1 (zh) | 2015-10-21 | 2016-07-01 | 众核网络处理器及其微引擎的报文调度方法、系统、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510695926.1A CN106612236B (zh) | 2015-10-21 | 2015-10-21 | 众核网络处理器及其微引擎的报文调度方法、系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106612236A CN106612236A (zh) | 2017-05-03 |
CN106612236B true CN106612236B (zh) | 2020-02-07 |
Family
ID=58556696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510695926.1A Active CN106612236B (zh) | 2015-10-21 | 2015-10-21 | 众核网络处理器及其微引擎的报文调度方法、系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106612236B (zh) |
WO (1) | WO2017067215A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109257280B (zh) * | 2017-07-14 | 2022-05-27 | 深圳市中兴微电子技术有限公司 | 一种微引擎及其处理报文的方法 |
CN109391556B (zh) * | 2017-08-10 | 2022-02-18 | 深圳市中兴微电子技术有限公司 | 一种报文调度方法、装置及存储介质 |
CN107579921B (zh) * | 2017-09-26 | 2020-09-25 | 锐捷网络股份有限公司 | 流量控制方法及装置 |
CN108833299B (zh) * | 2017-12-27 | 2021-12-28 | 北京时代民芯科技有限公司 | 一种基于可重构交换芯片架构的大规模网络数据处理方法 |
CN108762810B (zh) * | 2017-12-27 | 2021-01-08 | 北京时代民芯科技有限公司 | 一种基于并行微引擎的网络报文头处理器 |
EP3893122A4 (en) * | 2018-12-24 | 2022-01-05 | Huawei Technologies Co., Ltd. | NETWORK PROCESSOR AND MESSAGE PROCESSING METHOD |
CN111262792B (zh) * | 2020-01-17 | 2022-04-01 | 新华三信息安全技术有限公司 | 报文转发方法、装置、网络设备及存储介质 |
CN114285807B (zh) * | 2021-12-22 | 2024-06-18 | 中国农业银行股份有限公司 | 一种报文信息管理方法、装置、服务器和存储介质 |
CN114415969B (zh) * | 2022-02-09 | 2023-09-29 | 杭州云合智网技术有限公司 | 交换芯片报文动态存储方法 |
CN117956054B (zh) * | 2024-03-26 | 2024-06-11 | 上海云豹创芯智能科技有限公司 | 在rdma中实现定时器处理的方法、系统、芯片及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072176A (zh) * | 2007-04-02 | 2007-11-14 | 华为技术有限公司 | 一种报文处理的方法和系统 |
CN101739241A (zh) * | 2008-11-12 | 2010-06-16 | 中国科学院微电子研究所 | 一种片上多核dsp簇和应用扩展方法 |
CN104156267A (zh) * | 2013-05-14 | 2014-11-19 | 华为技术有限公司 | 任务分配方法、任务分配装置及片上网络 |
CN104394096A (zh) * | 2014-12-11 | 2015-03-04 | 福建星网锐捷网络有限公司 | 一种基于多核处理器的报文处理方法及多核处理器 |
-
2015
- 2015-10-21 CN CN201510695926.1A patent/CN106612236B/zh active Active
-
2016
- 2016-07-01 WO PCT/CN2016/088163 patent/WO2017067215A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072176A (zh) * | 2007-04-02 | 2007-11-14 | 华为技术有限公司 | 一种报文处理的方法和系统 |
CN101739241A (zh) * | 2008-11-12 | 2010-06-16 | 中国科学院微电子研究所 | 一种片上多核dsp簇和应用扩展方法 |
CN104156267A (zh) * | 2013-05-14 | 2014-11-19 | 华为技术有限公司 | 任务分配方法、任务分配装置及片上网络 |
CN104394096A (zh) * | 2014-12-11 | 2015-03-04 | 福建星网锐捷网络有限公司 | 一种基于多核处理器的报文处理方法及多核处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN106612236A (zh) | 2017-05-03 |
WO2017067215A1 (zh) | 2017-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106612236B (zh) | 众核网络处理器及其微引擎的报文调度方法、系统 | |
US8505013B2 (en) | Reducing data read latency in a network communications processor architecture | |
US8935483B2 (en) | Concurrent, coherent cache access for multiple threads in a multi-core, multi-thread network processor | |
US8514874B2 (en) | Thread synchronization in a multi-thread network communications processor architecture | |
CN104821887B (zh) | 通过具有不同延迟的存储器进行分组处理的设备和方法 | |
US8910171B2 (en) | Thread synchronization in a multi-thread network communications processor architecture | |
US8868889B2 (en) | Instruction breakpoints in a multi-core, multi-thread network communications processor architecture | |
JP2016195375A (ja) | 複数のリンクされるメモリリストを利用する方法および装置 | |
US20130219091A1 (en) | Island-Based Network Flow Processor Integrated Circuit | |
JP2015522991A (ja) | サーバノード相互接続デバイス及びサーバノード相互接続方法 | |
US8018958B1 (en) | System and method for fair shared de-queue and drop arbitration in a buffer | |
US9727499B2 (en) | Hardware first come first serve arbiter using multiple request buckets | |
US9755983B1 (en) | Minipacket flow control | |
US9405713B2 (en) | Commonality of memory island interface and structure | |
US20150309755A1 (en) | Efficient complex network traffic management in a non-uniform memory system | |
US9401880B1 (en) | Flow control using a local event ring in an island-based network flow processor | |
CN117749726A (zh) | Tsn交换机输出端口优先级队列混合调度方法和装置 | |
US9588928B1 (en) | Unique packet multicast packet ready command | |
US8670454B2 (en) | Dynamic assignment of data to switch-ingress buffers | |
US9282051B2 (en) | Credit-based resource allocator circuit | |
WO2023209508A1 (en) | Multitasking scheme for quantum computers | |
US8559436B2 (en) | Processing resource management in an island-based network flow processor | |
US9727512B1 (en) | Identical packet multicast packet ready command | |
US10069767B1 (en) | Method of dynamically allocating buffers for packet data received onto a networking device | |
US10341246B1 (en) | Update packet sequence number packet ready command |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |