本发明属于无线通信技术领域,特别涉及一种队列调度方法,可用于为MAC层数据发送提供一种具有时延和吞吐量保证的调度方式。
背景技术:
MAC层队列调度决定了MAC层向物理层发送数据分组的实现方法。高效、稳定、健壮的调度可以极大的提高MAC层的性能和通信效率。因此在MAC层的协议设计中,队列调度方法一直是研究和改善提高的焦点。
在一些传统的调度算法中,如优先级调度算法,绝对按照优先级从高到低进行调度的方法,但是由于只有在高优先级的队列没有数据调度时,才考虑调度次一级优先级的业务,这样使得调度低优先级业务所体现出的性能不佳,并会导致低优先级业务较长时间没有得到调度从而发生“饿死”现象。又如在基于轮询的调度算法中,对于不同的缓存队列采用循环调度策略,循环调度是指在一定的调度周期内每个队列得到的调度次数相同,调度机会均等。然而这样的轮询调度算法对实时性要求高的业务不能产生较小的时延,没有优先级的调度可能导致重要信息延时过大,系统轮询方式造成资源的浪费。因此单纯的轮询算法并不能有良好的性能表现,针对轮询调度算法的改进大致有加权轮询WRR,差别轮询DRR,紧急轮询URR三种算法,其中:
加权轮询调度算法WRR,是在传统轮询算法的基础上,为每个缓存队列增加一个权值,权值的大小根据数据业务的类别以及对时延的要求的因素确定,在调度开始时,每个队列都会赋予初始权值,之后按照循环轮询的方式调度数据帧,队列中每调度一个数据帧,该队列记录的权值在数值上减小1,权值数值减到0的队列不参与相关的轮询,所有队列权值为0时为一个轮询调度周期结束,之后所有队列权值恢复为初始值进行循环。该方法通过权值的设定,能够确保每个用户不会过多的占用网络带宽,同时,也能减小权值较大的数据业务的时延,但是加权轮询调度算法是以分组为单位进行调度的,所以当数据分组的大小不同时,会对分组较小的队列带来不公平性。
差别轮询调度算法DRR,是以数据分组的长度为评判标准,该方法为每个队列设定长度允许值,队列中将要发送数据分组的长度小于该值才会被调度,并在分组被调度出去后,将队列长度允许值减去调度的分组长度,在一次轮询之后,为每个队列的长度允许值再进行增大,以保证有数据可以调度出去,该调度算法主要解决了数据分组长度影响传统轮询调度算法公平性的问题,但不能满足数据业务减小时延的要求。
紧急轮询调度算法URR,主要通过计算一个紧急参数来提高调度方法对时延要求的适应性,该紧急参数与数据分组对时延的要求有关,每次轮询开始按照紧急参数依次降低的顺序访问,下一次重新计算紧急参数,通过设计紧急参数的计算方法,可以使对实时性要求较高的数据分组的时延较小,但是该紧急调度算法对公平性没有性能上的显著提高。
技术实现要素:
本发明的目的在于针对上述现有技术的不足,提出一种TDMA自组网的MAC层队列调度方法,以减小调度时延和资源浪费,并为所有邻节点队列提供公平性保证。
本发明的技术思路是:通过对本节点i的每个邻节点按照优先级从高到低分配队列,存储不同类型的数据帧,各数据帧在入队时记录下入队时间和队列长度,在发送时隙到来时,本节点根据数据帧的入队时间、队列长度、邻节点MTU值、队列优先级四个参数选定一个邻节点作为当前发送时隙目地地址对应的邻节点,其实现步骤包括如下:
(1)构建一个时隙表,在每个时隙的起始时刻读取时隙表中对应位置的值,如果该值为0,则表明该时隙为本节点接收时隙,进行数据接收,如果该值为1,则表明该时隙为本节点的业务时隙,进入步骤(2)进行队列调度;
(2)选取目地地址对应的邻节点:
(2a)构建一个入队时间表和队列长度表,分别用来存储各邻节点队列最早入队数据帧的入队时间和各邻节点队列的队列长度,为每个邻节点分别构建四个循环队列用以存储数据帧,队列优先级从高到低分别为0级、1级、2级、3级;
(2b)设置一个等待时限值T,查询入队时间表,判断所有邻节点队列中入队最早数据帧的等待时间是否超出等待时限值,若是,则选取该帧所在邻节点为目地地址对应的邻节点,进入步骤(3);若否,则进入步骤(2c);
(2c)设置一个队长临界值S,查询队列长度表,按照优先级从高到低的顺序判断是否有队列长度超出队长临界值的队列,若有,则选取该队列所在邻节点为目地地址对应的邻节点,并选中该队列队首指针指向的数据帧,进入步骤(3);若无,则进入步骤(2d);
(2d)按照节点号从低到高的顺序查询所有邻节点的最大传输单元MTU,找到最大MTU值,判断具有该最大MTU值的邻节点的数量,若只有一个,则该节点为目地地址对应的邻节点,并选中该邻节点最高优先级队列中队首指针指向的数据帧,进入步骤(3);若不止一个,则进入步骤(2e);
(2e)选择队列优先级:
(2e1)按照节点号从低到高的顺序查询上述具有最大MTU值的邻节点,判断上述邻节点中有多少个邻节点的0级队列不为空:若0级队列都为空,进入步骤(2e2),否则,进入步骤(2f);
(2e2)判断上述邻节点中有多少个邻节点的1级队列不为空:若都为空,进入步骤(2e3),否则,进入步骤(2f);
(2e3)判断上述邻节点中有多少个邻节点的2级队列不为空:若都为空,则判断上述邻节点有多少个邻节点的3级队列不为空;
(2f)判断步骤(2e)中得到的邻节点数量,若只有一个,则该节点为目地地址对应的邻节点,纪录下当前队列等级,并选中该队列队首指针指向的数据帧,进入步骤(3);若不止一个,则进入步骤(2g);
(2g)在上述若干个邻节点中,将各邻节点与步骤(2f)中纪录下的队列等级一样的队列进行比较,选取队列长度最长的队列所在邻节点,若存在具有相同最大队长的队列则选择队列所在邻节点号较小的那一个,该邻节点为目地地址对应的邻节点,并选中该队列队首指针指向的数据帧,进入步骤(3);
(3)根据最大传输单元MTU的值决定发送帧数量:
(3a)根据邻节点的最大传输单元MTU值,得到当前时隙允许传输的最大数据长度为L,而通过步骤(2)选中帧的帧长为L0,将L与L0进行比较:若L大于L0,将L0设为总帧长,执行步骤(3b),若L小于L0,则执行步骤(3c);
(3b)对队列队首指针加1,判断总帧长加上新的队列队首指针指向数据帧的帧长是否大于L,若是,则选取结束;若否,则同时选定新的队列队首指针指向的数据帧,并将总帧长加上该帧的帧长得到新的总帧长,重复本步骤过程直到最终总帧长大于L为止,再将最终选定的所有数据帧在当前隙全部发送出去;
(3c)将选中的数据帧拆分,当前时隙发送该数据帧长度为L的部分,同时标记步骤(2)中选中的邻节点,在下一个业务时隙到来时直接选定该邻节点为目地地址对应的邻节点。
本发明与现有技术相比具有以下优点:
第一,由于本发明考虑了等待时间参数,当有数据帧在队列中的等待时间超出门限,就会在当前业务时隙对该帧就行调度,确保所有的数据帧都会得到调度,保证了公平性,同时由于本发明考虑了队列长度参数,因此当某个邻节点的业务量较大时,会优先得到调度,这样会延缓队列满的情况,及时处理业务繁忙的邻节点的数据。
第二,由于本发明引入了最大传输单元MTU,优先选择链路状态好的邻节点为目地地址对应的邻节点,同时根据最大传输单元MTU值利用帧聚合的方式发送尽可能多的数据帧,提高了时隙的利用效率、传输速率和通信质量。
附图说明
图1是本发明的使用场景图;
图2是本发明的实现流程图。
具体实施方式
下面结合附图,对本发明作进一步的详细描述。
参照图1,对本发明的使用场景图作进一步的详细描述:
按照邻节点入网的先后顺序为所有邻节点进行从0到n的编号,为每个邻节点分配四个队列,用以存储数据帧,当业务时隙到来时,本节点根据调度方法选择一个邻节点作为目地地址对应的邻节点,进行数据帧的传输。
参照图2,对本发明的实施步骤作进一步的详细描述:
步骤1.选取本节点业务时隙。
1a)构建时隙表;
通过二维数组构建一个时隙表,用以表征当前时隙是否为本节点所占用,表中的值设为0或者1,0表示当前时隙被其他节点所占用,1表示当前时隙被本节点所占用;
1b)判定时隙类型:
在每个时隙的起始时刻读取时隙表中对应位置的值,如果该值为0,则进行数据接收,如果该值为1,则进入步骤2进行调度。
步骤2.判定最早入队数据帧的等待时间。
2a)构建入队时间表:
通过二维数组构建一个入队时间表,用以记录所有邻节点的四个队列中队首指针指向数据帧入队时间;
2b)构建循环队列:
为每个邻节点构建四个循环队列,用以存储不同类型的数据帧,队列优先级从高到低分别为0级、1级、2级、三级;
2c)计算相关时间参数:
设置一个等待时限T,调用系统函数读取当前时间,用当前时间减去等待时限,得到差值T0;
2d)判断是否存在等待时间超出等待时限的数据帧:
查询入队时间表,读取表中入队时间最早的值记为T1,将T0与T1进行比较,若T0小于T1,则表明等待时间超出等待时限值,选取具有该最小入队时间值的邻节点为目地地址对应的邻节点,进入步骤8;若T0大于T1,则表明等待时间未超出等待门限值,进入步骤3。
步骤3.判定队列长度。
3a)通过二维数组构建一个队列长度表,用以记录所有邻节点队列的队长;
3b)判断是否存在队长超出队长门限值的队列:
根据网络性能需求设置一个队长门限值L,查询队列长度表,读取队列长度表中的最大值L0,将L与L0进行比较:若L大于L0,选取具有该队长的队列所在邻节点为目地地址对应的邻节点,进入步骤8;若L小于L0,则进入步骤4。
步骤4.选取具有最大传输单元MTU的邻节点。
最大传输单元MTU是指在一个业务时隙时间范围内,能够传输最长数据帧的长度,按照邻节点号从小到大的顺序查询所有邻节点的最大传输单元MTU,找到最大传输单元MTU值;
判断具有该最大最大传输单元MTU值的邻节点数量:若只有一个,则选取具有该最大MTU值的邻节点为目地地址对应的邻节点,进入步骤8,否则,则进入步骤5。
步骤5.选取队列优先级。
5a)判断0级队列是否为空。
比较步骤4获得的具有最大传输单元MTU值的邻节点,统计具有最大传输单元MTU值的邻节点中有多少个邻节点的0级队列不为空:若0级队列都为空,则进入步骤5b,否则,则记录队列等级为0级,进入步骤6。
5b)判断1级队列是否为空。
统计具有最大传输单元MTU值的邻节点中有多少个邻节点的1级队列不为空:若1级队列都为空,进入步骤5c,否则,则记录队列等级为1级,进入步骤6。
5c)判断2级队列是否为空。
统计具有最大传输单元MTU值的邻节点中有多少个邻节点的2级队列不为空:若2级队列都为空,则统计具有最大传输单元MTU值的邻节点中有多少个邻节点的3级队列不为空,并记录队列等级为3级,进入步骤6;否则,则统计具有最大传输单元MTU值的邻节点中有多少个邻节点的2级队列不为空,并记录队列等级对2级,进入步骤6。
步骤6.判断邻节点数量。
判断步骤5中得到的邻节点数量,若只有一个,选取这个唯一的邻节点为目地地址对应的邻节点,进入步骤8,否则,则进入步骤7。
步骤7.队列长度比较确定目地地址对应的邻节点。
在具有最大传输单元MTU值的邻节点中,将具有与步骤5中纪录下的队列等级一样的队列进行比较,选择队长最长的队列所在邻节点,若存在队长相同的情况则选择邻节点号最小的一个邻节点,该邻节点为目地地址对应的邻节点,并选中该队列队首指针指向的数据帧。
步骤8.数据帧总帧长判定。
将上个步骤中选中的数据帧帧长设为总帧长S,判断该总帧长S是否小于最大传输单元MTU:若是,则进入步骤9;否则,则将此数据帧拆分为两部分,第一部分长度为最大传输单元MTU,第二部分长度为这个数据帧的剩余部分,发送长度为最大传输单元MTU的部分至目地邻节点,同时在下一个业务时隙到来时对该数据帧剩余部分进行调度。
步骤9.根据最大传输单元MTU进行帧聚合。
9a)将队列队首指针加1,得到新的队列队首指针指向数据帧的长度P,将这个数据帧的长度P与总帧长S相加,得到的值记为S1;
9b)将S1与最大传输单元MTU进行比较,若S1大于最大传输单元MTU,则进入步骤10,否则,同时选定新的队列队首指针指向的数据帧,并用这个数据帧的帧长P加上总帧长S得到新的总帧长;
9c)重复9a)-9b)直到最终总帧长大于最大传输单元MTU为止,将所有选定的数据帧发送至目地邻节点。
以上描述仅是本发明的一个具体实例,不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解本发明内容和原理后,都可能在不违背本发明原理、结构的情况下,进行形式和细节上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。