一种数据流整形方法、数据调度方法以及装置与流程

文档序号:12809380阅读:324来源:国知局
一种数据流整形方法、数据调度方法以及装置与流程

本发明涉及数据流量控制领域,尤其涉及一种数据流整形方法、数据调度方法以及装置。



背景技术:

网络在传输多个数据流时有可能发生拥塞,导致数据包延迟、丢失甚至出错,网络的传输性能不好。为了保证网络的高效运行,提出了一种虚拟时钟(virtualclock)技术。

virtualclock是一种基于流量控制的调度机制,它根据每个数据流的平均传输速率计算数据包的虚拟时间戳,并将数据包按照该时间戳排序,以达到数据流整形、减少突发的目的。

但是,若到达的数据包的虚拟时间较小,则为了实现数据包按照虚拟时间戳进行排序,需要多次比较到达的数据包与数据队列中已有的数据包的时间戳,且将到达的数据包多次前移,以将到达的数据包排到数据队列中较前的位置。大量的比较操作和移动操作会消耗大量的系统资源,产生较大的数据流整形成本,因此无法在实际工程中得到广泛应用。



技术实现要素:

本发明提供了一种数据流整形方法、数据调度方法、装置和计算设备,用于减少数据包的插队操作,实现网络中的数据流整形。

本发明第一方面提供了一种数据流整形方法,包括:数据流整形装置根据virtualclock方法计算接收到的第一数据包的第一虚拟时刻,然后根据第一虚拟时刻和n个数据队列中每个数据队列对应的时间段,从该n个数据队列中为第一数据包选择目标数据队列,其中n为大于或等于2的整数。数据流整形装置在确定了目标数据队列后,将第一数据包加入目标数据队列的队尾。本发明通过这样的方法,能够将密集的突发进行延时。此外,本发明实施例中按照数据包的虚拟时刻选择进入的数据队列,虚拟时刻较早的数据包,无 论其实际到达时间有多晚,都可以进入较早的时间段对应的数据队列;而虚拟时刻较晚的数据包,无论其实际到达的时间有多早,都会进入较晚的时间段对应的数据队列。这样就实现了将数据包基于虚拟时间进行简单的排序,进而实现了数据流整形。但是与virtualclock技术不同的是,本发明实施例仅将数据包加入对应的数据队列的队尾,因此不需要执行插队操作。这样就不会产生多个数据包的虚拟时刻的比较操作以及数据包的移动操作,节约了系统资源,降低了数据流整形成本,适宜在实际工程中大量应用。

可选的,该n个数据队列中,第k数据队列对应的时间段的结束时刻为第k+1个数据队列对应的时间段的起始时刻,这样能够保证各数据队列的时间段连续且不重叠。其中,1≤k<n。

可选的,数据流整形装置可以将第一虚拟时刻所在的时间段对应的数据队列,确定为目标数据队列。

可选的,数据流整形装置可以确定待整形的每个数据流对应的承诺时间间隔,然后根据每个数据流对应的承诺时间间隔来确定每个数据队列对应的时间段的时长,例如可以对每个数据流对应的承诺时间间隔求算术平均或加权平均,得到时间段的时长。其中,承诺时间间隔用于表示理想状态下数据流相邻两个数据包的到达时间间隔,该承诺时间间隔可以为数据流的承诺速率的倒数。

可选的,在第k数据队列对应的时间段的结束时刻时,数据流整形装置生成标识符,并将该标识符加入第k数据队列的队尾。该标识符可以为一个空数据包,或一个带有标识信息的数据包,也可以为其它形式。该标识符用于表示第k数据队列当前对应的时间段已结束。

可选的,若计算得到的第一虚拟时刻不在任何数据队列当前对应的时间段内,则数据流整形装置确定第一虚拟时刻不对应任何数据队列,丢弃第一数据包。

可选的,若第一数据包为第一数据包所属的第一数据流的第一个数据包,则数据流整形装置将第一数据包到达数据流整形装置的实际时刻确定为第一虚拟时刻。

可选的,若第一数据包所属的第一数据流的第一个数据包为第二数据包, 第一数据包为第一数据流中第二数据包的后一个数据包,则数据流整形装置确定第一数据流对应的虚拟时间间隔和第二数据包的第二虚拟时刻,其中第二虚拟时刻为第二数据包到达数据流整形装置的实际时刻;数据流整形装置根据第二虚拟时刻、虚拟时间间隔和第一数据包到达数据流整形装置的实际时刻,确定第一虚拟时刻,其中,第一虚拟时刻是第一数据包到达数据流整形装置的实际时刻、以及第二虚拟时刻经过虚拟时间间隔时间后的时刻中较晚的时刻。

本发明实施例的第二方面提供了一种数据调度方法,包括:数据调度装置确定其当前要调度的第一数据队列,并判断第一数据队列中是否包括待调度的第一数据包,其中,第一数据包的虚拟时刻在第一时间段内。若数据调度装置确定第一数据队列中不包括第一数据包,则调度第二数据队列中第二数据包。其中,第二数据队列对应第二时间段,第二数据包的虚拟时刻在第二时间段内,第二时间段的起始时刻不早于第一时间段的结束时刻。通过这样的方法,使得虚拟时间处于较早的时间段内的数据包能够先被调度,虚拟时间处于较晚的时间段内的数据包会后被调度。这样就同virtualclock一样实现了数据包基于虚拟时间早晚顺序的调度。

可选的,若数据调度装置确定第一数据队列中包括待调度的第一数据包,则调度该第一数据包。

可选的,在数据调度装置确定没有达到第一时间段的结束时刻,且数据调度装置调度了第二数据队列中的第二数据包后,可以再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,在当前时刻没有到达第一时间段的结束时刻,且第一数据队列中不包括第一数据包时,第二数据队列中也可能不包括第二数据包。在这种情况下,数据调度装置调度第三数据队列中待调度的第三数据包。其中第三数据队列对应第三时间段,第三时间段晚于第二时间段,即第三时间段的起始时刻不早于第二时间段的结束时刻,第三数据包的虚拟时刻在第三时间段内。数据调度装置在调度了第三数据包后,可以再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,数据调度装置可以判断在未达到第一时间段的结束时刻时,第 一数据队列是否为空,若为空,则数据调度装置确定第一数据队列中不包括第一数据包;若不为空,则数据调度装置确定第一数据队列中包括第一数据包。或者,数据调度装置可以在判断调度到第一时间段对应的标识符之前,第一数据队列中是否存在待调度的第一数据包,若存在,则数据调度装置确定第一数据队列中包括第一数据包;若不存在,则数据调度装置确定第一数据队列中不包括第一数据包。

可选的,数据调度装置可以将n个数据队列分为多个数据队列组,每个数据队列组中包括时间段相邻的一个或多个数据队列。以第一数据队列组与第二数据队列组为例:第一数据队列组中共包括m个数据队列,其中包括第一数据队列组包括第一数据队列与第二数据队列,m为大于等于2的整数。数据调度装置判断是否调度到了第一数据队列组中每一个数据队列的标识符,若是,则确定第一数据队列组中全部的数据队列都调度完成,数据调度装置开始调度第二数据队列组中的数据队列。其中,该m个数据队列中的第j个数据队列对应的标识符用于标识第j个数据队列对应的时间段的结束,1≤j≤m,且第一数据队列组中任何一个数据队列对应的时间段的结束时刻,均不晚于第二数据队列组中任一数据队列对应的时间段的起始时刻。

本发明第三方面提供了一种数据流整形装置,包括:时刻计算模块,用于计算接收到的第一数据包的第一虚拟时刻;队列选择模块,用于根据所述第一虚拟时刻,和n个数据队列中每个数据队列对应的时间段,从该n个数据队列中选择目标数据队列,所述n为大于或等于2的整数;数据进队模块,用于将第一数据包加入所述目标数据队列的队尾。

可选的,数据流整形装置还可以包括时间段确定模块,用于确定该n各数据队列中每个数据队列对应的时间段,其中,该n个数据队列中的第k数据队列对应的时间段的结束时刻为第k+1数据队列对应的时间段的起始时刻,1≤k<n。

可选的,队列选择模块具体用于:将第一虚拟时刻所在的时间段对应的数据队列,确定为目标数据队列。

可选的,时间段确定模块还用于:确定待整形的每个数据流对应的承诺时间间隔,该承诺时间间隔为每个数据流的承诺速率的倒数;根据每个数据 流对应的承诺时间间隔的平均值,确定每个数据队列对应的时间段的长度。

可选的,数据进队模块还用于:在确定到达第k数据队列对应的时间段的结束时刻后,在第k数据队列的队尾加入标识符,该标识符用于标识第k数据队列对应的时间段的结束。

可选的,数据进队模块还用于:在第一虚拟时刻不对应该n个数据队列中的任何队列的情况下,丢弃第一数据包。

本发明第四方面提供了一种数据调度装置,包括:队列确定模块,用于确定第一数据队列,其中第一数据队列对应第一时间段;数据判断模块,用于判断第一数据队列中是否包括待调度的第一数据包,该待调度的第一数据包的虚拟时刻在第一时间段内;数据调度模块,用于在数据判断模块确定所述第一数据队列中不包括待调度的第一数据包时,调度第二数据队列中待调度的第二数据包,其中,第二数据队列对应第二时间段,且第二时间段晚于第一时间段,该待调度的第二数据包的虚拟时刻在第二时间段内。

可选的,数据调度模块还用于:在数据判断模块确定第一数据队列中包括待调度的第一数据包时,调度待调度的第一数据包。

可选的,数据判断模块在没有到达所述第一时间段的结束时刻,且数据调度模块调度了所述待调度的第二数据包后,再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,数据调度模块还用于:在没有到达第一时间段的结束时刻,且第二数据队列中不包括待调度的第二数据包后,调度第三数据队列中待调度的第三数据包,其中第三数据队列对应第三时间段,且第三时间段晚于第二时间段,该待调度的第三数据包的虚拟时刻在第三时间段内。数据判断模块在数据调度模块调度了第三数据队列中待调度的第三数据包后,再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,数据判断模块具体用于:判断未到达第一时间段的结束时刻时第一数据队列是否为非空队列;或,判断调度到第一时间段对应的标识符之前是否存在待调度的第一数据包,其中第一时间段对应的标识符用于标识第一数据队列对应的第一时间段的结束。

可选的,第一数据队列组包括m个数据队列,m为大于或等于2的整数, 该m个数据队列包括第一数据队列和第二数据队列。数据判断模块还用于:判断是否调度到该m个数据队列的每个数据队列对应的标识符,该m个数据队列中的第j数据队列对应的标识符用于标识该第j数据队列对应的时间段的结束,1≤j≤m;在数据判断模块确定调度到所述m个数据队列的每个数据队列对应的标识符后,数据调度模块调度第二数据队列组包括的数据队列,其中第二数据队列组包括一个或多个数据队列,且第二数据队列组中任一数据队列对应的时间段的起始时刻不早于第一数据队列组中任一数据队列对应的时间段的结束时刻。

本发明第五方面提供了一种计算设备,包括输入装置、输出装置、处理器和存储器。通过调用存储器中存储的操作指令和数据,处理器在运行时执行本发明第一方面的数据流整形方法。

本发明第六方面提供了一种计算设备,包括输入装置、输出装置、处理器和存储器。通过调用存储器中存储的操作指令和数据,处理器在运行时执行本发明第二方面的数据调度方法。

附图说明

图1为本发明实施例提供的数据流整形方法一个实施例流程图;

图2为本发明实施例提供的数据调度方法一个实施例流程图;

图3为本发明实施例中数据队列分组应用场景示意图;

图4为本发明实施例提供的数据流整形装置一个实施例结构图;

图5为本发明实施例提供的数据调度装置一个实施例结构图;

图6为本发明实施例中计算设备一个实施例结构图;

图7为本发明实施例中计算设备一个实施例结构图。

具体实施方式

本发明实施例提供了一种数据流整形(trafficshaping)方法,用于减少数据包的插队操作,实现网络中的数据流整形。本发明实施例还提供了相关的数据调度方法以及装置,以下将分别进行描述。

网络在传输多个数据流的时候若发生拥塞,则每个数据流中的数据包都 有可能被丢弃。为了满足用户对不同应用不同服务质量的要求,需要根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量,例如:为实时性强且重要的数据流提供较高的处理优先级;为于实时性不强的普通数据流提供较低的处理优先级,甚至在网络拥塞时丢弃普通数据流中的数据包。为此,服务质量(qos,qualityofservice)技术应运而生。qos是用来解决网络延迟和阻塞等问题的一种技术。当网络过载或拥塞时,qos能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。

qos技术可以通过多种调度机制来实现,如轮询(roundrobin)机制、严格优先级调度(strictpriority)机制和加权公平队列(weightedfairqueuing)机制等。本发明实施例主要涉及qos中的virtualclock机制。

virtualclock是一种基于流量控制的调度机制,其原理为:第一数据包到达数据流整形装置后,数据流整形装置计算接收到的第一数据包的虚拟时刻,然后将所述第一数据包送入等待队列的队尾。所述第一数据包被送入等待数据队列后,若数据流整形装置接收到的第二数据包的虚拟时刻小于所述第一数据包的虚拟时刻,则数据流整形装置将所述第二数据包插入所述第一数据包之前。若所述等待队列的所述第一数据包之前还存在第三数据包,即所述第三数据包的虚拟时刻小于所述第一数据包的虚拟时刻,所述第二数据包的虚拟时刻小于所述第三数据包的虚拟时刻,则数据流整形装置进一步将所述第二数据包插入所述第三数据包之前,即虚拟时刻较小的数据包处于等待队列中靠近队首的位置。virtualclock技术需要多次比较数据包的虚拟时刻,并多次移动数据包在队列中的位置。

其中,数据流整形装置计算数据包的虚拟时刻的方法如下:

1、网络中有多条数据流,确定每条数据流对应的虚拟时间间隔。其中,确定每条数据流的虚拟时间间隔的方法有很多,例如可以根据每条数据流的平均传输速率或承诺速率(committedinformationrate)来确定虚拟时间间隔,也可以通过其它方法,此处不做限定。不同数据流的虚拟时间间隔可以相同也可以不同,此处不做限定。其中,假设数据流i对应的虚拟时间间隔为δt。

2、接收来自数据流i的数据包,假设该数据包的到达数据流整形装置的 实际时刻为tr。

3、计算该数据包的虚拟时刻tv1,具体的:

3.1若该数据包为数据流i的第一个数据包,则确定tv1=tr。

3.2若该数据包不为数据流i的第一个数据包,则确定数据流i中该数据包的上一个数据包的虚拟时刻tv2;

确定tv1=max(tr,tv2+δt)。

从1至3可以看出,virtualclock的主要作用是通过将密集的突发数据包进行延时来实现整流。突发越小,virtualclock对时延的影响越小;突发越大,virtualclock对时延的影响越大。

但是virtualclock技术需要多次比较数据包的虚拟时刻,并多次移动数据包在队列中的位置实现插队。而在实际工程中,数据包的插队操作是较难实现的。因此virtualclock在实际工程中一直不能得到很好的应用。

为了解决上述问题,本发明实施例提供了一种数据流整形方法,适用于数据流整形装置对不少于一个数据流的数据包进行整流,能够在不进行插队操作的情况下就实现数据的整流。本发明实施例提供的数据流整形方法的基本流程请参阅图1,包括:

101、确定n个数据队列和每个数据队列当前对应的时间段;

数据流整形装置确定n个数据队列,并确定每个数据队列当前对应的时间段。该n个数据队列用于接收经过数据流整形装置整形后的数据包,n为大于或等于2的整数。其中,第k数据队列对应的时间段的结束时刻为第k+1个数据队列对应的时间段的起始时刻,这样能够保证各数据队列的时间段连续且不重叠。其中,1≤k<n。

其中,每个数据队列用于容纳虚拟时刻在其对应的时间段内的数据包,具体将在下文中详细描述。

可选的,每个数据队列对应的时间段的时长可以相等,也可不相等。可选的,数据流整形装置可以确定待整形的每个数据流对应的承诺时间间隔,然后根据每个数据流对应的承诺时间间隔来确定每个数据队列对应的时间段的时长,例如可以对每个数据流对应的承诺时间间隔求算术平均或加权平均,得到时间段的时长。其中,承诺时间间隔用于表示理想状态下数据流相 邻两个数据包的到达时间间隔,该承诺时间间隔可以由数据流的承诺速率(committedinformationrate)取倒数得到,承诺速率的单位为包/秒(pps,packetpersecond)。

其中,本步骤101为可选步骤。在已经配置好了各数据队列对应的时间段的场景下或其它场景下,本发明实施例提供的数据流整形方法也可以不包括步骤101。

102、计算接收到的第一数据包的第一虚拟时刻;

当前时刻,来自某个数据流的第一数据包到达数据流整形装置,于是数据流整形装置计算该第一数据包的第一虚拟时刻。本发明实施例中,数据包的虚拟时刻的计算方法与virtualclock类似,可以参考上文中对virtualclock技术的相关描述,此处不做赘述。

103、确定目标数据队列;

数据流整形装置在得到了第一虚拟时刻后,根据第一虚拟时刻和每个数据队列当前对应的时间段,确定目标数据队列。可选的,可以将第一虚拟时刻所在的时间段对应的数据队列,确定为目标数据队列。

104、将第一数据包加入目标数据队列的队尾。

数据流整形装置确定了目标数据队列后,将第一数据包加入目标数据队列的队尾。

可以理解的,数据流整形装置对多个数据包执行了步骤101至104后,就可以将这些数据包加入对应的数据队列中。本发明实施例采用与virtualclock类似的虚拟时间技术方法,因此能够将密集的突发进行延时。此外,本发明实施例中按照数据包的虚拟时刻选择进入的数据队列,虚拟时刻较早的数据包,无论其实际到达时间有多晚,都可以进入较早的时间段对应的数据队列;而虚拟时刻较晚的数据包,无论其实际到达的时间有多早,都会进入较晚的时间段对应的数据队列。这样就实现了将数据包基于虚拟时间进行简单的排序,进而实现了数据流整形。但是与virtualclock技术不同的是,本发明实施例仅将数据包加入对应的数据队列的队尾,因此不需要执行插队操作。这样就不会产生多个数据包的虚拟时刻的比较操作以及数据包的移动操作,节约了系统资源,降低了数据流整形成本,适宜在实际工程中大量应用。

其中,若网络出现密集的突发数据包,则突发数据包的虚拟时刻将会累积的非常大。此时为了减小网络负担,数据流整形装置可以丢弃若干突发的数据包。因此本发明实施例中,若计算得到的第一虚拟时刻不在任何数据队列当前对应的时间段内,则数据流整形装置确定第一虚拟时刻不对应任何数据队列,数据流整形装置可以丢弃第一数据包。可以理解的,在数据队列对应的时间段的长度一定的情况下,数据队列的个数n越大,n个数据队列所能接收的数据包的虚拟时刻的跨度就可以取得越大,数据流整形装置在运行时丢弃的数据包就越少;数据队列的个数n越小,n个数据队列所能接收的数据包的虚拟时刻的跨度就越小,数据流整形装置在运行时丢弃的数据包就越多。因此可以参考网络允许的丢包数量来设置数据队列的个数n,n的上限为数据流整形装置所能支持的最大数据队列个数。

第k数据队列对应的时间段的结束时刻为第k+1个数据队列对应的时间段的起始时刻,且从上文的论述中可以看出数据包的虚拟时刻不会早于数据包到达的实际时刻。故在第k数据队列对应的时间段的结束时刻后,不会再有虚拟时间在第k数据队列对应的时间段内的数据包到达了。因此本发明实施例中,在第k数据队列对应的时间段的结束时刻时,数据流整形装置生成标识符,并将该标识符加入第k数据队列的队尾。该标识符可以为一个较小的空数据包,或一个带有标识信息的数据包,也可以为其它形式,此处不做限定,只要能被数据流整形装置以及在后续调度该n个数据队列的数据调度装置识别即可。该标识符用于表示第k数据队列当前对应的时间段已结束。此外,在加入了标识符后,数据流整形装置还可以将第k数据队列与新的时间段对应起来,使得该第k数据队列继续接收新的时间段的数据包。例如,假如数据流整形装置确定了6个数据队列,其中第1个数据队列对应时间段为起始时刻0s~1s、第2个数据队列对应时间段为1s~2s、第3个数据队列对应时间段为2s~3s、第4个数据队列对应时间段为3s~4s、第5个数据队列对应时间段为4s~5s、第6个数据队列对应时间段为5s~6s。在第1s时,数据流整形装置在第1个数据队列的队尾加入标识符,然后重新确定第1个数据队列当前对应的时间段变为6s~7s。之后,数据流整形装置将虚拟时间在6s~7s的数据包加入第1个数据队列的队尾。由此可以看出,每个数据队列都可以 包括多个不连续的时间段的数据包。

图1所示的实施例主要介绍了本发明实施例提供的数据流整形装置将数据包整流后加入数据队列的流程,下面将提供一种数据调度方法,适用于数据调度装置对图1所示的实施例中得到的n个数据队列进行调度,其基本流程请参阅图2,包括:

201、确定第一数据队列。

数据调度装置确定其当前要调度的第一数据队列。可以理解的,第一数据队列可以为经图1所示的实施例中的数据流整形装置整流后的n个数据队列中的一个,n为大于或等于2的整数。其中,第一数据队列当前对应第一时间段。

图2所示的实施例中的时间段,比如第一时间段和第二时间段,与图1所示的实施例中数据队列对应的时间段具有不同的含义。图1所示的实施例针对的是数据包的进队操作,数据队列对应的时间段指的是加入数据队列的队尾的数据包所在的时间段。而本实施例针对的是数据包的出队操作,数据队列当前对应的第一时间段指的是该数据队列中当前待出队的数据包所在的时间段。例如,第一数据队列用于接收虚拟时间在0s~1s和6s~7s的数据包,则在第0.5s时,对于数据流整形装置来说,该第一数据队列对应的时间段为0s~1s,对数据调度装置来说,该第一数据队列对应的时间段也为0s~1s;在第6.5s时,对于数据流整形装置来说,该第一数据队列对应的时间段为6s~7s,但若0s~1s的数据包没有全部出队,则对数据调度装置来说,该第一数据队列对应的时间段为0s~1s。

202、判断第一数据队列中是否包括待调度的第一数据包。

数据调度装置判断第一数据队列中是否包括待调度的第一数据包,其中,第一数据包的虚拟时刻在第一时间段内。

值得指出的是,图2所示的实施例中的第一数据包与图1所示的实施例中的第一数据包具有不同的含义,图1所示的实施例中所述的第一数据包指的是数据流整形装置接收到的数据包,图2所示的实施例中所述的第一数据包指的是数据调度装置待调度的数据包。图2所示的实施例中的第一数据包与图1所示的实施例中的第一数据包可以是同一个数据包,也可以是不同的 数据包,此处不做限定。

若数据调度装置确定第一数据队列中包括第一数据包,则执行步骤203;

若数据调度装置确定第一数据队列中不包括第一数据包,则执行步骤204。

203、调度第一数据包;

若数据调度装置确定第一数据队列中包括待调度的第一数据包,则调度该第一数据包,并再次执行步骤202。

204、调度第二数据队列中的第二数据包。

若数据调度装置确定第一数据队列中不包括第一数据包,则调度第二数据队列中第二数据包。第二数据队列对应第二时间段,第二数据包的虚拟时刻在第二时间段内。可以理解的,数据调度装置应该优先调度各数据队列中虚拟时刻早的数据包,其次调度虚拟时刻晚的数据包。因此,第二数据队列对应的第二时间段应当晚于第一数据队列对应的第一时间段,即第二时间段的起始时刻不早于第一时间段的结束时刻。

在图1所示的实施例中,经过数据流整形装置整形的数据包按照虚拟时间所在的时间段加入不同的数据队列中。本实施例中,数据调度装置优先调度第一时间段中的数据包,再调度第二时间段中的数据包。所述第一时间段的结束时刻不晚于所述第二时间段的开始时刻。通过这样的方法,使得虚拟时间处于较早的时间段内的数据包能够先被调度,虚拟时间处于较晚的时间段内的数据包会后被调度。这样就同virtualclock一样实现了数据包基于虚拟时间早晚顺序的调度。

值得指出的是,数据调度装置优先调度较早的第一时间段中的数据包,并不意味着必须将第一时间段中的数据包全部调度完后,才能调度第二时间段中的数据包。还是以6个数据队列为例:假如数据调度装置确定了6个数据队列,其中第1个数据队列对应时间段为起始时刻0s~1s、第2个数据队列对应时间段为1s~2s、第3个数据队列对应时间段为2s~3s、第4个数据队列对应时间段为3s~4s、第5个数据队列对应时间段为4s~5s、第6个数据队列对应时间段为5s~6s。数据调度装置在第0.2s时,确定当前第1数据队列的时间段最早,因此调度第1个数据队列,在第0.8s时调度了第1个数据队列中 现有的全部数据包,第1个数据队列为空。但是第1个数据队列在0.8s至1s之间仍有可能接收新的数据包。在一种实现方式中,数据调度装置等待至1s后调度了第1个数据队列中的全部数据包后,再调度第2个数据队列。在另一种实现方式中,数据调度装置可以先调度第2个数据队列或其它数据队列中的一个或多个数据包,并在满足预置条件后,再调度第1个数据队列中的数据包。其中,预置条件可以是预置时间、或调度了预置个数的数据队列、或调度了预置个数的数据包。这样可避免数据调度装置在不必要的等待过程中不能及时调度其它数据队列中的数据包,提高了网络数据调度的效率。即,数据调度装置执行步骤204调度了第二数据包后,若当前时刻没有到达第一时间段的结束时刻,则再次执行步骤202。

可选的,在当前时刻没有到达第一时间段的结束时刻,且第一数据队列中不包括第一数据包时,第二数据队列中也可能不包括第二数据包。在这种情况下,数据调度装置只需要调度第三数据队列中待调度的第三数据包即可。其中第三数据队列对应第三时间段,第三时间段晚于第二时间段,即第三时间段的起始时刻不早于第二时间段的结束时刻,第三数据包的虚拟时刻在第三时间段内。数据调度装置在调度了第三数据队列中的一个或多个数据包后,再执行步骤202。可以理解的,若第三数据队列中没有第三时间段的数据包,则数据调度装置可以调度第四数据队列中的第四时间段的数据包,其中第四时间段的起始时刻不早于第三时间段的结束时刻,以此类推。

上面三段的论述中提到,若当前时刻没有到达第一时间段的结束时刻,则需要再次执行步骤202。因此数据调度装置在步骤202中确定第一数据队列中不包括第一数据包时,还可以确定当前是否到达第一时间段的结束时刻。确定当前是否到达第一时间段的结束时刻的方法有很多,例如,若图1所示的实施例中,数据流整形装置执行了可选步骤“在第k数据队列对应的时间段的结束时刻时,数据流整形装置生成标识符,并将该标识符加入第k数据队列的队尾”,则数据调度装置可以使用标识符来判断是否到达第一时间段的结束时刻。具体的:

(a)若第一数据队列为空,且数据调度装置没有调度到第一时间段对应的标识符,则表示第一数据队列中还没有加入第一时间段对应的标识符,数 据调度装置确定第一数据队列中不包括第一数据包,且当前时刻没有到达第一时间段的结束时刻。

(b)若数据调度装置调度到第一时间段对应的标识符,则表示第一时间段中的所有待调度的数据包均被调度完成。数据调度装置确定第一数据队列中不包括第一数据包,且当前时刻已经到达第一时间段的结束时刻。

(c)若第一数据队列不为空,且数据调度装置没有调度到第一时间段对应的标识符,则数据调度装置确定第一数据队列中包括第一数据包。

若第一数据队列中不包括第一数据包,则调度第二数据队列。若第二数据队列中不包括第二数据包,则调度第三数据队列。即:若时间段早的数据队列中没有待调度的数据包,则先调度时间段晚的数据队列。但是,先调度时间段晚的数据队列必然会打乱各个队列中数据包被调度的顺序。过多的将时间段晚的数据队列优先调度,就无法实现数据包基于虚拟时间早晚顺序的调度。

为了解决上一段所描述的问题,数据调度装置可以将n个数据队列分为多个数据队列组,每个数据队列组中包括时间段相邻的一个或多个数据队列。以第一数据队列组与第二数据队列组为例:第一数据队列组中共包括m个数据队列,其中包括第一数据队列组包括第一数据队列与第二数据队列;第二数据队列组包括一个或多个数据队列,且第一数据队列组中任何一个数据队列对应的时间段的结束时刻,均不晚于第二数据队列组中任一数据队列对应的时间段的起始时刻。数据调度装置第一数据队列组中全部的数据队列都调度完成后,再调度第二数据队列组中的数据队列。其中,数据调度装置可以根据是否调度到数据队列对应的标识符来确定数据队列是否调度完成。即,数据调度装置可以判断是否调度到了第一数据队列组中每一个数据队列的标识符,若是,则确定第一数据队列组中全部的数据队列都调度完成。其中,第一数据队列组的m个数据队列中,第j个数据队列对应的标识符用于标识第j个数据队列对应的时间段的结束,1≤j≤m。

下面将以6个数据队列为例对数据队列的分组进行说明,请参阅图3:

假如数据调度装置确定了6个数据队列a~f,其中数据队列a对应时间段为0s~1s、数据队列b对应时间段为1s~2s、数据队列c对应时间段为 2s~3s、数据队列d对应时间段为3s~4s、数据队列e对应时间段为4s~5s、数据队列f对应时间段为5s~6s。数据调度装置将这6个数据队列分为两个数据队列组,其中第一数据队列组包括数据队列a、b、c,第二数据队列组包括数据队列d、e、f。图3中,每个无色小方框用于表示一个数据包,无色小方框中上一行的数字用于表示数据包进入数据队列的实际时刻,下一行的数字用于表示数据包的虚拟时刻。每个灰色小方框用于表示一个标识符,标识符中的数字用于表示该标识符对应的时刻。

在0.8s时,数据队列a为空,于是数据调度装置先调度数据队列b中的一个数据包,再返回调度数据队列a。在第1.5s时,数据队列b为空,于是数据调度装置先调度数据队列c中的一个数据包,再返回调度数据队列b。在第2.7s时,数据队列c为空,但由于数据调度装置没有调度到数据队列c中2s~3s时间段对应的标识符,因此数据调度装置不会调度数据队列d。在第3s后,数据队列a、b、c中的标识符都被数据调度装置调度到,于是数据调度装置从第二数据队列组中的数据队列d开始调度。该6个数据队列中的数据包最终的出队顺序如图3所示。

本发明实施例还提供了一种数据流整形装置,其结构请参阅图4,包括:

时刻计算模块401,用于计算接收到的第一数据包的第一虚拟时刻;

队列选择模块402,用于根据第一虚拟时刻和n个数据队列中每个数据队列对应的时间段,从该n个数据队列中选择目标数据队列,其中n为大于或等于2的整数;

数据进队模块403,用于将第一数据包加入目标数据队列的队尾。

本发明实施例提供的数据流整形装置采用与virtualclock类似的虚拟时间技术方法对密集的突发进行延时,并根据数据包的虚拟时刻将数据包加入不同的数据队列,虚拟时刻较早的数据包,无论其实际到达时间有多晚,都可以进入较早的时间段对应的数据队列;而虚拟时刻较晚的数据包,无论其实际到达的时间有多早,都会进入较晚的时间段对应的数据队列。这样就实现了将数据包基于虚拟时间进行简单的排序,进而实现了数据流整形。本发明实施例提供的数据流整形装置仅将数据包加入对应的数据队列的队尾,不需要执行插队操作,因此不会产生多个数据包的虚拟时刻的比较操作以及数 据包的移动操作,节约了系统资源,降低了数据流整形成本,适宜在实际工程中大量应用。

可选的,数据流整形装置还可以包括时间段确定模块404,用于确定该n各数据队列中每个数据队列对应的时间段,其中,该n个数据队列中的第k数据队列对应的时间段的结束时刻为第k+1数据队列对应的时间段的起始时刻,1≤k<n。

可选的,队列选择模块402具体用于:将第一虚拟时刻所在的时间段对应的数据队列,确定为目标数据队列。

可选的,时间段确定模块404还用于:确定待整形的每个数据流对应的承诺时间间隔,该承诺时间间隔为每个数据流的承诺速率的倒数;根据每个数据流对应的承诺时间间隔的平均值,确定每个数据队列对应的时间段的长度。

可选的,数据进队模块403还用于:在确定到达第k数据队列对应的时间段的结束时刻后,在第k数据队列的队尾加入标识符,该标识符用于标识第k数据队列对应的时间段的结束。

可选的,数据进队模块403还用于:在第一虚拟时刻不对应该n个数据队列中的任何队列的情况下,丢弃第一数据包。

本发明实施例还提供了一种数据调度装置,其结构请参阅图5,包括:

队列确定模块501,用于确定第一数据队列,其中第一数据队列对应第一时间段;

数据判断模块502,用于判断第一数据队列中是否包括待调度的第一数据包,该待调度的第一数据包的虚拟时刻在第一时间段内;

数据调度模块503,用于在数据判断模块502确定所述第一数据队列中不包括待调度的第一数据包时,调度第二数据队列中待调度的第二数据包,其中,第二数据队列对应第二时间段,且第二时间段晚于第一时间段,该待调度的第二数据包的虚拟时刻在第二时间段内。

图5所示的实施例提供的数据调度装置优先调度第一时间段中的数据包,再调度第二时间段中的数据包。其中第一时间段的结束时刻不晚于所述第二时间段的开始时刻。这样使得虚拟时间处于较早的时间段内的数据包能 够先被调度,虚拟时间处于较晚的时间段内的数据包能够后被调度,进而实现了数据包基于虚拟时间早晚顺序的调度。

可选的,数据调度模块503还用于:在数据判断模块确定第一数据队列中包括待调度的第一数据包时,调度待调度的第一数据包。

可选的,数据判断模块502在没有到达所述第一时间段的结束时刻,且数据调度模块503调度了所述待调度的第二数据包后,再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,数据调度模块503还用于:在没有到达第一时间段的结束时刻,且第二数据队列中不包括待调度的第二数据包后,调度第三数据队列中待调度的第三数据包,其中第三数据队列对应第三时间段,且第三时间段晚于第二时间段,该待调度的第三数据包的虚拟时刻在第三时间段内。数据判断模块502在数据调度模块503调度了第三数据队列中待调度的第三数据包后,再次执行判断第一数据队列中是否包括待调度的第一数据包的步骤。

可选的,数据判断模块502具体用于:判断未到达第一时间段的结束时刻时第一数据队列是否为非空队列;或,判断调度到第一时间段对应的标识符之前是否存在待调度的第一数据包,其中第一时间段对应的标识符用于标识第一数据队列对应的第一时间段的结束。

可选的,第一数据队列组包括m个数据队列,m为大于或等于2的整数,该m个数据队列包括第一数据队列和第二数据队列。数据判断模块502还用于:判断是否调度到该m个数据队列的每个数据队列对应的标识符,该m个数据队列中的第j数据队列对应的标识符用于标识该第j数据队列对应的时间段的结束,1≤j≤m;在数据判断模块502确定调度到所述m个数据队列的每个数据队列对应的标识符后,数据调度模块503调度第二数据队列组包括的数据队列,其中第二数据队列组包括一个或多个数据队列,且第二数据队列组中任一数据队列对应的时间段的起始时刻不早于第一数据队列组中任一数据队列对应的时间段的结束时刻。

可选的,本发明实施例提供的数据流整形装置和数据调度装置均可以由路由器、交换机或其它具有存储转发功能的设备来担任。

本发明实施例还提供了一种计算设备600,其基本结构请参阅图6,包括 输入装置601、输出装置602、处理器603和存储器604(其中处理器603的数量可以一个或多个,图6中以一个处理器603为例)。在本发明的一些实施例中,输入装置601、输出装置602、处理器603和存储器604可通过总线或其它方式连接,其中,图6中以通过总线连接为例。存储器604可以包括只读存储器和随机存取存储器,并向处理器603提供操作指令和数据。存储器604的一部分还可以包括非易失性随机存取存储器。

其中,通过调用存储器604存储的操作指令和数据,处理器603在运行时执行图1所示的实施例中的方法,

本发明实施例还提供了一种计算设备700,其基本结构请参阅图7,包括输入装置701、输出装置702、处理器703和存储器704(其中处理器703的数量可以一个或多个,图7中以一个处理器703为例)。在本发明的一些实施例中,输入装置701、输出装置702、处理器703和存储器704可通过总线或其它方式连接,其中,图7中以通过总线连接为例。存储器704可以包括只读存储器和随机存取存储器,并向处理器703提供操作指令和数据。存储器704的一部分还可以包括非易失性随机存取存储器。

其中,通过调用存储器704存储的操作指令和数据,处理器703在运行时执行图2所示的实施例中的方法,

上述装置或计算设备的相关描述可以对应参阅方法实施例部分的相关描述和效果进行理解,本处不做过多赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本发明各个实施例中的各模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1