一种基于分簇设计的Qos实现方法及系统
技术领域
本发明涉及网络交换芯片的拥塞管理领域,具体涉及一种基于分簇设计的Qos实现方法。
背景技术
随着网络与用户需求、应用类型与容量不断变化,对交换网络提出了更高需求,于是Qos(Quality of Service,服务质量)应该需求而生。交换网络中主要采用差分服务的Qos模型。Qos模型主要包括以下几个组件:流分类和标记、流量监管和整形、拥塞管理和拥塞避免。
数据进入网络,根据配置好的Qos机制,将网络中的数据分成不同的数据流,设置为不同的优先级,此过程称之为流分类和标记;数据转发过程中,对不同标签的数据流进行流量管理,各种业务流量限制在特定带宽,当业务流量超过额定带宽时,不合资质的流量将被丢弃或缓存,将不合资质的流量丢弃的技术称之为流量监管,将不合资质的流量缓存的技术称之为流量整形;当网络发生拥塞时,将报文放入队列中缓存,并采用某些调度算法安排报文的转发次序称之为拥塞管理;当队列缓存拥塞加剧,采取主动丢弃报文的策略,称之为拥塞避免。整个Qos的处理流程如图1所示。
传统的Qos基于端口对业务进行流量整形和调度,仅仅区分了业务,对于同一个优先级的业务进同一个端口队列,彼此竞争同一个队列资源。因此传统Qos无法对端口上多个用户的多个流量进行区分。于是基于Qos,人们提出了Hqos(Hierarchical Quality ofService,分层QoS):Hqos基于多级队列实现层次调度,不仅区分了业务,也区分了用户,提供了精细化的网络服务质量。
Qos和Hqos的队列模型如图2所示,其中第一层队列基于业务,中间层队列基于用户,第L层队列基于端口层(L大于等于2);每层队列中队列总数由用户数和业务种类决定,端口层队列总数为芯片出端口数。
虽然无论是两层队列模型还是多层队列模型,都涉及到下一层多个队列映射到上层单个队列,进行流量整形和调度;原则上,上层队列映射到下层队列的数目不做限制,最多可以等于所有上层队列数。传统的调度实现方法根据构建不同的调度链表来实现,为了避免复杂的链表管理、降低芯片面积和功耗,通常采用SP、DWRR/RR和SP+DWRR/RR的调度方式,其中SP调度队列数目固定,各优先级最多有一个SP队列;DWRR/RR队列数目不限,共用一个优先级;SP队列和DWRR/RR队列之间具有绝对优先级。但是以上模型是同一层队列间调度模型比较固定,链表的维护比较复杂,对不同数据流控制不够精细,网络服务质量有限。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于分簇设计的Qos实现方法,能够更精细的控制数据流,网络服务质量更高。
为达到以上目的,本发明实施例采取的技术方案是:
一种基于分簇设计的Qos实现方法,其特征在于,其包括以下步骤:
生成多个簇层,每个簇层包括多个有序的簇,上一簇层中的每一簇作为节点,映射其下一簇层中多个不同的连续的簇;
将待调度的多个队列,按照相同调度序列的队列对应一个簇的方式,对应至底层的簇层;
在每一个簇,根据调度优先级别对其对应的队列调度,并上报至该簇对应上一层簇层的节点;
按照从底层至顶层的顺序,进行队列调度直至顶层的簇层的簇调度完毕。
在上述技术方案的基础上,
所述簇层层级以及簇的使用个数确定方式包括:
获取待调度队列个数以及整形后的队列个数;
获取每一层簇层中单个簇映射下层簇层的个数,根据整形后的队列个数从所述簇层的顶层开始,向下反推下一层级需要使用的簇的个数,直至所有队列均能够被簇层容纳。
在上述技术方案的基础上,所述将待调度的一层队列,按照多个队列对应一个簇的方式,分配至底层的簇层,包括以下步骤:
存储每一个簇层簇层调度信息,所述簇层调度信息包括候选调度节点、候选节点的优先级别、候选节点的调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在上述技术方案的基础上,所述将待调度的多个队列,按照相同调度序列的队列对应一个簇的方式,对应至底层的簇层,还包括以下步骤:
根据队列的资质,确认本次要进行调度的队列,以及该队列对应的簇;
根据服务质量/分层服务资料Qos/Hqos中的流量整形,判断参与调度的队列的资质调度,对所述队列进行筛选,得到有效待调度队列;
获取有效待调度队列的优先级、簇调度信息和簇层调度信息,修改最低层簇层的簇的优先级别和调度信息。
在上述技术方案的基础上,所述从底层至顶层,对同一节点对应的多个簇做调度,直至顶层的簇层的簇调度完毕,包括以下步骤:
获取当前待调度簇层中最低层的簇的优先级,对该簇层中的同一节点对应的多个同一优先级别的簇做动态加权循环法DWRR/循环法RR调度,对同一节点对应的不同优先级别的簇做严格优先级SP调度,得到该层簇的调度仲裁结果,完成该层的调度;
将所述调度仲裁结果对应到各个簇映射的上层的簇,再反复执行上述步骤,逐层完成调度,直至所有簇层调度完毕,得到最终调度的队列。
本发明实施例还提供一种基于分簇设计的Qos实现系统其包括:
簇层生成模块,用于生成多个簇层,每个簇层包括多个有序的簇,上一簇层中的每一簇作为节点,映射其下一层簇层中多个不同的连续的簇;
队列分配模块,将待调度的多个队列,按照相同调度序列的队列对应一个簇的方式,对应至底层的簇层;;
调度模块,在每一个簇,根据调度优先级别对其对应的队列调度,并上报至该簇对应上一层簇层的节点;按照从底层至顶层的顺序,进行队列调度直至顶层的簇层的簇调度完毕。
在上述技术方案的基础上,其包括:多个第一类状态寄存器,一个所述第一类状态寄存器对应并存储一个节点的信息,所述节点的信息包括所述节点的优先级别、是否有资质、调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在上述技术方案的基础上,其还包括:多个第二类状态寄存器,除了最低层簇层,每个所述第二类状态寄存器对应并存储一个簇层的簇层调度信息,所述调度信息包括候选调度节点、候选节点的优先级别、候选节点的调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在上述技术方案的基础上,所述队列分配模块包括:
队列确认子模块,用于根据队列的资质确认本次需要进行调度的队列,以及该队列对应的簇;
整形子模块,用于根据服务质量/分层服务资料Qos/Hqos中的流量整形,判断参与调度的队列是否有资质调度,对所述队列进行筛选,得到有效待调度队列;
优先级修改子模块,用于获取有效待调度队列的优先级、节点的信息和簇层调度信息,修改最低层簇层的簇的优先级别和调度信息。
在上述技术方案的基础上,所述调度模块包括:
单层调度子模块,用于获取当前待调度簇层中最低层的簇的优先级,对该簇层中的同一节点对应的多个同一优先级别的簇做动态加权循环法DWRR/循环法RR调度,对同一节点对应的不同优先级别的簇做严格优先级SP调度,得到该层簇调度仲裁结果,完成该层的调度;
调用子模块,用于将所述调度仲裁结果对应到各个簇映射的上层的簇,再反复调用单层调度子模块来逐层完成调度,直至所有簇层调度完毕,得到最终调度的队列。
(1)本发明在需要对大量簇或者队列进行调度时,通过建立从底层到顶层的多个层次的逻辑连接关系,能够将现有服务质量/分层服务资料Qos/Hqos结构框架中的队列调度,分解为各个层次的簇层之间的小型调度,而小型调度相较于大型调度,因此本发明能够在数据少的状况下,运算更快,使得调度更加迅速,并能够更精细的控制数据流,网络服务质量更高。
(2)本发明根据原队列之间的顺序、映射和逻辑关系进行配置,保证了调度顺序不会因为分配队列而出现混乱,保证了调度的稳定性与准确性。
(3)本发明对新加入的队列进行调度时,只需要更新簇,重新运算调度方式,减小了调度的运算量,减小了运算所需数据,加快了调度速度。
附图说明
图1为现有Qos的处理流程图;
图2为现有Qos和Hqos的队列结构图;
图3为本发明实施例中单层队列与多个簇层的固定关系图;
图4为本发明实施例中单层调度队列模型的结构图;
图5为本发明实施例中第一状态寄存器对父节点调度状态信息的各种方式示意图;
图6为本发明实施例中基于分簇设计的Qos实现系统的结构图;
图7为本发明实施例中基于分簇设计的Qos实现方法的流程图。
具体实施方式
名词解释:
SP调度(Strict Priority调度,严格优先级调度):严格优先级调度,SP调度严格按照优先级从高到低的次序优先发送较高优先级队列中的分组,当较高优先级队列为空时,再发送较低优先级队列中的分组。队列7优先级最高,队列0优先级最低。
RR调度(Round Robin调度,循环法调度):循环调度,基于报文的公平调度,每个队列调度出对一个报文,就转下一个队列。
DWRR调度(Weighted Deficit Round Robin,动态加权循环法调度):加权差额循环调度。基于报文字节的加权调度,该算法基于两个变量:配额(quantum)和余额(creditcounter),配额代表权重,以字节为单位,是可配置的参数,余额用来表示配额的积累和消耗情况,是状态参数,不可配置。初始状态下,每个队列的余额等于其配额,当队列每发送一个报文的时候,余额就减去这个报文的字节数,当余额低于0的时候就停止这个队列的调度。当所有队列都停止调度的时候就为所有队列补充配额。权重N的范围为0~127,权重为N表示配额是(N*MTU_QUANTA)字节,这个(MTU_QUANTA为2K),N为0表示严格优先级。
Qos(Quality of Service,服务质量)技术:而当网络发生拥塞的时候,所有的数据流都有可能被丢弃;Qos技术根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量:对实时性强且重要的数据报文优先处理;对于实时性不强的普通数据报文,提供较低的处理优先级。其通过赋予某个级别的传输优先级,来标识它的相对重要性,并使用设备所提供的各种优先级转发策略、拥塞避免等机制为这些数据流提供特殊的传输服务。
HQoS(Hierarchical Quality of Service,分层QoS)技术:随着用户规模的扩大,业务种类的增多,要求以太网设备不仅能够进一步细化区分业务流量,而且还能够对多个用户、多种业务、多种流量等传输对象进行统一管理和分层调度。显然,这些应用对于传统的QoS技术来说,是很难实现的。HQoS技术将调度策略组装成了分层次的树状结构。树状结构的节点类型共有三种:根节点、分支节点和叶子节点。不同的节点上对分流流量做不同的控制动作,从而实现了对流量进行多层次、多用户、多业务的流量管理。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“上”“下”“顶”“底”“高”“低”配合簇层等层次词语使用时,是用于区别层次的高低,而不必用于区分“上”和“高”,“下”和“低”等等之间的区别。
以下结合附图对本发明的实施例作进一步详细说明。
实施例1
参见图3所示,本发明实施例1提供一种基于分簇设计的Qos实现方法,包括以下步骤:
S1、生成多个簇层,每个簇层包括多个有序的簇,上一簇层中的每一簇作为节点,映射其下一层簇层中的多个不同的连续的簇。
以四层为例,生成4层簇层,从下至上依此命名为L0层、L1层、L2层和L3层。L3层有1个簇,L3层的1个簇作为节点映射L2层所有的连续节点,L2层的簇共E个,每一L2层的簇作为一个节点映射L2层上连续的D个簇,L2层共有D*E个簇;每一个L2层的簇作为一个节点映射L1层上连续的C个簇,L1层上共有D*E*C个簇,每一个L1层上的簇作为节点映射L0层上连续的B个簇,L0层上共有D*E*C*B个簇,上述映射中同一节点映射的簇互不相同,不同节点映射的簇也各不相同。
设置多个层次的簇层能够简化并分解大规模队列的调度。当需要从B*C*D*E个簇中调度1个簇时,能够将该调度简化分解为4个小型调度:B选1、C选1、D选1和E选1。
通过创建多个簇层,并对簇层上的每一个簇进行映射,设置节点,在需要对大量簇或者队列进行调度时,通过建立从底层到顶层的多个层次的逻辑连接关系,能够将调度分解为各个层次的簇层之间的小型调度,使得调度更加简单,而小型调度相较于大型调度,数据少、运算快,使得调度更加迅速。
S2、将待调度的多个队列,按照相同调度序列的队列对应一个簇的方式,对应至底层的簇层。
如图2所示,现有的Qos/Hqos结构框架中存在多个层级,第一层队列通过映射、流量整形和调度进入第二层,第二层的队列通过映射、流量整形和调度进入第三层。如果第一层有大量的队列,第二层当前只需要调度一个第一层的队列时,将第一层的大量队列分配到各个簇层的簇中后,能够通过逐层的调度,简化复杂的调度关系。
但是,由于不同的队列所在的优先级别可能不同,为了簇层中的簇在调度时按照优先级进行调度,将该簇的优先级别和其所对应的队列的优先级别进行设置。在队列数量较大时,现有的Qos/Hqos结构框架,同一层的队列间的调度方式固定,其调度算法较复杂,消耗调度资源同时,调度效率不高,而将现有Qos/Hqos结构框架中的一层队列分配到多个簇层的不同的簇,并设置所对应簇的优先级别后,队列的调度能够依照多个簇层之间的映射关系以及簇的优先级别进行调度,多个簇层的小型调度算法简单,调度效率高,同一层中的队列能够再次进行分簇,使得同一层的队列能够通过多个模型调度,实现更加精细的数据流控制。
S3、在每一个簇,根据调度优先级别对其对应的队列调度,并上报至该簇对应上一层簇层的节点;
S4、按照从底层至顶层的顺序,进行队列调度直至顶层的簇层的簇调度完毕。
如图4所示,在现有的Qos/Hqos结构框架中,同一层的队列的优先级有相同的,也有不同的,其逻辑关系以及先后顺序也各不相同,通过将队列分配到不同的簇中,在同一个节点下的多个同一优先级别的簇可以使用DWRR/RR调度,使得同一优先级别的一簇队列能够确定调度顺序,同一节点下不同优先级别的簇则可以作SP调度,使得不同优先级别的一簇队列能够确认调度顺序,通过多个层次的不同调度,使得现有的Qos/Hqos结构框架中同一层的队列能够通过更加精细且准确的调度,实现数据流的控制。
因此,当现有的Qos/Hqos结构框架的队列对应到底层的簇层后,并根据优先级别完成簇层的调度后,得到该层的簇层的调度队列,而下层的簇是对应上层的簇的,此时可以进行底层所对应的上一层簇层的调度,这样层层递进,最终完成队列的一次调度选择。多次调度选择则需要多次的层层调度。
实施例2
参见图2所示,在实施例1的基础上,将现有服务质量/分层服务质量Qos/Hqos结构框架中的待调度的一层队列,按照多个队列对应一个簇的方式,分配至底层的簇层,需要确认队列的关系,并根据队列关系进行分配,其包括:
根据现有Qos/Hqos结构框架中的一层队列的对应关系,确认所需对应的簇之间的映射关系。
例如:现有60个队列,在一次调度中需要从60个队列选择;有底层、中层、顶层3个簇层,其从下层至上层依此有12、3、1个簇。
则其可能的分簇方式为:
将60个队列以连续的5个队列对应1个簇的方式对应到底层的簇中,再将完成队列对应的12个簇,按照连续4个簇对应1个中层,对应到中层的3个簇上,最后3个簇对应顶层的1个簇。
需要说明的是,60个队列只是数据上的举例,实际上对于现有Qos/Hqos结构框架,其队列可能远远高于此数字,而对于如此大的数目一次完成选择是十分困难的,同时需要大量缓存数据、以及数据优先级对比和判断,而本发明能够化整为零,通过多次调度选举,完成该调度,减少了调度需要的资源。
根据队列之间的连续性,确认是否对应同一节点以及同一节点下对应的顺序关系。
例如:如果队列中连续的多个队列随机打散分配到不同的节点,然后各个簇再进行流量整形和优先级调度,那么原本在一个簇中对应的队列本来由于顺序关系是相互竞争关系,而在打散后,其可能由于对应不同的簇,不再竞争并调度了顺序靠后的队列。因此,对于连续的队列需要进行顺序对应,连续的多个队列对应1个簇或者连续的2个及以上的簇,这样在进行调度筛选时候,能够保证队列顺序竞争关系不会再对应簇时候丢失。
进一步的,步骤S2还包括以下步骤:
S201:根据待调度的队列的资质、优先级别,修改簇的资质、优先级别,所述资质为Qos/Hqos结构框架的流量整形的依据.
S202:根据队列是否有资质,确认本次要进行调度的队列,以及该队列对应的簇。
S203:根据服务质量/分层服务质量Qos/Hqos中的流量整形,判断参与调度的队列是否有资质调度,对所述队列进行筛选,得到有效待调度队列。
队列进行调度时候,会确认优先级别,但是在服务质量/分层服务质量Qos/Hqos中,其需要先进行流量整形,并流量整形中调整各个队列优先级别,因此,对于需要进行调度的队列,首先进行资质的确认,判断本次调度中有资质的队列,进行流量整形。
S204:获取有效待调度队列的优先级、簇调度信息和簇层调度信息,修改最低层簇层的簇的优先级别和调度信息。
在流量整形后,进行对应调度的队列的优先级完成了对应的调整,后续需要获取对应队列的优先级来进行DWRR/RR调度和SP调度,因此,对应队列的优先级别,修改最低层簇层的簇的优先级别。
举例来说,在上述将60个队列以连续的5个队列对应1个簇的方式对应到底层的簇的例子中,需要调度满足特定条件A的队列。经过筛选,60个队列中满足特定条件A的队列有30个,其分别对应底层队列中的6个簇,并通过这底层的6个簇对应中层2个簇,中层的2个簇对应顶层的1个簇。对应参与调度的队列调整簇的优先级别,即完成了调度的准备。
根据队列原有的逻辑关系分配队列,使得队列之间的逻辑关系能够通过其分配的对应的簇之间的逻辑关系体现出来,进行簇的调度时,充分考虑队列之间的逻辑关系,调度更加合理。
需要说明的是,在现有的Qos模型中,如DiffServ模型、IntServ模型等等,会对不同的流量数据进行标记,以区分不同数据流量是否有实际内容以及资格进行调整、调度。本申请中的队列的资质包括这些模型中对数据流量的评估标记,以及本领域技术人员所知晓的对数据流量业务、资格、质量、掉包率等等指标进行评估后对应的标记。进一步的,该标记可以是数值或者预设的符号。
优选的,上述现有Qos/Hqos结构框架中的一层队列还包括有新增的队列。在网络传输中,前一时刻的队列顺序在加入优先级较高的队列后,其调度顺序应该重新进行计算或者排序。当现有Qos/Hqos结构框架中一层的队列过多时,加入新的队列,对该层调度改变比较大,需要进行的排序较复杂,其效率较低。而相对于现有的框架,本发明只需要对应的将新增的队列分配到多个簇层中的簇中,即新增的队列仅对簇层中多个节点下的小型调度有影响,而小型调度本身数据较少,结构简单,且运算效率高,因此,本发明更加稳定,易于处理新增数据流同时更加效率。
进一步的,步骤S3包括以下步骤:
S301获取当前待调度簇层中最低层的簇的优先级,对该簇层中的同一节点对应的多个同一优先级别的簇做动态加权循环法DWRR/循环法RR调度,对同一节点对应的不同优先级别的簇做严格优先级SP调度,得到该层簇调度仲裁结果,完成该层的调度。
具体来说,在队列分簇、流量整形和优先级修改完成后,在底层的簇层中的有效的簇进行调度,得到每一个有效簇的调度仲裁结果,由于底层有多个对应簇,底层的调度仲裁结果会有多个队列被选中。
S302所述调度仲裁结果对应到各个簇映射的上层的簇,再反复执行上述步骤逐层完成调度,直至所有簇层调度完毕,得到最终调度的队列。
具体的,对应步骤S301,底层调度仲裁结果中多个队列被选中。转到底层的上一层的簇层,然后继续得到每一个有效簇的调度仲裁结果,循环调度每一次层,直至顶层得到最终的调度仲裁结果。
举例来说,对应上述例子中60个队列中满足特定条件A的队列有30个,其分别对应底层队列中的4个簇,并通过这4个簇对应1个簇的情况。在调度时候,需要60个队列中满足条件A的队列中调度1个队列。那么首先得到满足条件A的30个队列,激活这30个队列以及这30个队列对应的4簇,由于队列状态变化,重新更新调度信息即优先级、调度顺序等等。根据调度信息完成4个簇的调度,获取每个簇的调度仲裁结果,即获取4个调度队列,到中层2个簇从这4个队列对应选择2个队列作为调度仲裁结果,最终顶层从2个队列中选择1个作为最终结果,即完成了60个队列中满足条件A的队列中调度1个队列的调度任务。
实施例3
在实施例1的基础上,存储所分配簇的优先级别、是否有资质、簇的调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在对队列分配后,根据优先级别调度前,优选的,对队列分配的簇的优先级别、是否有资质,簇的调度方式以及调度方式中的状态进行存储,其优先级别为簇对应其所分配队列的优先级别,使得簇层中队列的调度对应于簇的调度。
需要说明的是,优先级别为簇对应其所分配队列的优先级别,为取决于该簇对应所有队列,在下次调度时候选队列的优先级。
举例来说,一L0层的簇包含16个队列,这16个队列全部映射到一个上层队列(同一个父节点),那么下次这16个队列需要调度时,有且仅有一个队列被调度出来,该可能被调度出去的队列就是候选队列,该队列的优先级就是簇的优先级。
进一步的,在分析整个下层队列全部映射到一个上层队列,需要调度一个队列时,传统做法就是全部上层队列中调度选一个,而本发明通过分簇设计进行调度:
A1、先从激活队列所在的L0簇层的簇中选一个候选队列,该L0簇包含A个队列,则是A选1调度器。其选出来的队列就更新该L0簇层的簇的调度信息,该队列就是该L0簇层的簇的候选调度队列;
A2、接着在激活队列所在的L1簇层的簇选一个队列,该L1簇层的簇包含B个L0簇层的调度节点,每个L0节点存有调度信息,该调度信息包括其候选调度队列的信息,该候选调度队列什么优先级,做什么调度方式等,就决定了该簇的调度优先级、调度方式等,这中调度方式等于一个B选1调度器。其选出来的队列就更新该L1簇层的簇的状态寄存器,该队列就是该L1簇层的簇的候选调度队列,其候选调度队列状态就决定了该簇的状态;
A3、L2簇层的簇同理持续上述调度方式直至调度完毕
举例来说,如果上层M个连续的队列映射到一个下层队列,从该M个队列中调度一个,使用状态寄存器对应队列,并存储队列和簇层的调度信息,则:
B1、该M个连续的映射到同一个下层队列的上层队列,根据队列和簇的固定映射关系,可以推断出它处于哪些L0\L1\L2\L3覆盖中。
B2、先从激活队列所在的L0簇层的簇开始调度,判断该L0簇层的簇包含的A个队列是否参与本次调度,如果其不处于M个连续队列,则不参与调度;根据参与调度的队列状态寄存器,以及此时流量整形的状态,判断参与调度的队列是否有资质调度,从而选择出即参与调度范围内,有有资质调度的队列。在选出队列中,同一优先级内做RR/DWRR调度,不同优先级做SP调度,选择一个调度队列;该调度队列在更新该L0簇层的簇的状态寄存器,该队列就是该L0簇层的簇的一个候选调度队列(该L0簇层的簇寄存器可存储1或2个候选调度队列);
B3、从激活队列所在的L1簇层的簇调度,该L1包含了B个L0簇,根据步骤B1中,可推理出哪些L0簇层的簇处于此次调度范围内,对于在调度范围内的L0簇层的簇,读取其簇状态寄存器,得到其缓存候选调度队列的状态(该候选调度队列就是该L0簇层的簇本次如果要调度,就优先调度的,意思就是每个L0簇层的簇都选出一个分配范围内所有的队列中,本次最可能被调度的队列出来,然后在这些队列中,再比较调度,这个在比较调度就是L1簇层的簇调度);由于激活队列所在的L0簇层的簇状态有更新,所以现在其它处于范围内的L0簇层的簇(不包含L0簇层的簇)中调度出一个候选队列,该候选队列在和激活队列所在L0簇层的簇的候选队列(即步骤B2中调度出来的队列)做2选1,得到本次L1簇的候选调度队列,同时更新该L1簇的状态寄存器(该状态寄存器也可存储1或2个调度候选队列);
B4、同理逐层执行上述方案,直至完成整个簇层的调度。现有Qos/Hqos结构框架中,通过流量整形规则,判断该队列是否有资质,并判断对应该队列所对应的簇是否有资质。
由于本发明实施例对多个同一优先级别的簇做DWRR/RR调度,对同一节点对应的不同优先级别的簇做SP调度,队列所对应的簇的调度方式以及调度顺序各不相同,因此需要对其调度方式以及调度方式中的状态进行存储。
在对各个簇的优先级别、是否有资质、簇的调度方式以及调度方式中的状态进行存储后,对多个簇层中的调度只需要依照存储好的信息进行调度,即保证调度信息不会丢失,使得本发明更加稳定,也使得各个小型调度能够直接读取其各个簇下状态,并根据簇对应的信息进行调度。
优选的,除了最低层簇层,存储一个簇层的簇层调度信息,所述簇层调度信息包括候选调度节点、候选节点的优先级别,候选节点的调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在对每一个簇层调度信息存储后,当前各个小型调度均能够直接使用,对新加入的队列进行调度时,只需要更新簇,重新运算调度方式,减小了调度的运算量,减小了运算所需数据,加快了调度速度。
实施例4
参见图3和图4所示,本发明实施例4提供一种基于分簇设计的Qos实现系统,其包括:簇层生成模块、队列分配模块和调度模块。
簇层生成模块,用于生成多个簇层,每个簇层包括多个有序的簇,上一簇层中的每一簇作为节点映射其下一层簇层中的多个不同的连续的簇;通过创建多个簇层,并对簇层上的每一个簇进行映射,设置节点,建立了从底层到顶层的多个层次的逻辑连接关系,在需要对大量簇或者队列进行调度时候,通过该逻辑关系能够将调度分解为各个层次的簇层之间的小型调度,使得调度更加简单,而小型调度相较于大型调度,数据少、运算快,使得调度更加迅速。
队列分配模块,用于将待调度的一层队列,按照多个队列对应一个簇的方式,分配至底层的簇层;设定簇的优先级能够更好的对应队列优先级别,同时限定相应优先级别的算法,使得网络数据的传输能够更加贴合用户的需求。
调度模块,从底层至顶层,对同一节点对应的多个簇做调度,直至顶层的簇层的簇调度完毕。这种调度方式使得不同优先级别的一簇队列能够确认调度顺序,通过多个层次的不同调度,使得现有的Qos/Hqos结构框架中同一层的队列能够通过更加精细且准确的调度实现数据流的控制。
实施例5
参见图3和图4所示,在实施例4的基础上,队列分配模块包括:
队列确认子模块,用于根据队列的资质,确认本次需要进行调度的队列,以及该队列对应的簇;
整形子模块,用于根据服务质量/分层服务资料Qos/Hqos中的流量整形,判断参与调度的队列是否有资质调度,对所述队列进行筛选,得到有效待调度队列;
优先级修改子模块,用于获取有效待调度队列的、簇调度信息和簇层调度信息,修改最低层簇层的簇的优先级别和调度信息。
根据队列原有的逻辑关系分配队列,使得队列之间的逻辑关系能够通过其分配的对应的簇之间的逻辑关系体现出来,进行簇的调度时,充分考虑队列之间的逻辑关系,调度更加合理。
调度模块包括:
单层调度子模块,用于获取当前待调度簇层中最低层的簇的优先级,对该簇层中的同一节点对应的多个同一优先级别的簇做动态加权循环法DWRR/循环法RR调度,对同一节点对应的不同优先级别的簇做严格优先级SP调度,得到该层每一簇调度仲裁结果,完成该层的调度;
调用子模块,用于将调度仲裁结果对应到各个簇映射的上层的簇,再反复调用单层调度子模块来逐层完成调度,直至所有簇层调度完毕,得到最终调度的队列。
对应的将新增的队列分配到多个簇层中的簇中,即新增的队列仅对簇层中多个节点下的小型调度有影响,而小型调度本身数据较少,结构简单,且运算效率高。
实施例6
参见图3和图4所示,在实施例4的基础上,本发明提供的一种基于分簇设计的Qos实现系统还包括多个第一类状态寄存器。一个所述第一类状态寄存器对应并存储一个节点的信息,所述节点的信息包括节点的优先级别、是否有资质、调度方式以及调度方式中的状态,所述调度方式包括DWRR/RR调度和SP调度。
在对各个簇的优先级别、是否有资质、调度方式以及调度方式中的状态进行存储后,对多个簇层中的调度只需要依照存储好的信息进行调度,即保证的调度信息不会丢失使得本发明更加稳定也使得各个小型调度能够直接读取其各个簇下状态,并根据簇对应的信息进行调度。
优选的,由于该簇包含的子节点可能映射不同的父节点,因此该簇需要维护不同父节点调度状态信息。根据子节点映射范围和各簇的相互关系,各簇需要维护1或2个父节点的调度信息即两个候选调度队列的信息。因为该簇分配范围内的队列,可能映射到不同的父节点。
具体的,如图5所示。每个簇维护的状态寄存器由Hi部分和Lo部分构成:如果簇的首节点处于子节点映射范围内,则父节点的调度信息存在该簇内的Lo部分;如果该簇的尾节点处于子节点映射范围内,且首节点不处于映射范围内,则父节点的调度信息存在该簇内的Hi部分;其他情况,不存储:
(a)簇的首节点处于映射范围内;
(b)簇的尾节点处于子节点映射范围内,且首节点不处于映射范围内;
(c)簇的尾节点处于子节点映射范围内,且首节点不处于映射范围内;
(d)簇的首节点处于映射范围内;
(e)簇的首节点处于映射范围内;
(f)簇的尾节点处于子节点映射范围内,且首节点不处于映射范围内;
(g)不存;
(h)簇的首节点处于映射范围内;
(i)簇的首节点处于映射范围内;
(j)簇的首节点处于映射范围内;
举例来说,对于一个簇层L0层其分配了A个队列,前a个队列映射到一个父节点,中间b个队列映射到一个父节点,剩下c个节点映射到一个父节点,那个该L0簇应该存在三个候选调度队列(一个父节点有一个),但是对于中间b个节点,其均处于L0 cluster范围内,不需要存储,原因是对于全在映射队列都在一个簇内,当激活队列开始从这里开始调度,该簇的调度仲裁结果就是最终的调度仲裁结果,没必要存储。
进一步的,本系统除了第一类状态寄存器,还包括多个第二类状态寄存器,除了最低层簇层,每个所述第二类状态寄存器对应并存储一个簇层的调度信息,所述调度信息包括候选调度节点、候选节点的优先级别,候选节点的调度方式以及调度方式中的状态,调度方式包括DWRR/RR调度和SP调度。在对每一个簇层的调度信息进行存储后,当前各个小型调度进行的调度,均能够直接使用,即使有新的队列加入,也只需要对加入了新队列簇重新运算调度方式,减少了调度的运算量,减少了运算所需数据,加快了调度速度。
实施例7
在综合实施例1~6后,进一步详细的说明调度方式:
参见图6和图7所示,假设现有Qos/Hqos结构框架中的一层队列中下层队列约有8千个队列,通过分簇设计,从硬件上分L0/L1/L2/L3四个簇层。L0层有516个簇,L1层有32个簇,L2层有4个簇,L3层有1个簇。将L0层的16个连续簇对应到L1层的1个簇,将L1层的8连续簇对应到L2层的1个簇,将L2层的4连续簇对应到L2层的1个簇。将下层队列中的16个队列对应到一个L0层的簇上,根据上述簇的对应关系,也就相当于下层队列中的256(16*16)个连续队列,对应到一个L1层的簇上,相当于下层队列中的2048(256*8,约2K个)个连续队列对应到一个L2层的簇上,相当于下层队列中的8192(2048*4,约8千)个连续队列对应到L3层的簇上。
各个簇层的分布表参见表1所示:
表1、簇层L0-L3层中cluster(簇)和队列的分布
设队列的序号为序号Q500至Q5500,同时它们的父节点均为节点P3,并根据对应队列的优先级别,来分配节点的优先级别。以LX_Y表示层级节点所在的位置,其中X为层,Y给序号。在簇层中均以节点的子节点和父节点表示,则:
假设子节点Q500、Q2000、Q2001、Q2002、Q4000、Q4800、Q4900、Q4950、Q5000、Q5004、Q5005均有资质;Q500、Q2000、Q2001、Q2002、Q4950、Q5000、Q5004、Q5005为同一优先级7,Q4000、Q4800、Q4900为同一优先级5。
此时各有资质的子节点所处cluster(簇)的位置信息如下:
Q500节点处于L0_31、L1_1、L2_0;
Q2000、Q2001和Q2002节点处于L0_125、L1_7、L2_0;
Q4000节点处于L0_250、L1_15、L2_1;
Q4800节点处于L0_300、L1_18、L2_2;
Q4900节点处于L0_306、L1_19、L2_2;
Q4950节点处于L0_309、L1_19、L2_2;
Q5000、Q5004和Q5005节点处于L0_312、L1_19、L2_2。
父节点P3上次调度的优先级为5的节点ID是Q4000,上次调度的优先级为7的节点ID为Q5000。
各cluster(簇)的状态寄存器存储的候选调度节点ID和优先级如下:
L0_31状态寄存器缓存候选调度节点ID为Q500,优先级为7;
L0_125状态寄存器缓存候选调度节点ID为Q2000,优先级为7;
L0_250状态寄存器缓存候选调度节点ID为Q4000,优先级为5;
L0_300状态寄存器缓存候选调度节点ID为Q4800,优先级为5;
L0_306状态寄存器缓存候选调度节点ID为Q4900,优先级为5;
L0_309状态寄存器缓存候选调度节点ID为Q4950,优先级为7;
L0_312状态寄存器缓存候选调度节点ID为Q5000,优先级为7;
L1_1状态寄存器缓存候选调度节点ID为Q500,优先级为7;
L1_7状态寄存器缓存候选调度节点ID为Q2000,优先级为7;
L1_15状态寄存器缓存候选调度节点ID为Q4000,优先级为5;
L1_18状态寄存器缓存候选调度节点ID为Q4800,优先级为5;
L1_19状态寄存器缓存候选调度节点ID为Q5004,优先级为7;
L2_0状态寄存器缓存候选调度节点ID为Q500,优先级为7;
L2_1状态寄存器缓存候选调度节点ID为Q4000,优先级为5;
L2_2状态寄存器缓存候选调度节点ID为Q5004,优先级为7。
在上述的情况下,节点Q5002为入队列节点,整层调度步骤如下:
(1)节点Q5002通过流量整形和配置信息等获得调度资质,节点调度优先级为7;其父节点ID为P3,P3的子节点范围为Q500至Q5500,所有优先级做RR调度,优先级7上次调度的子节点ID为Q5000,优先级5上次调度的子节点ID是Q4000;
(2)读取Q5002所在L0_312的16个子节点的状态信息;读取Q5002所在L1_19的16个L0 cluster的状态信息;读取Q5002所在L2_2的8个L1 cluster的状态信息;读取8个L2cluster的状态信息;所有状态和配置信息提取结束,打一拍进行调度;
(3)L0 cluster调度:L0_312中目前有Q5000、Q5002、Q5004和Q5005四个有资质的节点,且优先级均为7,优先级7上次调度的子节点ID为Q5000,优先级7的子节点做RR调度,因此L0_312更新后的调度子节点ID为Q5002,优先级为7;
(4)L1 cluster调度:处于映射范围内且包含在L1_19中的16个L0 cluster从L0_304至L0_319;根据各cluster首位地址和映射范围地址,均取状态寄存器的LO部分信息;根据L0 cluster(除L0_312之外)的缓存状态信息,L0_306的优先级为5的子节点Q4900与L0_309的优先级为7的子节点Q4950有资质参与调度,优先级7上次调度的子节点ID为Q5000,优先级5上次调度的子节点ID是Q4000;同一优先级内做RR,不同优先级之间做SP,得到该L1cluster除了L0_312之外,其他cluster更新后的调度仲裁结果:优先级为7的Q4950。同时将该结果同(3)中L0_312更新后调度仲裁结果仲裁,得到L1_19更新后的调度子节点ID为Q5002,优先级为7;
(5)L2 cluster调度:处于映射范围内且包含在L2_2中的6个L1 cluster从L1_16至L1_21;根据各cluster首位地址和映射范围地址,均取状态寄存器的LO部分信息;根据L1cluster(除L1_19之外)的缓存状态信息,L1_18的优先级为5的子节点Q4800参与调度,优先级5上次调度的子节点ID是Q4000;同一优先级内做RR,不同优先级之间做SP,得到该L1cluster除了L0_312之外,其他cluster更新后的调度仲裁结果:优先级为5的Q4800。同时将该结果同(4)中L1_19更新后调度仲裁结果仲裁,得到L2_2更新后的调度子节点ID为Q5002,优先级为7;
(6)L3 cluster调度:处于映射范围内且包含在L3中的3个L2cluster从L2_0至L2_2;根据各cluster首位地址和映射范围地址,L2_0取状态寄存器的HI部分信息,L2_1和L2_2取状态寄存器的LO部分信息;根据所有L2cluster(除L2_2之外)的缓存状态信息,L2_0的优先级为7的子节点Q500参与调度,L2_1的优先级为5的子节点Q4000参与调度,优先级7上次调度的子节点ID是Q5000,优先级5上次调度的子节点ID是Q4000;同一优先级内做RR,不同优先级之间做SP,得到该L3 cluster除了L2_2之外,其他cluster更新后的调度仲裁结果:优先级为7的Q500。同时将该结果同(4)中L2_2更新后调度仲裁结果仲裁,得到整层调度更新后的调度子节点ID为Q5002,优先级为7;
(7)下一拍将优先级为7的Q5002作为最终调度仲裁结果输出;更新子节点Q5002的状态信息;将优先级为7的Q5002作为候选调度节点,更新L0_312状态寄存器;将优先级为7的Q5002作为候选调度节点,更新L1_19状态寄存器LO部分;将优先级为7的Q5002作为候选调度节点,更新L2_2状态寄存器LO部分,完成本次调度。
本发明不仅局限于上述最佳实施方式,任何人在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本发明相同或相近似的技术方案,均在其保护范围之内。