用户调度方法及其装置

申请号 CN201280005075.8 申请日 2012-12-12 公开(公告)号 CN103547330A 公开(公告)日 2014-01-29
申请人 华为技术有限公司; 发明人 孙艳平; 王运富; 刘加奎;
摘要 本 发明 提供一种用户调度方法及其装置,用于对多个用户及各个所述用户所管辖的队列进行调度操作;所述用户调度方法包括:计算当前用户的可调度性;在确认得到计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID;所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构;在调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。相较于 现有技术 ,本发明提高了可支持的用户数,轮循调度具有实现简单、调度效率高等优点。
权利要求

1.一种用户调度方法,用于对多个用户及各个所述用户所管辖的队列进行调度操作,其特征在于,所述用户调度方法包括:
计算当前用户的可调度性;
在确认得到计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID;所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构;在调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。
2.根据权利要求1所述的用户调度方法,其特征在于,所述计算得到当前用户的可调度性包括:
依据入队的数据包中队列所对应的队列ID确认所述队列所属于的当前用户,计算所述当前用户所管辖的所有队列的可调度性和第一次计算所述当前用户的可调度性;所述队列的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”,可调度性“1”的满足条件为:所述队列非空且令牌正负标志为“正”;所述当前用户的可调度性包括:
表示可调度的可调度性“1”和表示不可调度的可调度性“0”;
根据第一次计算的所述当前用户的可调度性以及用户令牌桶中的令牌正负标志,第二次计算所述当前用户的可调度性。
3.根据权利要求2所述的用户调度方法,其特征在于,所述第一次计算所述当前用户的可调度性包括:将当前用户所管辖的所有队列的可调度性进行“或”操作。
4.根据权利要求3所述的用户调度方法,其特征在于,所述第二次计算所述当前用户的可调度性包括:将第一次计算得到的所述当前用户的可调度性与所述用户令牌桶中的令牌正负标志进行“与”操作。
5.根据权利要求2所述的用户调度方法,其特征在于,在计算所述当前用户所管辖的所有队列的可调度性之前还包括更新队列信息的步骤,包括:
验证所述队列ID所对应的当前用户所管辖的各个队列的当前权重;若判断得到其中所有可调度的队列的当前权重为“0”,则将所述当前用户所管辖的所有队列的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该队列的权重越大,后续被调度的次数越多;反之,若判断得到其中存在有至少一个可调度的队列的当前权重为“非0的自然数”,则对所述当前用户所管辖的所有队列的当前权重不进行更新。
6.根据权利要求5所述的用户调度方法,其特征在于,还包括更新用户信息的步骤,包括:
将在调度过程中的“调度的用户信息表切换历史”与已存储的“用户调度出的用户表切换历史”进行比较;若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”不相等,则将所述当前用户的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该用户的权重越大,后续被调度的次数越多;反之,若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”相等,则对所述当前用户的当前权重不作更新。
7.根据权利要求5所述的用户调度方法,其特征在于,在调度出用户ID之后还包括:
接收调度出来的用户ID,从所述用户ID所管辖的各个队列中轮循调度出队列权重为“非0的自然数”且可调度性为“1”的下一个队列。
8.根据权利要求1所述的用户调度方法,其特征在于,所述用户信息表采用三级位图表架构,包括由上至下的第一级、第二级、以及第三级,构成的第一级*第二级*第三级为M bit*N bit*L bit,其中,所述第一级包括一个第一数据片,所述第一数据片为M bit,所述第二级包括M个第二数据片,所述第二数据片为N bit,所述第三级包括M*N个第三数据片,所述第三数据片为L bit,所述第一数据片中的任一个比特位管辖第二级中的一个第二数据片,所述第二数据片中的任一个比特位管辖第三级中的一个第三数据片。
9.根据权利要求8所述的用户调度方法,其特征在于,
在所述三级位图表架构中,所述第三级中的任一比特位代表它所对应的一个用户的可调度性,包括:表示可调度的可调度性1和表示不可调度的可调度性0;所述第二级中的任一比特位代表它管辖的第三级中的一个第三数据片中的所有L个比特位进行“或”操作的结果;所述第一级中的任一比特位代表它管辖的第二级中一个第二数据片中的所有N个比特位进行“与”操作的结果;
进行轮循调度包括:每一次调度一个用户时,依次调度第一级、第二级、第三级;直至调度到第一次出现第一级中的一个比特位、第二级中的一个比特位、以及第三级中的一个比特位同时为1,此时,第三级中的这一个为1的比特位所代表的一个用户即为要调度出的用户。
10.根据权利要求9所述的用户调度方法,其特征在于,所述利用轮循调度从用户可调度性表中调度用户ID包括:
第一步,从第一级中的第一个比特位开始,在第一级中进行依序调度以调度出为1的一个比特位;若已调度到第一级的最后一个比特位且没有调度到为1的比特位,则结束流程;若在第一级中调度到为1的一个比特位,则暂停第一级的调度,转至下一流程;
第二步,在第一级中为1的那一个比特位下辖的第二级的一个第二数据片中的所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第二级中那一个第二数据片的最后一个比特位且没有调度到为1的比特位,则返回至第一步,从第一级中暂停的为1的那一个比特位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第二级中那一个第二数据片中调度到为1的一个比特位,则暂停第二级的调度,转至下一流程;
第三步,在第二级中为1的那一个比特位下辖的第三级的一个第三数据片中所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第三级中那一个第三数据片的最后一个比特位且没有调度到为1的比特位,则返回至第二步,从第二级中那一个第二数据片中暂停的为1的那一个比特位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第三级中那一个第三数据片中调度到为1的一个比特位,则结束流程,调度到的第三级中那一个第三数据片中的为1的这一个比特位所代表的一个用户即为要调度出的用户。
11.根据权利要求8所述的用户调度方法,其特征在于,所述三级位图表架构中的第一级、第二级以及第三级中的比特位数量分别为:128bit、128bit、以及64bit,构成第一级*第二级*第三级为128bit*128bit*64bit的用户信息表。
12.一种用户调度装置,用于对多个用户及各个所述用户所管辖的队列进行调度操作,其特征在于,所述用户调度装置包括:
用户计算模,用于计算当前用户的可调度性;
用户调度模块,与所述用户计算模块连接,用于在确认得到所述用户计算模块计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID;所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构;在调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。
13.根据权利要求12所述的用户调度装置,其特征在于,还包括:队列管理模块和队列计算模块;
所述队列管理模块,用于在接收到入队的数据包时获取所述数据包中队列所对应的队列ID,将入队的队列ID发送至所述队列计算模块;
所述队列计算模块,用于接收来自所述队列管理模块所发送的入队的所述队列ID,确认所述队列所属于的当前用户,计算所述当前用户所管辖的所有队列的可调度性和第一次计算所述当前用户的可调度性,将第一次计算得到的所述当前用户的可调度性发送至所述用户计算模块,由所述用户计算模块根据所述队列计算模块第一次计算的所述当前用户的可调度性以及用户令牌桶中的令牌正负标志,第二次计算所述当前用户的可调度性;所述队列的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”,可调度性“1”的满足条件为:所述队列非空且令牌正负标志为“正”;所述当前用户的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”。
14.根据权利要求13所述的用户调度装置,其特征在于,所述第一次计算的所述当前用户的可调度性是通过将当前用户所管辖的所有队列的可调度性进行“或”操作而得到的。
15.根据权利要求14所述的用户调度装置,其特征在于,所述第二次计算的所述当前用户的可调度性是通过将第一次计算得到的所述当前用户的可调度性与所述用户令牌桶中的令牌正负标志进行“与”操作而得到的。
16.根据权利要求13所述的用户调度装置,其特征在于,所述队列计算模块还包括用于更新队列信息:验证所述队列ID所对应的当前用户所管辖的各个队列的当前权重;若判断得到其中所有可调度的队列的当前权重为“0”,则将所述当前用户所管辖的所有队列的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该队列的权重越大,后续被调度的次数越多;反之,若判断得到其中存在有至少一个可调度的队列的当前权重为“非0的自然数”,则对所述当前用户所管辖的所有队列的当前权重不进行更新。
17.根据权利要求16所述的用户调度装置,其特征在于,所述用户计算模块还包括更新用户信息:将在调度过程中的“调度的用户信息表切换历史”与已存储的“用户调度出的用户表切换历史”进行比较;若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”不相等,则将所述当前用户的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该用户的权重越大,后续被调度的次数越多;反之,若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”相等,则对所述当前用户的当前权重不作更新。
18.根据权利要求16或17所述的用户调度装置,其特征在于,还包括:
队列调度模块,与所述队列计算模块和所述用户调度模块连接,用于根据接收自所述用户调度模块调度出来的用户ID以及所述队列计算模块发送的所述当前用户所管辖的各个队列的可调度性,从所述用户ID所管辖的各个队列中轮循调度出队列权重为“非0的自然数”且可调度性为“1”的下一个队列。
19.根据权利要求12所述的用户调度装置,其特征在于,所述用户信息表采用三级位图表架构,包括由上至下的第一级、第二级、以及第三级,构成的第一级*第二级*第三级为M bit*N bit*L bit,其中,所述第一级包括一个第一数据片,所述第一数据片为M bit,所述第二级包括M个第二数据片,所述第二数据片为N bit,所述第三级包括M*N个第三数据片,所述第三数据片为L bit,所述第一数据片中的任一个比特位管辖第二级中的一个第二数据片,所述第二数据片中的任一个比特位管辖第三级中的一个第三数据片。
20.根据权利要求19所述的用户调度装置,其特征在于,
在所述三级位图表架构中,所述第三级中的任一比特位代表它所对应的一个用户的可调度性,包括:表示可调度的可调度性1和表示不可调度的可调度性0;所述第二级中的任一比特位代表它管辖的第三级中的一个第三数据片中的所有L个比特位进行“或”操作的结果;所述第一级中的任一比特位代表它管辖的第二级中一个第二数据片中的所有N个比特位进行“与”操作的结果。
21.根据权利要求19所述的用户调度装置,其特征在于,所述三级位图表架构中的第一级、第二级以及第三级中的比特位数量分别为:128bit、128bit、以及64bit,构成第一级*第二级*第三级为128bit*128bit*64bit的用户信息表。

说明书全文

用户调度方法及其装置

技术领域

[0001] 本发明涉及通信技术领域,特别涉及一种用户调度方法及其装置。

背景技术

[0002] 网络QoS(Quality of Service,服务质量)就是在网络带宽一定的前提下,通过一定的策略和机制保证不同业务的服务需求,具体可以量化为带宽、延迟、抖动、丢失率、吞吐量等性能指标。
[0003] 队列调度算法是实现网络QoS控制的核心机制之一,是网络资源管理的重要内容,通过控制不同类型的分组对链路带宽的使用,使不同的数据流得到不同等级的服务。
[0004] 实现QOS调度的方法主要有漏桶和令牌桶两种,其中,令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。令牌桶按用户设定的速度向桶中放置令牌,并且令牌桶有用户设定的容量,当桶中令牌的量超出桶的容量的时候,令牌的量不再增加;当报文被令牌桶处理的时候,若令牌桶中有足够的令牌可以用来发送报文,则报文可以通过,同时令牌桶中的令牌量按报文的长度做相应的减少,当令牌桶中的令牌少到报文不能再发送时报文被丢弃。
[0005] QoS的调度算法有很多种,如RR(Round Robin,循环)调度算法、WRR(Weighted Round-Robin,加权循环)调度算法、DRR(Deficit Round Robin,差额循环)调度算法、MDRR(Modified Deficit Round Robin,改进型差分循环)调度算法等,其中,RR调度算法最简单,通过循环服务避免局部队列饥饿,即所有用户轮循调度,可以保证每个用户都有服务的机会,但是这个调度算法没有考虑每次调度单元的差异,如包长的差异,对时延难以改进,不能为低时延业务分配专用队列,每个队列的服务间隔完全依赖于那段时间内其他队列中有多少分组等待发送以及这些分组的长度,这些变量难以准确预测,导致RR调度算法容易产生时延抖动。所以,RR调度算法不能保证流量的分配,只能保证服务机会公平分配。
[0006] 而其他调度算法,WRR调度算法是在RR调度算法的基础上给用户加了服务的权重。DRR调度算法是RR调度算法的扩展,为每个队列分配一个常量(以权重为比例的时间片)和一个变量(差额),主要解决由于不同数据流的不同包长引起对队列服务的不公平性。MDRR调度算法是DRR调度算法的改良算法,MDRR调度算法在所有的队列中设定一个低延迟队列,优先调度出低延迟队列,MDRR调度算法可以为要求低延迟、低抖动的业务提供较好的QoS保证。上述调度算法相对而言较为复杂,不易实现。
[0007] 申请号为200610140475.6的专利申请,提供了一种对多用户进行QoS调度的方法和装置,主要是利用令牌桶实现MDRR调度算法,其中的调度方法包括:根据配置的QoS信息表定时刷新令牌桶中的令牌数;轮循出调度矩阵中的需要调度的用户号,其中,调度矩阵为X行X列的RAM,一共X*X个存储单元,对应X*X个用户的调度使能标识;轮循出的用户号发出调度请求;获得上次调度结果反馈后,执行调度请求。但,由上可知,在上述专利申请文件中:采用的调度矩阵为RAM矩阵,且RAM矩阵是通过计算得出的,比较复杂,且会有空调度,浪费调度机会;另外,由于调度矩阵的限制,支持的用户数较少,一般,用户数为千(K)级,例如几千(K)至几十千(K),且用户数必须为X*X个。

发明内容

[0008] 本发明实施例的目的在于提供一种用户调度方法及其装置,用于解决现有调度技术相对复杂、出现空调度、支持的用户数较少等问题。
[0009] 第一方面,本发明实施例提供一种用户调度方法,用于对多个用户及各个所述用户所管辖的队列进行调度操作,所述用户调度方法包括:计算当前用户的可调度性;在确认得到计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID;所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构;在调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。
[0010] 可选地,所述计算得到当前用户的可调度性包括:依据入队的数据包中队列所对应的队列ID确认所述队列所属于的当前用户,计算所述当前用户所管辖的所有队列的可调度性和第一次计算所述当前用户的可调度性;根据第一次计算的所述当前用户的可调度性以及用户令牌桶中的令牌正负标志,第二次计算所述当前用户的可调度性。
[0011] 可选地,所述第一次计算所述当前用户的可调度性包括:将当前用户所管辖的所有队列的可调度性进行“或”操作。
[0012] 可选地,所述第二次计算所述当前用户的可调度性包括:将第一次计算得到的所述当前用户的可调度性与所述用户令牌桶中的令牌正负标志进行“与”操作。
[0013] 可选地,在计算所述当前用户所管辖的所有队列的可调度性之前还包括更新队列信息的步骤,包括:验证所述队列ID所对应的当前用户所管辖的各个队列的当前权重;若判断得到其中所有可调度的队列的当前权重为“0”,则将所述当前用户所管辖的所有队列的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该队列的权重越大,后续被调度的次数越多;反之,若判断得到其中存在有至少一个可调度的队列的当前权重为“非0的自然数”,则对所述当前用户所管辖的所有队列的当前权重不进行更新。
[0014] 可选地,所述用户调度方法还包括更新用户信息的步骤,包括:将在调度过程中的“调度的用户信息表切换历史”与已存储的“用户调度出的用户表切换历史”进行比较;若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”不相等,则将所述当前用户的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该用户的权重越大,后续被调度的次数越多;反之,若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”相等,则对所述当前用户的当前权重不作更新。
[0015] 可选地,在调度出用户ID之后还包括:接收调度出来的用户ID,从所述用户ID所管辖的各个队列中轮循调度出队列权重为“非0的自然数”且可调度性为“1”的下一个队列。
[0016] 可选地,所述用户信息表采用三级位图表架构,包括由上至下的第一级、第二级、以及第三级,构成的第一级*第二级*第三级为M bit*N bit*L bit,其中,所述第一级包括一个第一数据片,所述第一数据片为M bit,所述第二级包括M个第二数据片,所述第二数据片为N bit,所述第三级包括M*N个第三数据片,所述第三数据片为L bit,所述第一数据片中的任一个比特位管辖第二级中的一个第二数据片,所述第二数据片中的任一个比特位管辖第三级中的一个第三数据片。
[0017] 可选地,在所述三级位图表架构中,所述第三级中的任一比特位代表它所对应的一个用户的可调度性,包括:表示可调度的可调度性1和表示不可调度的可调度性0;所述第二级中的任一比特位代表它管辖的第三级中的一个第三数据片中的所有L个比特位进行“或”操作的结果;所述第一级中的任一比特位代表它管辖的第二级中一个第二数据片中的所有N个比特位进行“与”操作的结果;进行轮循调度包括:每一次调度一个用户时,依次调度第一级、第二级、第三级;直至调度到第一次出现第一级中的一个比特位、第二级中的一个比特位、以及第三级中的一个比特位同时为1,此时,第三级中的这一个为1的比特位所代表的一个用户即为要调度出的用户。
[0018] 可选地,所述利用轮循调度从用户可调度性表中调度用户ID包括:第一步,从第一级中的第一个比特位开始,在第一级中进行依序调度以调度出为1的一个比特位;若已调度到第一级的最后一个比特位且没有调度到为1的比特位,则结束流程;若在第一级中调度到为1的一个比特位,则暂停第一级的调度,转至下一流程;第二步,在第一级中为1的那一个比特位下辖的第二级的一个第二数据片中的所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第二级中那一个第二数据片的最后一个比特位且没有调度到为1的比特位,则返回至第一步,从第一级中暂停的为1的那一个比特位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第二级中那一个第二数据片中调度到为1的一个比特位,则暂停第二级的调度,转至下一流程;第三步,在第二级中为1的那一个比特位下辖的第三级的一个第三数据片中所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第三级中那一个第三数据片的最后一个比特位且没有调度到为1的比特位,则返回至第二步,从第二级中那一个第二数据片中暂停的为1的那一个比特位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第三级中那一个第三数据片中调度到为1的一个比特位,则结束流程,调度到的第三级中那一个第三数据片中的为1的这一个比特位所代表的一个用户即为要调度出的用户。
[0019] 可选地,所述三级位图表架构中的第一级、第二级以及第三级中的比特位数量分别为:128bit、128bit、以及64bit,构成第一级*第二级*第三级为128bit*128bit*64bit的用户信息表。
[0020] 第二方面,本发明实施例另提供一种用户调度装置,用于对多个用户及各个所述用户所管辖的队列进行调度操作,所述用户调度装置包括:用户计算模,用于计算当前用户的可调度性;用户调度模块,与所述用户计算模块连接,用于在确认得到所述用户计算模块计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID;所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构;在调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。
[0021] 可选地,所述用户调度装置还包括:队列管理模块和队列计算模块;所述队列管理模块,用于在接收到入队的数据包时获取所述数据包中队列所对应的队列ID,将入队的队列ID发送至所述队列计算模块;所述队列计算模块,用于接收来自所述队列管理模块所发送的入队的所述队列ID,确认所述队列所属于的当前用户,计算所述当前用户所管辖的所有队列的可调度性和第一次计算所述当前用户的可调度性,将第一次计算得到的所述当前用户的可调度性发送至所述用户计算模块,由所述用户计算模块根据所述队列计算模块第一次计算的所述当前用户的可调度性以及用户令牌桶中的令牌正负标志,第二次计算所述当前用户的可调度性;所述队列的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”,可调度性“1”的满足条件为:所述队列非空且令牌正负标志为“正”;所述当前用户的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”。
[0022] 可选地,所述第一次计算的所述当前用户的可调度性是通过将当前用户所管辖的所有队列的可调度性进行“或”操作而得到的。
[0023] 可选地,所述第二次计算的所述当前用户的可调度性是通过将第一次计算得到的所述当前用户的可调度性与所述用户令牌桶中的令牌正负标志进行“与”操作而得到的。
[0024] 可选地,所述队列计算模块还包括用于更新队列信息:验证所述队列ID所对应的当前用户所管辖的各个队列的当前权重;若判断得到其中所有可调度的队列的当前权重为“0”,则将所述当前用户所管辖的所有队列的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该队列的权重越大,后续被调度的次数越多;反之,若判断得到其中存在有至少一个可调度的队列的当前权重为“非0的自然数”,则对所述当前用户所管辖的所有队列的当前权重不进行更新。
[0025] 可选地,所述用户计算模块还包括更新用户信息:将在调度过程中的“调度的用户信息表切换历史”与已存储的“用户调度出的用户表切换历史”进行比较;若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”不相等,则将所述当前用户的当前权重更新为预设的配置权重,所述配置权重的值为正整数,所述配置权重的值越高代表该用户的权重越大,后续被调度的次数越多;反之,若经比较得到所述“调度的用户信息表切换历史”与已存储的所述“用户调度出的用户表切换历史”相等,则对所述当前用户的当前权重不作更新。
[0026] 可选地,所述队列调度模块,与所述队列计算模块和所述用户调度模块连接,用于根据接收自所述用户调度模块调度出来的用户ID以及所述队列计算模块发送的所述当前用户所管辖的各个队列的可调度性,从所述用户ID所管辖的各个队列中轮循调度出队列权重为“非0的自然数”且可调度性为“1”的下一个队列。
[0027] 可选地,所述用户信息表采用三级位图表架构,包括由上至下的第一级、第二级、以及第三级,构成的第一级*第二级*第三级为M bit*N bit*L bit,其中,所述第一级包括一个第一数据片,所述第一数据片为M bit,所述第二级包括M个第二数据片,所述第二数据片为N bit,所述第三级包括M*N个第三数据片,所述第三数据片为L bit,所述第一数据片中的任一个比特位管辖第二级中的一个第二数据片,所述第二数据片中的任一个比特位管辖第三级中的一个第三数据片。
[0028] 可选地,在所述三级位图表架构中,所述第三级中的任一比特位代表它所对应的一个用户的可调度性,包括:表示可调度的可调度性1和表示不可调度的可调度性0;所述第二级中的任一比特位代表它管辖的第三级中的一个第三数据片中的所有L个比特位进行“或”操作的结果;所述第一级中的任一比特位代表它管辖的第二级中一个第二数据片中的所有N个比特位进行“与”操作的结果。
[0029] 可选地,根据权利要求17所述的用户调度装置,其特征在于,所述三级位图表架构中的第一级、第二级以及第三级中的比特位数量分别为:128bit、128bit、以及64bit,构成第一级*第二级*第三级为128bit*128bit*64bit的用户信息表。
[0030] 如上所述,本发明实施例的用户调度方法,具有以下有益效果:
[0031] 在本发明实施例中,提供了两组用户信息表,且任一组用户信息表采用两级以上的位图表架构,在进行用户调度时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表,在轮循任一组所述用户信息表时,由上至下逐级进行调度,不仅提高了调度效率,而且也避免了空调度的产生;另外,由于本发明实施例提供的用户信息表采用的是两级以上的位图表架构,相对于现有技术中的使用RAM矩阵,提供了可支持的用户数,使得用户数可达百万(M,兆)级。附图说明
[0032] 图1为本发明实施例用户调度装置的原理框图
[0033] 图2为本发明实施例用户调度装置所在的一个具体实现中的逻辑框图。
[0034] 图3为本发明实施例的调度方法的流程示意图。
[0035] 图4为应用于本发明实施例的调度方法中实现用户分级调度的用户信息表的分级结构图。

具体实施方式

[0036] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
[0037] 需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0038] 本发明提供一种用户调度方法及其装置,用于对多个用户及各个所述用户所管辖的队列进行调度操作。在本发明的实施例中,将提供的用户可调度性表分为两组用户信息表(正在调度的用户信息表和待处理的用户信息表),且任一组所述用户信息表采用两级以上的位图表架构。这样,在调度时,依据先后顺序先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表,且轮循任一组所述用户信息表时由上至下逐级进行调度,从而调度所需要的用户ID。
[0039] 请参阅图1,其为本发明实施例用户调度装置的原理框图,用于实现对多个用户及各个所述用户所管辖的队列进行调度操作。如图1所示,所述用户调度装置包括:队列管理模块101、队列计算模块103、用户计算模块105、用户调度模块107、以及队列调度模块109。
[0040] 队列管理模块101用于在接收到入队的数据包时获取所述数据包中队列所对应的队列ID,将入队的队列ID发送至队列计算模块103。
[0041] 队列计算模块103用于接收来自队列管理模块101所发送的入队的所述队列ID,确认所述队列所属于的当前用户,计算所述当前用户所管辖的所有队列的可调度性和第一次计算所述当前用户的可调度性,将第一次计算得到的所述当前用户的可调度性发送至所述用户计算模块105。所述队列的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”,可调度性“1”的满足条件为:所述队列非空且令牌正负标志为“正”。在一种可实现的方式中,第一次计算所述当前用户的可调度性是通过将所述当前用户所管辖的所有队列的可调度性进行“或”操作而得到的。
[0042] 用户计算模块105用于计算当前用户的可调度性。具体地,用户计算模块根据所述队列计算模块第一次计算的所述当前用户的可调度性以及用户令牌桶中的令牌正负标志,第二次计算所述当前用户的可调度性。所述当前用户的可调度性包括:表示可调度的可调度性“1”和表示不可调度的可调度性“0”。在一种可实现的方式中,第二次计算所述当前用户的可调度性是通过将第一次计算的所述当前用户的可调度性与用户令牌桶中的令牌正负标志进行“与”操作而得到的。
[0043] 用户调度模块107用于在确认得到用户计算模块105计算的所述当前用户的可调度性为可调度的情况下,对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID。具体地,在一个可实现的方式中,所述用户可调度性表包括分别为正在调度的和待处理的两组用户信息表,其中,任一组所述用户信息表采用两级以上的位图表架构。这样,在轮循调度用户ID时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表;在轮循任一组所述用户信息表时,由上至下逐级进行调度。
[0044] 队列调度模块109用于根据接收自用户调度模块107调度出来的用户ID以及队列计算模块103发送的所述当前用户所管辖的各个队列的可调度性,从所述用户ID所管辖的各个队列中轮循调度出可调度的的下一个队列。
[0045] 请再参阅图2,其为本发明实施例用户调度装置所在的一个具体实现中的逻辑框图。如图2所示,在所述逻辑框图中,所述用户调度装置包括:队列管理模块101、队列计算模块103、用户计算模块105、用户调度模块107、以及队列调度模块109。对于图2所述逻辑框图中的各个模块能够以电子硬件、计算机软件或者二者的结合来实现,例如,在一实际应用中,上述各个模块可以集成于一FPGA(Field-Programmable Gate Array,现场可编程阵列)芯片中。另外,如图2所示,在所述逻辑框图中,还涉及到如下单元:队列信息库,使用用户ID索引,包括用户所管辖的各个队列(在一实施例中,例如,可设定每一用户管辖八个队列)的配置带宽、用户所管辖的各个队列的配置权重、用户所管辖的各个队列的当前权重、各个队列内剩余的报文个数,其中,所述配置带宽可根据通信传输条件而设定;用户信息库,使用用户ID索引,包括用户的配置带宽、用户的配置权重、用户的当前权重、用户调度出的用户信息表切换历史、用户即将要操作的用户信息表、以及用户上次可调度性状态;用户及队列令牌桶,使用用户ID索引,包括各个用户及用户内的各个队列当前的令牌正负标志;队列可调度性表,使用用户ID索引,包括用户所管辖的各个队列是否可调度、队列的调度顺序、以及队列的权重是否为0等;两组用户可调度性表(正在调度的用户信息表和待调度的用户信息表),使用用户ID索引,表明用户可调度性。对于上述单元,其中,所述队列信息库是由队列计算模块103管理和控制的,所述用户信息库是由用户调度模块107管理和控制的,所述用户及队列令牌桶是由队列计算模块103管理和控制的,所述队列可调度性表是由队列调度模块109管理和控制的,两组用户可调度性表(正在调度的用户信息表和待调度的用户信息表)是供用户调度模块107进行轮循调度的。
[0046] 以下结合图2的逻辑框图来说明本发明实施例中的用户调度过程。参见图3,其用户调度过程如下:
[0047] 步骤S201,由队列管理模块101接收数据包并获取所述数据包中入队的队列ID。在本实施例中,代表某一用户的数据包进入队列管理模块时,数据包会采用队列的形式,即,对于某一用户而言,其所管辖的队列可以有多个,例如,在一种情况下,一个用户对应管辖着8个队列的数据,且每一个队列均分配有对应的一个队列ID。在数据包以队列形式进入队列管理模块时,队列管理模块101即可据此获取入队的这些队列ID,并将所述队列ID发送至队列计算模块103。
[0048] 步骤S203,队列计算模块103接收到入队的所述队列ID之后,执行:更新队列信息、计算所述队列ID对应的所述当前用户所管辖的各个队列的可调度性、以及第一次计算所述队列ID对应的所述当前用户的可调度性。
[0049] 以下对步骤S203中的各个操作进行详细说明:
[0050] 1)、更新队列信息库。具体地,包括:a、将所述队列ID内剩余的报文个数+1(加1);b、验证所述队列ID所对应的当前用户所管辖的各个队列的当前权重;若判断得到其中所有可调度的队列(即非空且令牌正负标志为正)的当前权重为“0”,则将所述当前用户所管辖的所有队列的当前权重更新为预设的配置权重;反之,若判断得到其中存在有至少一个可调度的队列(即非空且令牌正负标志为正)的当前权重为“非0的自然数”,则对所述当前用户所管辖的所有队列的当前权重不进行更新。需说明的是,队列的权重的值的范围为自然数,即:0、1、2、……、N,而配置权重的值的范围则为正整数(非0的自然数),即:1、2、
3、……、N。特别地,所述配置权重可根据特定队列而设定相应的权重,某一队列的配置权重值越高代表该队列的权重越大,后续被调度的次数越多,例如:配置权重10即表示调度的次数为10,配置权重30即表示调度的次数为30,通过对队列的权重的更新,能够实现队列的权重调度。
[0051] 2)、计算所述队列ID对应的所述当前用户所管辖的各个队列的可调度性。在本实施例中,只有当队列非空且令牌正负标志为正时所述队列才可调度,即,所述队列的可调度性记为“1”(所述队列的可调度性包括表示可调度的可调度性1和表示不可调度的可调度性0);将所述当前用户的用户ID、所述当前用户所管辖的各个队列的可调度性及所述当前用户所管辖的各个队列的当前权重是否为“0”发送至队列调度模块109。
[0052] 3)、第一次计算所述队列ID对应的所述当前用户的可调度性。在本实施例中,第一次计算所述当前用户的可调度性是通过将所述当前用户所管辖的所有队列的可调度性进行“或”操作而得到的。具体地,将所述当前用户所管辖的所有队列的可调度性进行“或”操作,易知,只要所述当前用户所管辖的各个队列中存在有一个队列的可调度性为“1”,则所述当前用户的可调度性为“1”,只有当且仅当所述当前用户所管辖的所有队列的可调度性均为“0”时,所述当前用户的可调度性才为“0”。将所述当前用户的用户ID、入队状态、第一次计算的所述当前用户的可调度性、以及用户令牌桶中的令牌正负标志发送至用户计算模块105。
[0053] 步骤S205,用户计算模块105根据接收自队列计算模块103发送过来的第一次计算的所述当前用户的可调度性和用户令牌桶中的令牌正负标志而第二次计算出所述当前用户的可调度性。在本实施例中,第二次计算所述当前用户的可调度性是通过将第一次计算的所述当前用户的可调度性与用户令牌桶中的令牌正负标志进行“与”操作而得到的。具体地,将第一次计算得到的所述当前用户的可调度性与用户令牌桶中的令牌正负标志进行“与”操作,当且仅当第一次计算的所述当前用户的可调度性为“1”且用户令牌桶中的令牌正负标志为“正(相当于“1”)”时,则得出第二次计算的所述当前用户的可调度性为“1”;否则,只要出现第一次计算的所述当前用户的可调度性为“0”、用户令牌桶中的令牌正负标志为“负(相当于“0”)、以及第一次计算的所述当前用户的可调度性为“0”且用户令牌桶中的令牌正负标志为“负(相当于“0”)中的任一状况,则得出第二次计算的所述当前用户的可调度性即为“0”。
[0054] 另外,用户计算模块105还用于更新用户信息库:将用户信息库中的“用户调度出的用户信息表切换历史”与用户调度模块107发送过来的“调度的用户信息表切换历史”进行比较,根据两者是否相等来决定所述用户ID的当前权重是否需要更新。具体地,若用户信息库中的“用户调度出的用户信息表切换历史”与用户调度模块107发送过来的“调度的用户信息表切换历史”不相等,则将用户信息库中的所述当前用户的当前权重更新为预设的配置权重,发出将所述用户ID插入到当前调度的用户信息表的用户信息表命令并发送至用户调度模块107,将“用户即将要操作的用户信息表”更新为用户调度模块107发送过来的“调度的用户信息表切换历史”的bit0;否则,若用户信息库中的“用户调度出的用户信息表切换历史”与用户调度模块107发送过来的“调度的用户信息表切换历史”相等,则用户信息库中的所述当前用户的当前权重不作更新,根据“用户即将要操作的用户信息表”而发出将所述用户ID插入到正在调度的用户信息表或待处理的用户信息表的用户信息表插入命令并发送至用户调度模块107。需说明的是,用户的权重的值的范围为自然数,即:0、1、2、……、N,而配置权重的值的范围则为正整数(非0的自然数),即:1、2、3、……、N。特别地,所述当前用户的配置权重可根据特定用户而设定相应的权重,某一用户的配置权重值越高代表该用户的权重越大,后续被调度的次数越多,例如:配置权重10即表示调度的次数为10,配置权重30即表示调度的次数为30。通过对当前用户的权重的更新,能够实现用户的权重调度。
[0055] 步骤S207,用户调度模块107在确认得到计算的所述当前用户的可调度性为可调度的情况下,根据循环调度算法对与所述当前用户对应的用户可调度性表进行轮循调度,直至调度出用户ID,并将调度得到的用户ID发送至队列调度模块109。
[0056] 在本实施例中,根据用户的权重是否耗尽,将调度的用户分为两组用户可调度性表:正在调度的用户信息表和待处理的用户信息表。在调度过程中,先从正在调度的用户信息表中进行轮循调度,当正在调度的用户信息表中的所有有效用户轮循调度完之后,再切换到待处理的用户信息表进行轮循调度。
[0057] 在本发明中,特别地,还包括将任一组的用户信息表(无论是正在调度信息表还是待调度信息表)采用两级以上(可以包括两级)的位图表架构Bitmap,实行用户分级调度。在一实施方式中,所述每一组用户可调度性表划分为三级,由上至下分别称为:第一级、第二级、以及第三级,构成的第一级*第二级*第三级为M bit*N bit*L bit,其中,第三级中任一比特位bit代表一个用户,第二级中的任一比特位bit管辖第三级中的L个比特位bit,第一级中的任一比特位bit管辖第二级中的N个比特位bit。具体地,所述第一级包括一个第一数据片,所述第一数据片为M bit,所述第二级包括M个第二数据片,所述第二数据片为N bit,所述第三级包括M*N个第三数据片,所述第三数据片为L bit,所述第一数据片中的任一个比特位管辖第二级中的一个第二数据片,所述第二数据片中的任一个比特位管辖第三级中的一个第三数据片。举例来讲,假设,将用户分为三级:128bit*128bit*64bit(即,27*27*26)(可参考图4),其中,第一级的第一数据片(共有128个比特)中的任一比特(1bit)下辖第二级的一个第二数据片(共有128个比特),第二级的一个第二数据片(共有128个比特)中的任一比特(1bit)下辖第三级的一个第二数据片(共64个比特),第三级的一个第三数据片(共64个比特)中的任一比特(1bit)均代表一个用户。这样,可以明显看出,采用如图4所示的三级位图表架构,最高可支持的用户数为128bit*128bit*64bit=27*
27*26=220=1M,可达百万(M,兆)级,相比于现有技术中采用RAM矩阵所能支持的K级用户数,大大扩展了可支持的用户数。当然,上面的仅为一个示例,用户信息表的结构及其中的每一级的比特位数仍可根据实际需要而有不同的变化。
[0058] 另外,在调度过程中,在轮循任一组所述用户信息表时,采用由上至下逐级进行调度,即,每一次调度一个用户时,依次调度第一级、第二级、第三级,直至调度到第一次出现第一级中的一个比特位、第二级中的一个比特位、以及第三级中的一个比特位同时为1,此时,第三级中的这一个为1的比特位所代表的一个用户即为要调度出的用户。通过上述用户分级调度,有效减少了轮循调度消耗的时间,提高了轮循调度的效率。
[0059] 对于上述轮循调度,通过依次调度第一级、第二级、第三级,直至调度到第一次出现第一级、第二级、以及第三级中的三个比特位同时为1,则第三级中这一个为1的比特位即为要调度出的用户。具体流程包括:第一步,从第一级中的第一数据片的第一个比特位开始,在第一级中进行依序调度以调度出为1的一个比特位;若已调度到第一级的最后一个比特位且没有调度到为1的比特位,则结束流程;若在第一级中调度到为1的一个比特位,则暂停第一级的调度,将为1的这一个比特位记为第一级暂停位,接着转至下一流程;第二步,在第一级中为1的那一个比特位下辖的第二级的一个第二数据片中的所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第二级中那一个第二数据片的最后一个比特位且没有调度到为1的比特位,则返回至第一步,从第一级中的那一个第一级暂停位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第二级中那一个第二数据片中调度到为1的一个比特位,则暂停第二级的调度,将为1的这一个比特位记为第二级暂停位,接着转至下一流程;第三步,在第二级中为1的那一个比特位下辖的第三级的一个第三数据片中所有比特位中进行依序调度以调度出为1的一个比特位;若已调度到第三级中那一个第三数据片的最后一个比特位且没有调度到为1的比特位,则返回至第二步,从第二级中那一个第二数据片中的那一个第二级暂停位之后的下一个比特位开始继续依序调度出为1的下一个比特位;若在第三级中那一个第三数据片中调度到为1的一个比特位,则结束流程,调度到的第三级中那一个第三数据片中的为1的这一个比特位所代表的一个用户即为要调度出的用户。
[0060] 需说明的是,在上述轮循调度过程中,当第三级的某一个第三数据片调度到最后一个比特位时,给当前第三级所属的第二级发指示,表明已完成了第二级的一个比特位的调度,之后,由第二级在下一次从第二级的下一个比特位开始调度;同样地,当第二级的某一个第二数据片调度到最后一个比特位时,给当前第二级所属的第一级发指示,表明完成了第一级的一个比特位的调度,由第一级在下一次从第一级的下一个比特位开始调度。
[0061] 再有,用户调度模块107还包括:接收到用户计算模块105发送过来的用户的用户信息表插入命令,将插入信息表中的用户ID对应的bit置为“1”;另外,如果发生信息表切换(例如:正在调度信息表切换为待调度信息表,或者待调度信息表切换为正在调度信息表),则将信息表切换历史发送至用户计算模块105,以供用户计算模块105据此更新用户信息库(更新用户信息库的过程已在“用户计算模块105”部分描述,故在此不在赘述)。
[0062] 步骤S209,队列调度模块109接收自用户调度模块107调度出来的用户ID,在队列可调度性表中查询出所述用户ID对应的各个队列的信息,根据轮循调度算法从这些个队列中调度出可调度的下一个队列,将调度出的下一个队列的队列ID发送至队列管理模块101;将用户ID和调度时的用户信息表切换历史发送至队列计算模块103。在一种可实现的方式中,可调度的下一个队列需符合如下要求:队列权重为“非0的自然数”且可调度性为“1”。
[0063] 由上可知,在本发明用户调度方法及其装置中,采用的是用户可调度性表进行调度,用户可调度性表分为正在调度的用户信息表和待处理的用户信息表,且任一组用户信息表采用两级以上的位图表架构,极大地提高了可支持的用户数,用户数设置更加灵活,且能够实现用户间的权重调度;在进行用户调度时,先轮循所述正在调度的用户信息表再轮循所述待处理的用户信息表,在轮循任一组所述用户信息表时,由上至下逐级进行调度,不仅提高了调度效率,而且也避免了空调度的产生。
[0064] 本发明实施例所公开的实施例描述的各示例的单元及步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同装置来实现所描述的功能,但是这种实现不应认为超出本发明的范围。结合本文中所公开的实施例描述的装置或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0065] 上述实施例仅列示性说明本发明的原理及功效,而非用于限制本发明。任何熟悉此项技术的人员均可在不违背本发明的精神及范围下,对上述实施例进行修改。因此,本发明的权利保护范围,应如权利要求书所列。
QQ群二维码
意见反馈