基于RTT的结合比例积分微分控制的拥塞控制方法及设备
技术领域
本发明涉及数据通信领域,具体涉及一种数据中心中网络拥塞控制的方法及设备。
背景技术
随着硬件技术的发展和应用需求的演变,数据中心网络对微秒级别的超低时延和高带宽的需求越来越高。一方面,硬件技术的发展使得数据中心底层的链路带宽,从最早的1Gbps,发展到目前的100Gbps,甚至已经有了200Gbps的链路。高速的链路催生了资源解耦合的数据中心新架构方式。高速网络将CPU、GPU、内存和磁盘等硬件资源连接起来,方便了这些硬件的统一管理和使用。另一方面,随着新型存储元件NVMe和机器学习专用的GPU、TPU等新硬件的出现,许多计算密集型的任务或者应用,如高性能计算和大规模分布式机器学习等,因为在运行时通常伴随着大量的参数更新和传递,其性能瓶颈已经从CPU等计算单元转移到了网络端。若底层网络无法维持低时延导致参数更新不及时,CPU等计算单元会出现空转等待的资源浪费现象,应用的性能也会大幅下降。综上,数据中心中底层架构和上层应用都要求稳定的低时延环境。
网络低时延要求拥塞控制方法可以维持稳定的低队列。现有的拥塞控制方法难以在实际环境中真正满足这一要求。数据中心中现有的拥塞控制方法大致可以分为如下几类。一是依赖特殊交换机的拥塞控制算法。这类方法依赖特殊交换机来进行细粒度的速率分配等功能,需要定制交换机,成本高且可扩展性差;二是基于接收端决策的拥塞控制方法。这类方法通过接收端收集网络状态等信息来做出决策,通常需要发送端发送流大小等额外的信息,或者重新定义数据包的发送接收流程,软件开销较大,往往难以部署升级;三是基于发送端决策的拥塞控制方法。通常有基于ECN标记和基于RTT两种方式。基于ECN标记的方式虽然简单有效,但是在不同的网络环境下需要进行繁琐的参数调试等问题,难以在实际环境中大规模部署。基于RTT的方式测量简单,不依赖底层网络设备,适用性广。但是现有的基于RTT的拥塞控制方法,或基于每一轮RTT之间的变化梯度来调整速率,无法维持稳定的队列;或基于固定RTT阈值的方法调整速率,在大规模incast的环境下往往存在比较大的稳态误差。而消除稳态误差,可以采用控制理论中比例积分微分控制的方法调整速率。比例积分微分控制,将当前RTT和目标RTT之间的差值,按照比例、积分、微分的形式线性相加,得到一个偏差值,来调整当前速率,使得调整后测到的RTT达到目标RTT值。比例积分微分控制的方法计算简单,但是单纯使用比例积分微分控制,在大规模场景下存在流不公平的问题。此外,在大规模incast的环境下,基于RTT的方法均存在RTT反馈滞后的问题,稳定时队列来回震荡的范围大。因此,目前还不存在一种简单有效的拥塞控制算法,可以在大规模incast的环境下,依然可以维持稳定的低时延队列。
发明内容
针对上述现有技术的不足,本发明的目的在于提供一种维持稳定低时延的RTT拥塞控制方法,以解决现有拥塞控制方法中无法大规模部署、无法处理大规模incast,及依赖底层网络设备等问题;本发明是在发送端实现的基于RTT的结合比例积分微分控制的拥塞控制方法,整个过程不依赖交换机的额外功能,在某些无交换机的网络架构上依然适用。
本发明的另一目的是提供一种能够实现上述拥塞控制方法的计算机设备。
为了达到上述目的,本发明第一方面提供一种基于RTT的结合比例积分微分控制的拥塞控制方法,其总体思路是:在数据流发送方测量当前网络中的RTT时延,然后判断当前时延是否在可容忍的范围之内,进行对应的速率调整。若低于可容忍的震荡最低值,速率增加;若高于可容忍的震荡最高值,速率降低;当RTT时延在可容忍的范围之内时,本发明使用比例积分微分控制的方法对速率进行细粒度的调整,从而保证队列长度的稳定。所述方法具体包括以下步骤:
1)发送方判断是否发生RTT反馈超时,并测量当前时刻网络路径的RTT时延;
2)若RTT反馈超时,则发送方进行主动降速,直接将速率调整为允许的最小速率;若RTT反馈未超时,则发送方根据当前RTT是否在设定的可容忍的队列震荡范围之内,采用不同的方式更新速率,其中,在当前RTT处于可容忍的队列震荡范围之外的情况下,采用基于固定阈值的方法调整速率,在当前RTT处于可容忍的队列震荡范围之内的情况下,采用比例积分微分控制的方法更新速率;
3)发送方将步骤2)中得到的速率作为当前的目标速率,控制数据包之间发送的时间间隔,以达到目标速率。
进一步的,所述步骤1)中判断RTT反馈超时和测量RTT的具体方法为:
11)发送方在每次发出数据包时,记录当前系统时间戳或网卡硬件时间戳;
12)若在设定的RTT反馈超时阈值FEEDBACK_TIMEOUT之内没有收到ACK,说明当前网络上已经发生拥塞,直接跳到步骤2)进行主动降速;
13)若在FEEDBACK_TIMEOUT时间之内收到ACK,则记录收到ACK时的系统时间戳或网卡硬件时间戳,将该时间戳与步骤11)中得到的时间戳作差值,得到的值即为当前端到端的时延;
14)将步骤13)中得到的端到端时延,减去当前速率下数据包的序列化时间,得到当前链路的RTT值,记为newRTT。
进一步的,所述步骤2)中在当前RTT处于可容忍的队列震荡范围之外的情况下,采用基于固定阈值的方法调整速率包括:
21)计算当前链路RTT值newRTT和设定的目标时延targetRTT之间的差值比例Perror,公式为Perror=(newRTT-targetRTT)/targetRTT;
22)令设定的可容忍的队列震荡范围为[-k,k],k取值在0和1之间,当Perror<-k时,newRate=rate+δ;当Perror>k时,newRate=rate(1-β(1-targetRTT(1+k)/newRTT)),其中δ为速率加速步长,β为降速调节比,newRate为调整后的速率,rate为当前速率。
进一步的,所述步骤2)中在当前RTT处于可容忍的队列震荡范围之内的情况下,采用比例积分微分控制的方法更新速率包括:
2a)计算当前链路RTT值newRTT和设定的目标时延targetRTT之间的差值比例Perror,公式为Perror=(newRTT-targetRTT)/targetRTT;
2b)令设定的可容忍的队列震荡范围为[-k,k],k取值在0和1之间,当-k<=Perror<=k时,计算比例部分Perror、微分部分Derror、积分部分Ierror,三者相加得到降速的指标值error,然后根据该error值进行速率调整,计算公式如下:newRate=rate(1-β*error),newRate为调整后的速率,rate为当前速率,β为降速调节比。
进一步的,所述比例部分为Perror;
所述微分部分Derror实际为每次测量的RTT之间的差值,即RTT变化的梯度值,计算公式为rttGradient=(1-α)rttGradient+α(newRTT-prevRTT)/minRTT;
所述积分部分Ierror实际为每次Perror的累计值的平均值,计算方法如下:
accumulated_Perror=(1-α)accumulated_Perror+α*Perror;
accumulated_num+=1;
Ierror=accumulated_Perror/accumulated_num;
其中α为指数平均移动的平滑因子,β为降速调节比,minRTT为标准化时延,用于将RTT梯度标准化;newRTT为当前的RTT值,prevRTT为上一次测得的RTT值,rttGradient为梯度累加值,初始值为0;accumulated_Perror为每轮Perror的累计和,相当于积分值,初始值亦为0,accumulated_num为进行比例积分微分控制的次数。
进一步的,所述步骤3)具体包括:
31)若RTT反馈未超时,使用步骤2)中计算得到的速率,按照公式packet_size*8/rate计算当前时间点到下次发送数据包时应间隔的时长,按此间隔进行数据包的发送,其中packet_size为发送的数据包尺寸,单位为bytes,rate为发送速率,单位为Gbps;
32)若RTT反馈超时,直接将发送速率降为允许的最小速率。
进一步的,所述步骤32)还包括:按照步骤31)的方式计算发送间隔时间,在计算的发送时间间隔的基础上加上一个随机发送差值,作为最终发送时间间隔,并按照该最终发送时间间隔进行数据包的发送。
第二方面,本发明提出一种计算机设备,所述设备包括一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述一个或多个程序被所述一个或多个处理器执行时实现如本发明第一方面所述的拥塞控制方法的步骤。
本发明具有以下有益效果:
1、实现简单,不依赖特定硬件,易于大规模部署:本发明基于RTT的方式实现拥塞控制,故本发明具有基于RTT的拥塞控制方法所具有的一般优势;
2、收敛快,震荡小:本发明通过设置反馈超时时间,发送方在大量incast的场景下也可以快速检测到拥塞,有效缓解了因RTT反馈滞后导致的队列长度震荡;
3、维持了稳定的低时延队列:本发明通过设定可容忍的震荡范围,在测得RTT的时延在该震荡范围之外时,本发明采用基于阈值的速率调整方法,使得队列长度快速达到靠近阈值的震荡范围;当队列长度在算法所允许的震荡范围之内时,本发明采用基于比例积分微分控制的方法,细粒度地控制队列长度尽量靠近阈值,从而保证了算法的快速收敛,维持了稳定的低时延队列。
附图说明
图1为本发明的拥塞控制方法应用场景示例图;
图2为本发明的拥塞控制方法在实际环境中的部署示意图;
图3为本发明所述的基于RTT的拥塞控制方法中速率调整方法的流程图。
具体实施方式
为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明,实施方式提及的内容并非对本发明的限定。
图1为本发明的拥塞控制方法的一种应用场景示例图。N个发送方经过同一个交换机连接到同一个接收方。每个发送方上都部署本发明所述的拥塞控制方法。当这N个发送方同时向接收方发送数据时,交换机到接收方的链路成为瓶颈链路,交换机上会出现拥塞队列。在本发明所提供的拥塞控制算法的作用下,交换机上可以维持一个稳定的低时延拥塞队列,且所有流可以均分瓶颈链路带宽。为了方便后续实例的表述,本实例中默认链路上不会出现丢包等出错现象,每条链路的传播时延为1us。
图2为本发明的拥塞控制方法在发送方上的部署示意图。本方法可以部署在主机端协议栈或应用自定义的用户态协议栈中,控制网卡的数据包发送行为。主要包括三个模块,具体表述如下:
RTT计算与RTT反馈超时检测模块:每次收到ACK时,根据发送时记录的时间戳计算当前RTT,同时也负责检测RTT反馈超时;
速率更新模块:若RTT反馈超时,直接降为最小速率,否则,按照图3所示的流程进行速率更新计算;
速率调整模块:根据速率更新模块计算出的新速率,调整待发送数据流的数据包之间的发送间隔,若RTT反馈超时,需要在此基础上额外加上一个0到10us之间的随机值,然后,按照调整后的发送间隔发送数据包。
图3为本发明所述方法中,最核心的测量RTT并进行速率更新计算部分的流程图,具体流程表述所下:
1)发送方判断是否发生RTT反馈超时,并测量当前时刻网络路径的RTT时延;
2)若RTT反馈超时,则发送方主动降速;否则,根据当前RTT是否在设定的可容忍的队列震荡范围之内,采用不同的方式更新速率。
在本实施例中,若链路为空,测得的RTT为5us。为了保证链路不为空,目标阈值targetRTT至少需要大于5us,保证每条流在检测到拥塞时有一定的速率下降空间。此外,targetRTT也不能太大,否则会导致交换机拥塞队列上数据包堆积。在本实例中,设置targetRTT=20us,即可在两者之间达到平衡。
进一步的,步骤1)的具体流程如下:
11)发送方在每次发出数据包时,记录当前系统时间戳,或者使用更为精确的网卡硬件时间戳;
12)若在设定的RTT反馈超时阈值FEEDBACK_TIMEOUT之内仍然没有收到ACK,说明当前网络上已经发生拥塞,瓶颈链路上已有很长的排队时延,直接跳到步骤2)进行主动降速;
13)若在FEEDBACK_TIMEOUT时间之间收到ACK,和步骤11)类似,记录收到ACK时的系统时间戳或网卡硬件时间戳。将该时间戳与步骤11)中得到的时间戳作差值,得到的值即为当前端到端的时延;
14)将步骤13)中得到的端到端时延,减去当前速率下,数据包的序列化时间,得到的即为当前链路的newRTT。
在本实施例中,设置FEEDBACK_TIMEOUT=10*targetRTT=200us。若要求更快的收敛时间,在其他场景下,FEEDBACK_TIMEOUT可以相应地设得更低。
进一步的,步骤2)的具体流程如下:
21)若RTT反馈超时,说明已经拥塞,则速率调整为方法允许的最小速率,直接转到步骤3);
22)若RTT反馈没有超时,计算当前链路newRTT和设定的目标时延targetRTT之间的差值比例Perror,公式为Perror=(newRTT-targetRTT)/targetRTT;
23)比较Perror和设定的可容忍的队列震荡参数k,按照如下的公式调整速率:
当Perror<-k时,newRate=rate+δ;
当Perror>k时,newRate=rate(1-β(1-targetRTT(1+k)/newRTT));
当-k<=Perror<=k时,根据比例积分微分控制的方法进行速率调整。其具体流程如下:
23a)计算比例部分,即为Perror;
23b)计算微分部分Derror,实际为每次测量的RTT之间的差值,即为RTT变化的梯度值,计算公式为rttGradient=(1-α)rttGradient+α(newRTT-prevRTT)/minRTT;
23c)计算积分部分Ierror,实际为每次Perror的累计值的平均值,计算公式如下:
accumulated_Perror=(1-α)accumulated_Perror+αPerror;
accumulated_num+=1;
Ierror=accumulated_Perror/accumulated_num;
23d)上述三个步骤累加即为降速的指标值error,然后根据该error值进行速率调整,计算公式如下:
error=Perror+Ierror+Derror;
newRate=rate(1-βerror)。
其中,k为设定的可容忍的队列震荡参数,是一个在0和1之间取值的百分比值。在本实例中,设定参数k=0.2,即设定队列长度可以在固定阈值上下20%的范围内震荡。在不同的场景或者应用需求下,参数k也可以作相应的修改。δ为速率加速步长,α为指数平均移动的平滑因子,β为降速调节比。在本实例中,设定δ=1M,α=0.875,β=0.008。minRTT为标准化时延,用于将RTT梯度标准化,在本实例中设定为链路为空时的RTT值,为5us;newRTT为当前的RTT值,prevRTT为上一次测得的RTT值,rttGradient为梯度累加值,初始值为0;accumulated_Perror为每轮Perror的累计和,相当于积分值,初始值亦为0,accumulated_num为进行比例积分微分控制的次数。
上述流程在每个发送方节点上分别进行。得到更新后的速率值后,每个发送方按照公式packet_size(单位为bytes)*8/rate(单位为Gbps)计算出从当前时间点到下一个发送数据包时应该间隔的时长,然后按照该值重新设置下一次发送数据包的时间点。如果发送方检测到RTT反馈超时,计算下一次发送间隔时,会额外加上一个0到10us的随机值,防止出现多个发送方同时降速又同时加速的情况出现。发送方在经过多次计算迭代后,最终测到的RTT时延会稳定在targetRTT附近,此时每个发送方均分瓶颈链路带宽,且交换机上维持了一个稳定的低时延拥塞队列。
本发明与现有拥塞控制方法的区别在于,在基于RTT的方法的基础之上,设定了拥塞队列长度在目标阈值附近上下震荡的可容忍范围,在该范围之外,采用基于阈值的速率调整方式,在该震荡范围之内,采用比例积分微分控制的方法调整速率。此外,本发明设定了一个RTT反馈超时阈值,有效缓解了大量流incast时,因RTT反馈滞后导致的收敛慢、震荡大的问题。相比现有的基于RTT的拥塞控制方法,本发明消除了基于固定阈值的方法中出现的稳态误差,使得队列长度可以细粒度地靠近甚至最终达到目标阈值,进一步降低了稳定时的拥塞队列长度和队列震荡范围,维持了一个稳定的低时延队列,也有效避免了单纯使用比例积分微分控制时可能出现的不公平的现象。相比同样在发送端做决策的基于ECN标记的拥塞控制方法,本发明在网络环境变化时,无需进行繁琐的大量参数调整,适用于不同的网络环境。同时,本发明不依赖交换机打ECN标记,在某些无交换机,仅依靠服务器本身连接的网络架构下依然可以很好的工作。相比依赖接收端做决策的拥塞控制方法,本发明不需要对现有的网络协议栈或者数据包格式作出改变,软件开销小,易于部署升级。相比依赖特殊交换机的拥塞控制方法,本发明无需特殊的硬件,在实际环境中部署时,成本低,且易于迭代更新。
基于与方法实施例相同的技术构思,根据本发明的另一实施例,提供一种计算机设备,所述设备包括:一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述一个或多个程序被所述一个或多个处理器执行时实现如前所述的拥塞控制方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明具体应用途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为落入本发明的保护范围。