队列单周期调度方法和装置制造方法

文档序号:7980862阅读:240来源:国知局
队列单周期调度方法和装置制造方法
【专利摘要】本发明提供了一种队列单周期调度方法和装置,其中,该方法包括:根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存;根据出队规则,选取出队的暂存队列,根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换。本发明采用综合队列的队列号调度与队列的包描述符调度的2级调度,达到单周期的出队调度,最大限度地提高了出队能力和出队带宽,使得在较小系统时钟频率下,达到较高出队带宽,大大降低了芯片功耗,提高了出队的性能。
【专利说明】队列单周期调度方法和装置【技术领域】
[0001]本发明涉及队列调度技术,尤其涉及一种队列单周期调度方法和装置。
【背景技术】
[0002]队列调度,即队列通过某种触发检查(比如接收到授权触发等),仲裁队列的出队条件,按照一定的规则调度队列有序的出队。常用的调度算法主要有轮询(RR,RoundRobin)调度算法和严格优先级(SP, Strict Priority)调度算法。
[0003]轮询调度算法的实现原理是按照一定的顺序逐个、循环轮询队列出队。在每个时钟周期调度一个队列出队,然后在下一个时钟周期轮询下一个队列调度出队。而严格优先级调度算法是给队列设定不同的优先级,每次调度最高优先级的队列出队,低优先级的队列只有在高优先级队列不满足出队条件后才能得到出队调度。
[0004]随着芯片相关的软、硬件技术的发展,对流量管理芯片处理流量大小,包转发率,队列的调度复杂度等等提出较高的要求,比如要求处理流量达到上100G,包转发率达到100MPPS,队列的调度不仅仅要求满足严格优先级,公平轮询调度,还要涉及到多目的端口
调度等等。
[0005]包转发率与系统主频成正比,因此,包转发率的提高,往往通过提高系统主频,t匕如,主频100MHZ下处理出队的包转发率是20MPPS时,要将包转发率提高到100MPPS时,主频务必就要提高到500MHZ,主频的提高,无疑就芯片设计难度大大加大,如果想将包转发率提高到300MPPS时,主频务必就要达到1.5GHZ,这对当今芯片设计来说,是不可能实现的事情。
[0006]目前,受限于主频带宽限制情况下,主要通过增加调度流水处理,缩短调度周期来达到增加包转发率,但受限于流水级数,队列调度的复杂度,不能大幅缩短调度周期,比如调度复杂度大,流水级数多时,对于少队列的调度,在队列间切换时,就达不到带宽要求。

【发明内容】

[0007]本发明实施例提供了一种队列单周期调度方法和装置,以克服现有技术无法达到包转发率预期要求的问题。
[0008]本发明实施例提供了一种队列单周期调度方法,该方法包括:
[0009]根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存;
[0010] 根据出队规则,选取出队的暂存队列,根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换。
[0011 ] 优选地,所述调度规则或所述出队规则包括优先级调度、公平轮询以及分目的标识调度中的一种或多种。
[0012]优选地,所述方法还包括:[0013]设置b个寄存器组,每个寄存器组有a个寄存器,所述a个寄存器用于暂存读取到的同一队列的a组描述符信息,该a组描述符信息分别表不对应队列包第I~a个切片的信息。
[0014]优选地,所述根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存,包括:
[0015]接收读使能信号,读取预出队的队列号,以所述队列号为地址读取对应队列的a组描述符信息,然后将所述a组描述符信息分别暂存在b个寄存器组中的对应位置。
[0016]优选地,所述根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换,包括:
[0017]所述根据所述首包描述符信息和获取的所述暂存队列的包切片节点信息在出当前暂存队列包的当前切片时,判断第c个切片是否是包尾切片,若是,则在出所述当前切片时发送读使能信号,若不是,则将该下一切片作为当前切片,继续出当前切片;其中,b ≥ C,c ≥3, a ≥ b+3 ο
[0018]优选地,a优选为6,b和c优选为3。
[0019]本发明实施例还提供了一种队列单周期调度装置,该装置包括:
[0020]队列预出队调度模块,用于根据调度规则调度出预出队的队列号;
[0021]队列描述符链表模块,用于以所述预调度模块调度出的所述队列号为地址,读取对应队列的包描述符信息,向到队列描述符调度出队模块发送所述对应队列的包描述符信息;
[0022]队列描述符链表节点模块,用于保存所有队列的包切片节点信息,所述包切片节点信息包括对应队列的包描述符信息和切片的地址信息;
[0023]所述队列描述符调度出队模块,用于将所述队列描述符链表模块发送的所述对应队列的首包描述符信息暂存在对应的寄存器组中,根据出队规则,选取出队的暂存队列,根据该暂存队列的首包描述符信息调度出首包首切片,然后根据该暂存队列的首包描述符信息,从所述队列描述符链表节点模块读取出该暂存队列的下一切片,以时钟周期为单位依次出包,直到队列切换。
[0024]优选地,所述调度规则或所述出队规则包括优先级调度、公平轮询以及分目的标识调度中的一种或多种。
[0025]优选地,所述队列描述符调度出队模块中设置有b个寄存器组,每个寄存器组有a个寄存器,所述a个寄存器用于暂存读取到的同一队列的a组描述符信息,该a组描述符信息分别表不该队列包第I~a个切片的信息。
[0026]优选地,所述队列预出队调度模块,具体用于:接收读使能信号,读取预出队的队列号;所述队列描述符链表模块,具体用于:以所述队列号为地址,读取对应队列的a组描述符信息,然后将所述a组描述符信息分别暂存在所述b个寄存器组中的对应位置。
[0027]优选地,所述队列描述符调度出队模块,具体用于:
[0028]根据所述包描述符信息和从所述队列描述符链表节点模块获取的所述暂存队列的包切片节点信息在出队列包的当前切片时,判断第c个切片是否是包尾切片,若是,则在出所述当前切片时发送读使能信号,若不是,则将该下一切片作为当前切片,继续出当前切片;其中,b ≥c, c ≥ 3, a≥ b+3 ο[0029]其中,a优选为6,b和c优选为3。
[0030]上述队列单周期调度方法和装置,采用综合队列的队列号调度与队列的包描述符调度的2级调度,达到单周期的出队调度,即每个周期都可以调度I个包出队,最大限度地提高了出队能力和出队带宽,使得在较小系统时钟频率下,达到较高出队带宽,大大降低了芯片功耗,提高了出队的性能,支持各种出队规则,开发维护也很简单。
【专利附图】

【附图说明】
[0031]图1为本发明基于链表的队列单周期调度方法第一级调度的流程图;
[0032]图2为本发明基于链表的队列单周期调度方法的调度规则示意图;
[0033]图3为本发明基于链表的队列单周期调度方法第二级调度的流程图;
[0034]图4为本发明基于链表的队列单周期调度装置的结构示意图。
【具体实施方式】
[0035]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0036]本发明实施例通过链表对队列号的第一级调度和对描述符的第二级调度实现单周期出队,保证了每个时钟周期都出包,保证了出队按照不同目的ID公平轮询出队,同一目的ID的队列根据优先级不同按照严格优先级出队,同一优先级按照公平轮询出队。本发明是在专利PCT/CN2010/071225基于链表的队列调度方法与装置基础上增加一级对描述符的调度,以此达到单周期调度。第一级链表调度在专利PCT/CN2010/071225基于链表的队列调度方法与装置基础上也丰富了调度规则,增加了发往不同目的ID队列的调度。专利PCT/CN2010/071225基于链表的队列调度方法与装置仅实现对队列号的调度,无法实现单周期出队功能。
[0037]本发明实施例提供了一种队列单周期调度方法,该方法包括:
[0038]步骤一、根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存;
[0039]步骤二、根据出队规则,选取出队的暂存队列,根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换。
[0040]其中,根据调度规则调度出预出队的队列号的过程如图1所示,该第一级调度过程包括以下步骤:
[0041]步骤101、设置排队链表中的地址数不少于队列数,并按队列所属优先级将所述排队链表划分为不同的排队子链表,其中,所述排队子链表中的地址数不少于所述排队子链表所对应优先级下的所有队列数;为各队列设置标识其是否在所述排队链表中排队的排队链表标识符;
[0042]步骤102、在将符合排队条件的队列添入所述排队链表之前,根据所述队列的排队链表标识符判断所述队列是否已在所述排队链表中排队,若已排队则不作添入处理,若未排队则将所述队列添入所述队列优先级对应的排队子链表的链表尾部,并将所述队列的排队链表标识符修改为已在所述排队链表中排队的标识;
[0043]步骤103、根据调度规则调度出队的队列号。
[0044]具体调度规则如图2所示,调度出队时,发往不同目的ID的队列采用RR调度,发往同一目的ID的队列内部,根据优先级,不同优先级按严格优先级调度,同一优先级按公平轮询调度,调度过程包括以下步骤:
[0045]设定队列有η个目的ID,同一目的ID内部有m个优先级,入队时,队列进入排队链表时,根据队列属性(目的ID号,队列优先级),进入对应的子链表中,同一目的ID同一优先级的队列进入同一条子链表中;出队时,根据各目的ID子链表空标志,对不同目的ID的队列出队,根据公平轮询原则,先从目的ID中选择预出的目的ID,即选择这η个目的ID中的某一个,然后,在该目的ID内部,从最高优先级往低优先级出队,只有高优先级出队完了才能轮到低优先级出队。
[0046]考虑到单周期调度时序,m和η的值不宜过大,建议m*n的值小于64取值。
[0047]图3为本发明基于链表的队列单周期调度方法第二级调度的流程图,如图3所示,本发明基于链表的队列单周期调度方法第二级调度包括以下步骤:
[0048]步骤301、设定队列描述符链表有a个子链表,设定b个寄存器组,每组寄存器组有a个寄存器,用于暂存第一级调度读取到的同一队列的a组描述符信息,分别表示该队列包第I?a个切片(BLOCK)信息;
[0049]步骤302、往第一级调度队列预出队调度模块发读使能,读取第一级调度出的队列号,以该队列号为地址,读取队列描述符链表模块内该队列的a组子链表信息,然后分别暂存在b组寄存器组中对应位置;
[0050]给第一级预出队调度模块的读使能,在b组寄存器组有空闲寄存器时给出,或者在b组寄存器中,有队列出队完成或者即将出队完成时给出;
[0051]步骤303、出队时,要达到单周期出队,就不能浪费一个时钟周期,必须保证每一个时钟周期都要进行正确出队(按照出队规则出队),设定队列在包比较多时,一次连续出队c (c介于3和b之间)个(因为如若不然,就会出现浪费出队周期现象,比如,I个暂存队列有多个小包(I个切片BLOCK的包),该队列优先级高,其他暂存队列均为低优先级队列时,如果高优先级不连续出队,在出完第一个切片后,由于没有其他高优先级队列,就务必会转到低优先级出队,不满足严格优先级出队原则。如果高优先级队列不连续出队3个切片以上,就会造成出完2个切片后,由于读切片节点下一跳的RAM延时,至少要2个时钟周期,那么出完第二个切片后,读下一跳切片节点没有返回,就会使得下一个时钟周期浪费或者转到低优先级出队,如果高优先级队列出3个切片以上,就正好接上读切片节点下一跳的返回,使得高优先级队列一直连续出队,不被低优先级抢占带宽;暂存寄存器个数b—定要不小于3,原因在于,如果系统有很多队列,每个队列里均有包I个,那么,每个暂存寄存器中均只有I个包,每个暂存寄存器均只出包I次,就要往第一级调度模块发起读操作,由于读到的队列号再去读队列描述符链表模块至少有2个时钟周期的延迟,表示要接上这个读返回出队,暂存至少要在3个时钟周期内不间断出队,也就意味着暂存寄存器组数不能小于3),队列在包切片个数小于3个情况下,只出I个切片。暂存寄存器组的描述符出队就采用连续出队与不连续出队自适应出队,达到不浪费一个时钟周期的目的。在连续出队时,在出第一个切片时判断,第c个切片是否是包尾,是否需要根据规则转到其他暂存寄存器组出队,如果出完这C个切片后要转到其他暂存寄存器组出队,在第一个切片时就要向第一级调度发起读使能操作,读下一个队列的描述符替换该队列出完C个切片后的暂存寄存器组;
[0052]步骤304、b组暂存寄存器组间的出队顺序采用图2所示的调度规则出队,先进入暂存寄存器组的队列不一定会优先出队,须满足图2所示的调度规则出队(因为如若不然,即使第一级调度的队列号是满足图2所示的调度规则,但是调度出队的描述符却不是按照图2所示的规则出队,那整个队列出包就不满足图2所示调度规则出队)。图2所示规则在b组暂存寄存器组间的实现是,根据暂存寄存器队列的目的ID属性,选出那组暂存寄存器组或那几组满足,然后再选出的几组寄存器组间判断队列优先级属性,优先级高的寄存器组获得优先出队,如果优先级相同的,则记录队列进入暂存寄存器组的时间先后顺序,先进暂存的优先出队,达到公平轮询出队要求。
[0053]以上步骤中所设定的参数a,b,c之间有一定的关系,b不小于c,c不小于3,a不小于b+3。考虑到资源和实现复杂度,a, b, c不宜过大,建议采用:a取6, b和c取3即可。
[0054]图4为本发明基于链表的队列单周期调度装置的结构示意图,如图4所示,本发明基于链表的队列调度装置包括:队列预出队调度模块40、队列描述符链表模块41、队列描述符链表节点模块42和队列描述符调度出队模块43 ;其中:
[0055]队列预出队调度模块,用于根据调度规则调度出预出队的队列号;
[0056]队列描述符链表模块,用于以所述预调度模块调度出的所述队列号为地址,读取对应队列的包描述符信息,向到队列描述符调度出队模块发送所述对应队列的包描述符信息;
[0057]队列描述符链表节点模块,用于保存所有队列的包切片节点信息,所述包切片节点信息包括对应队列的包描述符信息和切片的地址信息;
[0058]所述队列描述符调度出队模块,用于将所述队列描述符链表模块发送的所述对应队列的首包描述符信息暂存在对应的寄存器组中,根据出队规则,选取出队的暂存队列,根据该暂存队列的首包描述符信息调度出首包切片,然后根据该暂存队列的首包描述符信息,从所述队列描述符链表节点模块读取出该暂存队列的下一切片,以时钟周期为单位依次出包,直到队列切换。
[0059]另外,该队列预出队调度模块相当于PCT/CN2010/071225中的队列号调度单元,只是调度规则更丰富;当然,该装置也可以包括PCT/CN2010/071225中相应装置的设置单元、划分单元、判断单元、添入单元和标识修改单元。
[0060]具体地,队列描述符链表模块,主要将队列中包按照包BLOCK切片串联起来。每个包根据BLOCK的大小,被分为多个BLOCK切片,该队列的所有BLOCK切片用链表串联起来,每次出队调度一个切片出队,调度一个完整的包后才能切换到其他队列调度。描述符链表模块的链表数目与队列数相同,每条链表的首尾记录该队列首包和尾包的地址。为达到单周期调度同一队列,考虑到储存器RAM有多个时钟周期的读延时,将同一队列的描述符链表分为多条子链表,读同一队列时,能够同时得到这多条子链表的信息;
[0061]队列描述符链表节点模块,主要储存所有队列的BLOCK节点信息,节点信息包括队列的描述符信息,队列下一跳的BLOCK地址。队列入包往链表节点模块中写新加入节点,出队读出预出队的节点信息。[0062]队列描述符调度出队模块,根据从队列预出队调度模块读取的出队队列号,到队列描述符中读取队列首地址,暂存在队列描述符调度出队模块,供出队时调度暂存的队列描述符首包出队,到达第二级调度。暂存的描述符调度,同队列的调度规则一样,也分为严格优先级调度,公平轮询调度,以及分目的ID调度。
[0063]其中,第一级出队时,根据出队规则,从队列预出队调度模块调度出预出队的队列号,然后以此作为地址,从队列描述符链表模块读取该队列的首包描述符信息,暂存到队列描述符调度出队模块,进行第二级调度。调度时,每个时钟周期都可以调度出预出队队列号。
[0064]第二级调度时,调度规则同第一级调度一样,根据第一级调度结果,调度出出队的暂存队列,以该暂存队列为地址调度出队列首包首切片,然后根据首包描述符信息,从队列描述符链表节点模块读取该队列首包次切片或次包首切片,依次出包,直到队列切换,完成队列出队。调度时,每个时钟周期都可以出包,达到单周期调度出队。
[0065]本领域技术人员应当理解,队列描述符调度出队模块43是基于链表的队列单周期调度装置的核心必要部件。
[0066]本领域技术人员应当理解,本发明图4所示的装置是为实现图1和图3所示的过程而设计的,图4所示装置中的各模块的功能可参照图1和图3所示方法中的相关描述来理解,各模块的功能可通过运行于处理器上的程序而实现,也可通过相应的逻辑电路而实现。
[0067]众所周知,单纯进行单周期调度队列号并不难,难在不能准确完整地获知队列信息(储存受限关系,不可能将所有队列所有包的信息都准确储存时),以此来达到单周期出队。因为,出队前仅获知队列有包和授权,不知队列包个数,不知队列包的切片数目(BLOCK数目)情况下,出完第一个包的头一个切片(BLOCK)时,还没有读到下一个包下一个BLOCK信息,以及下一个即将出队队列的包的信息,无法感知下个时钟周期的出队情况。因为如果这个时钟周期出队结束,下个时钟周期就必须接上下个队列出队,否则出现间断,达不到单周期出队。瓶颈根源在于队列的所有包信息储存在储存器中,只有出队之后,才能获知下个出队情况,而这时候再去拿选出的队列出队,就达不到单周期连续出队。基于此瓶颈,本发明实施例采用将队列号的调度与描述符的调度分开进行二级调度,以此达到单周期调度目的,并且各级调度都按照调度规则,保证了每个出队都是严格按照调度规则出队。
[0068]采用本发明实施例的方法和装置,与现有技术相比,取得了发往不同目的ID的队列按照公平轮询出队,同一目的ID的队列根据内部优先级按照不同优先级严格优先级出队,同一优先级公平轮询出队,所有出队在单周期调度完成,最大限度提高了出队能力和出队带宽,使得在较小系统时钟频率下,达到较高出队带宽,大大降低了芯片功耗,提高了出队的性能,支持各种出队规则,开发维护也很简单。
[0069]以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
【权利要求】
1.一种队列单周期调度方法,其特征在于,该方法包括: 根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存; 根据出队规则,选取出队的暂存队列,根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换。
2.根据权利要求1所述的方法,其特征在于: 所述调度规则或所述出队规则包括优先级调度、公平轮询以及分目的标识调度中的一种或多种。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括: 设置b个寄存器组,每个寄存器组有a个寄存器,所述a个寄存器用于暂存读取到的同一队列的a组描述符信息,该a组描述符信息分别表不对应队列包第I~a个切片的信息。
4.根据权利要求3所述的方法,其特征在于: 所述根据调度规则调度出预出队的队列号,以所述队列号为地址读取对应队列的首包描述符信息,将读取到的所述对应队列的首包描述符信息进行暂存,包括: 接收读使能信号,读取 预出队的队列号,以所述队列号为地址读取对应队列的a组描述符信息,然后将所述a组描述符信息分别暂存在b个寄存器组中的对应位置。
5.根据权利要求4所述的方法,其特征在于: 所述根据所述暂存队列的首包描述符信息和获取的所述暂存队列的包切片节点信息以时钟周期为单位连续出暂存队列包的所有切片,直到队列切换,包括: 所述根据所述首包描述符信息和获取的所述暂存队列的包切片节点信息在出当前暂存队列包的当前切片时,判断第c个切片是否是包尾切片,若是,则在出所述当前切片时发送读使能信号,若不是,则将该下一切片作为当前切片,继续出当前切片;其中,b ^ C,c ^ 3, a ^ b+3。
6.根据权利要求5所述的方法,其特征在于: a优选为6, b和c优选为3。
7.一种队列单周期调度装置,其特征在于,该装置包括: 队列预出队调度模块,用于根据调度规则调度出预出队的队列号; 队列描述符链表模块,用于以所述预调度模块调度出的所述队列号为地址,读取对应队列的包描述符信息,向到队列描述符调度出队模块发送所述对应队列的包描述符信息;队列描述符链表节点模块,用于保存所有队列的包切片节点信息,所述包切片节点信息包括对应队列的包描述符信息和切片的地址信息; 所述队列描述符调度出队模块,用于将所述队列描述符链表模块发送的所述对应队列的首包描述符信息暂存在对应的寄存器组中,根据出队规则,选取出队的暂存队列,根据该暂存队列的首包描述符信息调度出首包首切片,然后根据该暂存队列的首包描述符信息,从所述队列描述符链表节点模块读取出该暂存队列的下一切片,以时钟周期为单位依次出包,直到队列切换。
8.根据权利要求7所述的装置,其特征在于: 所述调度规则或所述出队规则包括优先级调度、公平轮询以及分目的标识调度中的一种或多种。
9.根据权利要求7或8所述的装置,其特征在于: 所述队列描述符调度出队模块中设置有b个寄存器组,每个寄存器组有a个寄存器,所述a个寄存器用于暂存读取到的同一队列的a组描述符信息,该a组描述符信息分别表示该队列包第I~a个切片的信息。
10.根据权利要求9所述的装置,其特征在于: 所述队列预出队调度模块,具体用于:接收读使能信号,读取预出队的队列号; 所述队列描述符链表模块,具体用于:以所述队列号为地址,读取对应队列的a组描述符信息,然后将所述a组描述符信息分别暂存在所述b个寄存器组中的对应位置。
11.根据权利要求10所述的装置,其特征在于: 所述队列描述符调度出队模块,具体用于: 根据所述包描述符信息和从所述队列描述符链表节点模块获取的所述暂存队列的包切片节点信息在出队列包的当前切片时,判断第c个切片是否是包尾切片,若是,则在出所述当前切片时发送读使能信号,若不是,则将该下一切片作为当前切片,继续出当前切片;其中,b>c,c>3,a> b+3 ο
12.根据权利要求11所述的装置,其特征在于: a优选为6, b和c优选为3。
【文档编号】H04L12/863GK103546392SQ201210241141
【公开日】2014年1月29日 申请日期:2012年7月12日 优先权日:2012年7月12日
【发明者】廖庆磊 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1