一种实现带权带宽分配的拥塞控制方法
技术领域
本发明涉网络数据传输及技术领域,具体为一种实现带权带宽分配的拥塞控制方法。
背景技术
在数据中心里,不同的数据传输任务往往具有不同的重要程度。它们希望网络能够按照传输任务的优先顺序,提供差异化的带宽分配,而不是简单的按照流的粒度进行公平性的带宽分配。例如,在优化平均任务完成时间的场景中,这些流希望网络能够按照剩余任务量越小越优先的顺序来分配带宽,这样能够实现平均流完成时间的优化。而在优化时限满足性的场景中,这些流具有最晚完成时限属性,如果实际的传输完成时间超过了该最晚完成实现,则收益会下降,此时,这些流希望网络能够按照最晚完成时间剩余时间少的流优先的策略分配带宽,从而让更多的流能够在自己的最晚完成时限内完成。
因此,如何在网络中为传输任务提供差异化的带宽分配服务,按照任务给定的优先顺序分配带宽,是十分重要的网络需求。
目前已有多种能够实现按优先级带宽分配的方案,大致分为以下几类。
第一类方案是设计一个集中的控制器,严格的控制网络中的每个数据包应该何时进行发送,或者限制每个流的发送速率,通过集中式的精确控制,让不同的流按照优先关系占用网络链路。这类方法有两方面缺点。一是控制器管控的内容太多太细,成为整个网络的性能瓶颈;二是与传统网络兼容性不好,需要做大量的协议修改。
第二类方案是让每个数据包携带优先级值,然后让设计新颖的网络交换机或者路由器,让网络设备严格的按照流的优先级顺序近排队和转发,从而实现按照优先级的带宽分配。这种方法虽然能够实现很好的调度效果,但是需要交换机进行复杂的计算和处理,而目前的交换机支持的优先级数目非常有限,因此这种方案很难在实际生产中进行部署。
第三类方案则是在第二类方案的基础上做出了一些设计妥协。因为目前的大部分交换机具备支持4-8个数目不等优先级的队列能力。因此这类方案通过动态的将不同的流所需的优先级映射到这些已有的数量的优先级上,虽然会有一定的性能损失,但是也能较好的实现按优先级进行带宽分配的目的。不过这种方案依然存在部署的问题。这是因为,实际的数据中心里同通常是很多类的业务并存。这些网络优先级往往已经预留给了特殊的应用或者服务,最后每类应用最多只有一个队列可以用。当多个同类业务经过同一个链路时,这些方案依然无法在这些相同业务类型的多个流之间按照优先顺序使用带宽。
此外,还有一些方案则是通过控制DCTCP(数据中心传输控制协议Data CenterTransmission Control Protocol)拥塞控制窗口在应对ECN(显式拥塞通知ExplicitCongestion Notification)标记时的减少幅度来控制每个流对拥塞反应,从而让不同的流按照不同的优先顺序抢占带宽。具体的,假设某个TCP流的当前拥塞窗口为W,接收者反馈的标记ECN的ACK所占比例值的滑动平均值为a,是[0,1]之间的小数。在传统的DCTCP协议中,DCTCP发送方在收到带ECN标记的ACK后,将对窗口进行调整。先后出现了两种调整策略:A策略收到一个ECN标记的ACK后将W减少Wa/2(即W=W*(1-a/2),并确保在一个窗口的数据量内W最多因此减少一次;B策略每收到一个ECN标记的ACK后,将W减少a/2,由于在拥塞避免情况下发送方每收到一个ACK还会将拥塞窗口增加1/W,因此此种情况下拥塞控制窗口的改变情况是:W=W+1/W-a/2。
为了让不同的流对拥塞有不同处理,这类方案主要是对A策略进行修改。让发送方在遇到ECN时,对窗口的更新方式改变为W=W*(1-p/2);其中p=ad (a的d次幂),d是一个每个流可以单独配置的参数。这类方案有连发面的缺点,一是d的取值情况和带宽分配结果之间的关系并不明确,没有完备的理论支撑;二是不同的流之间d的选择相互独立,缺乏全局的视角,很难做到全局协作优化。
研究表明,对于采用了类DCTCP拥塞控制机制的传输协议,通过给每个流设置x参数,然后让发送者在进行窗口调整时,不再都是以Wa/2(如果是A策略)或者a/2(如果是B策略)进行拥塞窗口的调整,而是以Wa/(2x)或者a/(2x)进行调整,网络可以让这些流在共同瓶颈链路上分得的带宽与各自的x参数值成比例。
基于这一理论发现,对于优先级更高的流,网络只需要让其x参数值更大,即可实现按优先级的带权带宽分配。
因此,对于要实现平均流完成时间优化,或者时限满足性优化的传输场景,网络只需要让优先级更高的流的x参数更大即可。
发明内容
针对上述问题,本发明的目的在于提供一种x参数的计算方法,能够让全局网络按照给定的优先级对并发的流进行差异化的带宽分配。技术方案如下:
一种实现带权带宽分配的拥塞控制方法,包括:
(1)定义流:将网络中的数据存储节点作为发送方,数据请求者作为接收方,发送方向接收方发送数据,接收方收到后反馈确认消息,发送的数据和收到的确认反馈一起称为一个流;
(2)定义x参数:将流对ECN标记的敏感程度用x参数表示,x取值越大越不敏感;不同的流的x取值不同;
通过全局控制器接纳应用提交的网络带宽分配需求,并根据这些传输需求的优先级顺序,计算并更新各个流的x参数值;
(3)x参数的计算方法包括:
输入:按照优先级,对网络中的N个传输任务进行排序,排序后分别记为F[1], F[2], …, F[N];且每个传输任务包含一组相互关联的流,其中第F[i]的任务包含的流的集合为P[i],其中的第j个子流记为p[i,j];对于只包含一个子流的传输任务,P[i]={p[i,1]},集合只包含一个流; p[i,j]代表一条子流,也代表这条子流经过链路的集合;
用x_min代表每个流的x参数的取值下限;
用x_sum,代表经过一个链路的所有流的x参数之和的上限;x_sum默认取R*C/2;其中R为网络满载情况下网络中的平均往返延迟,C为网络链路的平均带宽;
输出:所有传输任务每个子流的x参数值记作{x[i,j]};
计算过程如下:
1)初始化集合E为空,用于记录已经分配了较大x值的链路;
2)统计每个链路上经过的流的数目,将经过链路e的流的数目记为num[e];
3)对于每个链路e,创建空队列pi[e],用于记录经过该链路的高优先级的流;
4)从i=1到N,依次处理F[i]任务中的子流;
a. 创建空集合EP,用于记录该任务中的流所经过的链路中,那些将该任务的流保存在高优先级队列pi[e]中的链路;
b. 对于P[i]中的每个子流p[i,j]进行下述处理:若p[i,j]经过集合E中所包含的链路;则x[i,j]=x_min;否则,x[i,j]=x_sum,并将 p[i,j]中的链路添加到集合EP中;对p[i,j]中的每个链路e,将p[i,j]添加到队列pi[e]中;
c. 将集合EP中的链路添加到集合E中;
5) 对网络中的每个链路e:
计算 r=max(1, (x_sum – x_min(num[e] – len(pi[e]))) / len(pi[e])),其中len(pi[e])表示计算并返回pi[e]中包含的流个数;
对pi[e]中的每个流p[i,j],更新其x[i,j] = min(x[i,j], r)
计算完毕。
进一步的,所述x参数的计算和更新有3个触发条件:新任务出现、正在运行的任务结束,或者是正在进行任务的优先级发生改变。
本发明的有益效果是:本发明在性能上,够让全局网络按照给定的优先级进行带宽的差异化分配,实现全局优化;在应用和部署上,该方案只需引入一个控制器,对现有传输协议做非常小的改动,无需修改交换机硬件,易于实现和部署。
具体实施方式
下面结合具体实施例对本发明做进一步详细说明。将网络中的数据存储节点作为发送方,数据请求者作为接收方,发送方向接收方发送数据,接收方收到后反馈确认消息,发送的数据和收到的确认反馈一起称为一个流;将流对ECN标记的敏感程度用x参数表示,x取值越大越不敏感;不同的流的x取值不同;
本发明包含两个组件:
1)全局控制器:全局控制器接纳应用提交的网络带宽分配需求,并根据这些传输需求的优先级顺序,计算并更新各个流的x参数值;x参数的计算和更新有3个触发条件:新任务出现、正在运行的任务结束,或者是正在进行任务的优先级发生改变。
2)工作在发送端的代理模块,能够按照控制器的要求更新每个流的x参数。
是x参数的计算方法
输入:网络中有N个传输任务,它们已经按照优先级进行了排序,排序后分别记为F[1], F[2], …, F[N]。并且,每个传输任务包含一组相互关联的流,其中第F[i]的任务包含的流的集合为P[i],其中的第j个子流记为p[i,j](对于只包含一个子流的传输任务,P[i]={p[i,1]},集合只包含一个流)。在后续描述中,p[i,j]除了代表一条子流,也代表这条子流经过链路的集合;
x_min,可配置的参数,代表每个流的x参数的取值下限;x_min默认取0.5;
x_sum,可配置的参数,代表经过一个链路的所有流的x参数之和的上限;x_sum默认取R*C/2;其中R为网络满载情况下网络中的平均往返延迟,C为网络链路的平均带宽。
输出:所有传输任务每个子流的x参数值:{x[i,j]}。
核心思想:
1)根据x参数的不同,网络中的流可以分为两类,第一类的x取值为0.5,另外一类取值大于0.5,但是整个链路上链路权重之和应当尽量不大于x_sum。
2)对于网络中的每条链路,那么本方法将确保链路上最多只有一个任务的流的取较大的x值,其他任务的流取的较小的x值(即x_min)。
3)一个流能够获得较大的x参数值,等于它在整个路径所有链路上获得的x值中的最小者。
计算过程如下:
1)初始化集合E为空,用于记录已经分配了较大x值的链路;
2)统计每个链路上经过的流的数目,将经过链路e的流的数目记为num[e];
3)对于每个链路e,创建空队列pi[e],用于记录经过该链路的高优先级的流;
4)从i=1到N,依次处理F[i]任务中的子流;
a. 创建空集合EP,用于记录该任务中的流所经过的链路中,那些将该任务的流保存在高优先级队列pi[e]中的链路;
b. 对于P[i]中的每个子流p[i,j]进行下述处理:如果p[i,j]经过了集合E中所包含的链路;那么x[i,j]=x_min;
否者,x[i,j]=x_sum,并将 p[i,j]中的链路添加到集合EP中;
对p[i,j]中的每个链路e,将p[i,j]添加到队列pi[e]中;
c. 将集合EP中的链路添加到集合E中
5) 对网络中的每个链路e:
计算 r=max(1, (x_sum – x_min(num[e] – len(pi[e]))) / len(pi[e]));
对pi[e]中的每个流p[i,j],更新其x[i,j] = min(x[i,j], r)
计算完毕。
计算出来的x值可以用于DCTCP,QUIC等协议中;
任务的优先级如果采用剩余任务越小越优先的方式获得,则本方法所计算获得的x能够实现平均任务传输完成时间的优化;
如果采用时限要求剩余时间越少越优先的方式获得,则本方法所计算获得的x能够实现时限满足性的优化。