一种拥塞控制方法、设备及计算机可读介质与流程

文档序号:23230224发布日期:2020-12-08 15:18阅读:194来源:国知局
一种拥塞控制方法、设备及计算机可读介质与流程

本申请涉及信息技术领域,尤其涉及一种拥塞控制方法、设备及计算机可读介质。



背景技术:

rdma(remotedirectmemoryaccess,远程直接内存访问)技术能够提供高带宽、低时延和低cpu负载的特性,在数据中心中的应用越来越广泛。rdma在以太网上的实现标准叫roce(rdmaoverconvergedethernet),由于以太网不能保证不丢包,为了到达不丢包的目的,引入了pfc(priority-basedflowcontrol,基于优先级流量控制)技术。

然而,虽然pfc可以保证不丢包,但这个技术也存在相应的缺点,比如不公平、拥塞扩散和网络死锁等问题,所以在网络中需要尽量少的使用pfc。在这种需求下,出现了dcqcn(datacenterquantizedcongestionnotification)方案实现网络的拥塞控制。

dcqcn算法中涉及的参与方如图1所示,包括发送端设备(sender),接收端设备(receiver)和交换机(switch)三个参与方。交换机负责转发从发送端设备到接收端设备的数据包。当交换机中的队列出现拥塞时,交换机在数据包上打上ecn(explicitcongestionnotification)标识。当接收端设备收到带有ecn标识的数据包后,会相应地产生cnp(congestionnotificationpackets)报文告知发送端设备,从而引导发送端设备调整发送速度。dcqcn方案可以有效的在网络拥塞的早期控制发送端设备的吞吐量,从而避免大量pfc的出现。

但是,dcqcn算法具有深层次的设计缺陷,这种方案是一种开环的、模糊的、依靠队列的控制机制。

1)开环的控制是指,dcqcn的升速和减速的调整的时间周期、幅度,均是依据一组预设的固定参数。而这一组固定的参数无法适应于不同的网络拥塞场景以及网络流量的动态变化。

2)模糊的控制是指,dcqcn响应网络的拥塞状态,依据的是网络反馈的单一比特的ecn信号,因此算法对于网络拥塞的程度、变化,都不能做及时且精确的响应。

3)依靠队列的控制是指,dcqcn算法需要在网络中维护一个较大的队列,并且依靠队列变化来反馈一个模糊的网络拥塞的程度,但是这就造成了网络端到端延迟的增加,同rdma提供低延迟网络的初衷是违背的。

此外,还有dctcp(datacentertcp)、timely以及如bbr、cubic等通用的拥塞控制算法。其中,dctcp算法同样需要利用ecn标识,并且依靠队列变化来反馈一个模糊的网络拥塞的程度,因此导致该算法对于网络拥塞的程度、变化,都不能做及时且精确的响应,并且会造成了网络端到端延迟的增加。

timely算法是利用网卡硬件测量网络的rtt(round-triptime)值,从而检测并控制拥塞的算法。该算法的核心思想是基于硬件的rtt测量从而排除掉软件层面影响,因此条件下测量的rtt值仅仅包含网络传输的延迟。在获得rtt值之后,可以根据rtt值的大小执行增速或者减速,此外还可以根据rtt值的变化方向进行动态调整。该算法的不足在于:首先,需要依赖于网络拥塞造成网络排队的增加,因此其同样需要在网络中维护一个较大的队列,并且依靠队列变化来反馈网络拥塞的程度,但是这就造成了网络端到端延迟的增加;其次,timely算法的拥塞调整手段拥塞收敛较慢;最后,依靠rtt调整拥塞会受反向拥塞的影响,且有网络公平性的问题。

而bbr、cubic等通用的拥塞控制算法的主要问题在于拥塞的检测仅仅是基于丢包,而往往这种检测存在滞后性,若网络有大量的排队延迟,在网络发生丢包减速前,拥塞的影响已经造成。并且丢包重传也会造成延迟,甚至超时(timeout),因此拥塞控制的整体效果不佳。

申请内容

本申请的一个目的是提供一种拥塞控制方案,用以解决现有方案在实现拥塞控制时准确性不佳,且会造成延迟增加的问题。

本申请实施例提供了一种拥塞控制方法,该方法包括:

发送端设备从接收端设备获取数据包的ack报文,其中,所述ack报文中包含交换机向数据包插入的检测信息;

所述发送端设备根据第一检测信息和第二检测信息确定带宽利用率,其中,所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息;

所述发送端设备根据所述带宽利用率调整发送窗口。

本申请实施例还提供了一种拥塞控制方法,该方法包括:

交换机接收由发送端设备发送的数据包,其中,所述发送端设备发送数据包的发送窗口由所述发送端设备根据带宽利用率调整获得,所述带宽利用率由所述发送端设备第一检测信息和第二检测信息确定;

所述交换机向所述数据包中插入检测信息,并将插入检测信息后的数据包发送至接收端设备,以使所述接收端设备在接收到所述数据包后向所述发送端设备返回所述数据包的ack报文,其中,所述ack报文中包含交换机向数据包插入的检测信息,所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息。

本申请实施例还提供了一种实现拥塞控制的发送端设备,该发送端设备包括:

接收模块,用于从接收端设备获取数据包的ack报文,其中,所述ack报文中包含交换机向数据包插入的检测信息;

控制模块,用于根据第一检测信息和第二检测信息确定带宽利用率,其中,所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息,以及根据所述带宽利用率调整发送窗口;

发送模块,基于发送窗口发送向接收端设备发送数据包。

此外,本申请的一些实施例还提供了一种计算设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行所述的拥塞控制方法。

本申请实施例还提供了一种实现拥塞控制的交换机,该交换机包括:

接收模块,用于接收由发送端设备发送的数据包,其中,所述发送端设备发送数据包的发送窗口由所述发送端设备根据带宽利用率调整获得,所述带宽利用率由所述发送端设备第一检测信息和第二检测信息确定;

信息插入模块,用于向所述数据包中插入检测信息,

发送模块,用于将插入检测信息后的数据包发送至接收端设备,以使所述接收端设备在接收到所述数据包后向所述发送端设备返回所述数据包的ack报文,其中,所述ack报文中包含交换机向数据包插入的检测信息,所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息。

本申请的另一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述的拥塞控制方法。

本申请实施例提供方案中,交换机在传输数据时会向数据包插入的检测信息,而发送端设备可以从接收端设备获取数据包的ack报文,该ack报文中所述检测信息,发送端设备根据下一个rtt区间对应的ack报文中的第一检测信息以及上一个rtt区间对应的ack报文中的第二检测信息进行计算,可以确定带宽利用率,进而根据所述带宽利用率调整发送窗口。由于本方案是在每个rtt开始时都可以利用交换机在传输数据时会向数据包插入的检测信息计算带宽利用率,据此对发送窗口进行闭环调整,能够适应不同的网络拥塞程度,使得控制更加准确,并且在整个过程中不依赖队列,不会造成延迟的增加。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为拥塞控制方案中涉及的参与方的示意图;

图2为本申请实施例中一种拥塞控制方案所涉及的场景示意图;

图3为本申请实施例中交换机对数据包插入的int信息的一种格式示意图;

图4为发送端设备在实现本申请实施例提供的拥塞控制方法时的处理流程图;

图5为本申请实施例中一种调整发送窗口的方式的处理逻辑流图;

图6为本申请实施例提供的一种发送端设备的结构示意图;

图7为本申请实施例提供的一种计算设备的结构示意图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

本申请实施例提供了一种拥塞控制方法,该方法在每个rtt开始时都可以利用交换机在传输数据时会向数据包插入的检测信息计算带宽利用率,据此对发送窗口进行闭环调整,能够适应不同的网络拥塞程度,使得控制更加准确,并且在整个过程中不依赖队列,不会造成延迟的增加。

在实际场景中,拥塞控制的过程中涉及如图1所示的三个参与方,包括发送端设备(sender),接收端设备(receiver)和交换机(switch)。其中,发送端设备用于根据本申请实施例中提供的拥塞控制方法来调整发送窗口,以对链路上的拥塞情况进行控制。

交换机用于转发发送端设备发出的数据包,并在转发过程中逐个或者抽样在数据包中插入检测信息,即可以对每个转发的数据包都插入检测信息,或者也可以在每n个数据包选择一个数据包插入检测信息。此外,当链路中存在多个交换机时,每个交换机都可以在数据包中插入检测信息。例如在图2所示的场景中,包含两个交换机link-1和link-2,其插入的检测信息为int(in-bandnetworktelemetry)信息,当发送端设备sender发送数据包pkt后,首先由交换机link-1转发该数据包pkt,此时交换机link-1会在其中插入int信息int1,然后再由交换机link-2转发该数据包pkt,此时交换机link-2会在其中插入int信息int2,再将数据包pkt发送给接收端设备receiver。

图3示出了本申请实施例中交换机对数据包插入的int信息的一种格式,其中,int信息包括以下几部分:nhop用于表示交换机序号,每个交换机加1,pathid是逐跳交换机id进行xor(异或)运算后的结果,1sthop、2ndhop分别表示各个交换机插入的b、ts、txbytes和qlen,其中,b是端口速率,ts是插入int信息时的timestamp(时间戳),即插入时钟,txbytes是发送队列发送数据计数,即累积的端口发送字节数,qlen是发送队列长度。在实际场景中,根据设备的具体情况,还可以增加其它信息,例如int包识别头、int信息类别等等。

接收端设备receiver接收带有检测信息的数据包,会产生关于该数据包的ack报文,并将该ack反馈至发送端设备。该ack报文中会携带交换机向数据包中插入的检测信息,若有多个交换机向数据包中插入了多个检测信息,ack报文中会携带所有的检测信息。以图2所示的场景为例,接收端设备返回的ack报文中,会同时携带link-1和link-2插入的int信息int1和int2。

图4示出了发送端设备在实现本申请实施例提供的拥塞控制方法时的处理流程,包括以下处理步骤:

步骤s401,从接收端设备获取数据包的ack报文。其中,所述ack报文中包含交换机向数据包插入的检测信息,所述检测信息是能够用于计算确定链路的带宽利用率的信息,例如在本申请的一些实施例中,所述检测信息可以是至少包括了发送队列长度(qlen)、发送队列发送数据计数(txbytes)、插入时钟(ts)和端口速率(b)的int信息。

发送端设备发出的数据包经由交换机转发至接收端设备,交换机在转发时可以向数据包中插入相应的检测信息,即在数据包的交互过程中,交换机执行以下的处理以实现拥塞控制:交换机接收由发送端设备发送的数据包,向所述数据包中插入检测信息,并将插入检测信息后的数据包发送至接收端设备。接收端设备在获取到包含检测信息的数据包之后,会产生并向发送端设备返回关于该数据包的ack报文,该ack报文中会携带数据包中的检测信息,以便于接收端设备能够从收到的ack报文获得检测信息,从而以此为依据实现拥塞控制。为了确保拥塞控制的实时性,接收端设备对于携带检测信息的数据包,可以优先产生并返回ack报文,以使发送端设备能够尽快获得检测信息,以达到迅速响应的目的。

步骤s402,根据第一检测信息和第二检测信息确定带宽利用率。其中,所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息。所述rtt是指从发送端设备发送一个数据包到达接收端设备,并收到接收端设备返回ack报文的时间,rtt区间则表示该一个rtt所对应的时间区间。

rtt区间的区分可以采用如下的方式:首先,在发送数据包时记录下一个rtt区间对应数据包的序列号snd_nxt,而每个数据包对应的ack报文返回时携带的序列号是接收端设备收到的数据包序列号加1。当发送端设备收到ack报文时,可以根据ack报文的序列号判断是否经历了一个rtt区间。

例如,发送端设备在准备发送序列号为n的数据包时,可以记录下一个rtt区间(即该序列号为n的数据包的发送过程所对应的rtt区间)对应的数据包的序列号n,接收端设备收到序列号为n的数据包,会产生序列号为n+1的ack报文,表示接收端设备下一次期待收到序列号为n+1的数据包。由此,发送端设备会收到序列号为n+1的ack报文,通过比较收到ack报文的序列号n+1以及发出的数据包的序列号n,可以确定是否经历了一个rtt区间。以本实施例中的情况为例,由于n+1>n,则表示收到的ack报文时,已经经历了一个rtt区间。

在本申请的一些实施例中,可以在从接收端设备获取数据包的ack报文之后,根据ack报文的序列号判断接收到的ack报文是否为下一个rtt区间对应的ack报文。若判断结果为下一个rtt区间对应的ack报文,则执行后续步骤更新发送窗口,否则可以不做调整或者仅在原发送窗口的基础上进行小幅度的调整。由此,可以在每个rtt区间更新一次发送窗口。

在计算带宽利用率时,可以先基于根据第一检测信息和第二检测信息,计算链路在下一个rtt区间中需要处理的数据量和链路的带宽延迟积(bdp,bandwidth-delayproduct),然后根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟,可以计算带宽利用率。其中,下一个rtt区间中需要处理的数据量表示了链路在当前的rtt区间中还需要处理的数据总量,即in-flight包的数据量,而链路的带宽延迟积则表示了链路在一个rtt区间中实际可以处理的数据量。由此,利用in-flight包的数据量除以bdp,就可以获得整个链路的带宽利用率。

例如,在本申请实施例中可以将第一检测信息可以记作ack.l,将第二检测信息可以记作l。当再次经历一个rtt区间之后,会收到新的ack.l,而原来的ack.l将作为新的l。ack.l和l中都可以包含qlen、txbytes、ts、b四种信息,以用于计算带宽利用率。对于包含多个交换机的场景,对于各个交换机插入的检测信息,可以记为ack.l[i]、l[i],i表示不同的交换机,例如前述link-1插入的int信息即为ack.l[1]和l[1],link-2插入的int信息即为ack.l[2]和l[2]。

对于各个交换机所插入的检测信息,可以采用如下的方式计算下一个rtt区间中需要处理的数据量以及链路的带宽延迟积:可以根据第一检测信息中的发送队列发送数据计数和第二检测信息中的发送队列发送数据计数之差,以及第一检测信息中的插入时钟和第二检测信息中的插入时钟之差,计算发送速率txrate,即:

txrate=(ack.l[i].txbytes-l[i].txbytes)/(ack.l[i].ts–l[i].ts)

而后,可以根据所述发送速率、基线rtt值和第一检测信息中的发送队列长度,计算链路在下一个rtt区间中需要处理的数据量,即为ack.l[i].qlen+txrate·t,其中,t为基线rtt值。此外,可以根据第一检测信息中的端口速率和基线rtt值,计算链路的带宽延迟积ack.l[i].b·t。由此可以计算出带宽利用率为:

u=(ack.l[i].qlen+txrate·t)/ack.l[i].b·t

=ack.l[i].qlen/(ack.l[i].b·t)+txrate/ack.l[i].b

由于此时计算获得带宽利用率u是基于两个rtt区间(即前一个rtt区间和下一个rtt区间)对应的检测信息计算获得带宽利用率,该带宽利用率表示了短时间内的带宽利用情况,其结果有可能会收到短时间内的网络环境变化影响。因此,可以基于计算获得的该带宽利用率进行滑动平均处理,以获得能够更加有效地表示实际带宽利用情况的平均带宽利用率。

由此,本申请的一些实施例中,在根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟积计算带宽利用率时,可以先根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟积,计算第一瞬时带宽利用率,该第一瞬时带宽利用率为当前计算获得的瞬时带宽利用率u。然后可以根据第一瞬时带宽利用率和第二平均带宽利用率进行滑动平均处理,计算第一平均带宽利用率u。其中,所述第一平均带宽利用率为当前计算获得的平均带宽利用率,所述第二平均带宽利用率为上一次计算获得的平均带宽利用率。在本申请的一些实施例中,可以采用如下的公式计算第一平均带宽利用率

u=(1-τ/t)·u'+τ/t·u

其中,u'为第二平均带宽利用率,t为基线rtt值,τ为(ack.l[i].ts–l[i].ts)与t中的较小值,即τ=min(ack.l[i].ts–l[i].ts,t),u为第一瞬时带宽利用率。在此,本领域技术人员应当理解,上述计算第一平均带宽利用率的方式仅为举例,现有或今后出现的基于类似原理的其它方式如果能够适用于本申请,也应该包含在本申请的保护范围内,并以引用的形式包含于此。

在实际场景中,对于第一个rtt区间,由于不存在上一次计算获得的平均带宽利用率,因此,该次计算时的第二平均带宽利用率可以根据实际发送窗口的情况进行确定,例如,若发送端设备对于一个新的数据流都采用满线速发送整个数据,此时在第一个rtt区间计算第一平均带宽利用率时的第二平均带宽利用率可以设定为1。

在本申请的一些实施例中,可以在根据第一瞬时带宽利用率和第二平均带宽利用率进行滑动平均处理,计算第一平均带宽利用率之前,判断所述第一瞬时带宽利用率是否大于第二瞬时带宽利用率,并仅在判断结果为是时执行后续处理。其中,所述第二瞬时带宽利用率为上一次计算获得的瞬时带宽利用率。由此,可以仅在比上一个rtt区间的带宽利用率更高时,更新第一平均带宽利用率。

步骤s403,根据所述带宽利用率调整发送窗口。其中,调整发送窗口的原则如下:若带宽利用率较高,则可以适当减速,即减小发送窗口;若带宽利用率较低,则可以适当加速,即增大发送窗口。

在本申请的一些实施例中,可以采用如下的方式调整发送窗口:当所述带宽利用率大于等于预设的利用率阈值时,乘性地减小发送窗口。其中,乘性地调整即为将基线值与某一系数相乘,以实现快速的增大或减小。例如,本实施例中可以设置预设的利用率阈值为utarget,计算获得的带宽利用率为前述的第一平均带宽利用率u,当u≥utarget时,可以采用如下的公式计算发送窗口w:

r=rc/(u/utarget)

w=r·t

其中,rc为每次调整的速率基线值,即上一次调整后的r或者第一次调整时的初始值,乘性的调整系数为带宽利用率与利用率阈值之比。在本申请的另一些实施中,还可以采用如下方式调整发送窗口:

r=rc/(u/utarget)+airate

w=r·t

其中,airate为预先设置的数量级小于r的预设调整值,例如在万兆以太网场景下,r可以是100gbps,而airate可以是100mbps以内。

而当所述带宽利用率小于预设的利用率阈值时,可以加性地增大发送窗口。其中,加性地调整即为将基线值与某一系数相加,以实现慢速的增大或减小。例如,本申请实施例中加性的调整系数可以是预设调整值airate,当u<utarget时,可以采用如下的公式计算发送窗口w:

r=rc+airate

w=r·t

由此,本申请实施例提供的调整发送窗口的方式服从aimd(additive-increasemultiplicative-decrease)准则,从而能够体现公平性。

此外,当连续加性地增大发送窗口的次数大于等于预设次数时,此时一般表示链路还有大量带宽未被利用,因此可以快速增大发送窗口,即乘性地增大发送窗口。

在实际场景中,可以设置一个参数incstage,在每次加性地增大发送窗口后,该参数incstage自增1,在每次乘性地减小发送窗口后,该参数incstage置0,由此可以在通过比较该参数incstage与预设次数maxstage,来确定是否需要乘性地增大发送窗口。图5示出了本申请实施例中一种调整发送窗口的方式的处理逻辑。

由于本申请实施例的方案中,带宽利用率会在经过每个rtt区间时进行计算,因此调整发送窗口也会在每个rtt区间开始时进行,由此使得拥塞控制能够适应网络拥塞的程度和不同流量的影响。并且,由于发送窗口的调整是依赖于网络的拥塞情况,即发送队列长度、发送队列发送数据计数、时钟等,相对于单依靠单一的ecn信息,本方案能够更加精准的确定网络的拥塞程度,而且使得收敛更加快速,一般可以在一个rtt实现收敛。此外,由于本方案并不依赖队列的反馈,而是基于交换机插入的检测信息直接计算带宽利用率进而调整发送窗口,因此不会增加网络延迟。

由于实际场景中可能存在一些特殊情况,例如部分传输协议无法支持每个数据包都产生ack报文,或者部分传输协议会在收到多个数据包才产生一个ack报文,甚至不需要产生ack报文(如rdmaread),或者在双向数据传输时ack报文会与数据包共享一个消息队列造成int信息的延迟等。在这些场景下,可以使用专用于携带检测信息的探测数据包(probing包)来获取检测信息,probing包可以使用于数据包相同的五元组,或者特殊的五元组,但都需要使其能够测量链路的拥塞情况。

基于同一发明构思,本申请实施例中还提供了一种实现拥塞控制的发送端设备,所述发送端设备对应的方法是前述实施例中拥塞控制方法,并且其解决问题的原理与该方法相似。

本申请实施例提供的一种发送端设备在实现拥塞控制时,在每个rtt开始时都可以利用交换机在传输数据时会向数据包插入的检测信息计算带宽利用率,据此对发送窗口进行闭环调整,能够适应不同的网络拥塞程度,使得控制更加准确,并且在整个过程中不依赖队列,不会造成延迟的增加。

在实际场景中,拥塞控制的过程中涉及如图1所示的三个参与方,包括发送端设备(sender),接收端设备(receiver)和交换机(switch)。其中,发送端设备用于根据本申请实施例中提供的拥塞控制方法来调整发送窗口,以对链路上的拥塞情况进行控制。

交换机用于转发发送端设备发出的数据包,并在转发过程中逐个或者抽样在数据包中插入检测信息,即可以对每个转发的数据包都插入检测信息,或者也可以在每n个数据包选择一个数据包插入检测信息。此外,当链路中存在多个交换机时,每个交换机都可以在数据包中插入检测信息。例如在图2所示的场景中,包含两个交换机link-1和link-2,其插入的检测信息为int(in-bandnetworktelemetry)信息,当发送端设备sender发送数据包pkt后,首先由交换机link-1转发该数据包pkt,此时交换机link-1会在其中插入int信息int1,然后再由交换机link-2转发该数据包pkt,此时交换机link-2会在其中插入int信息int2,再将数据包pkt发送给接收端设备receiver。

图3示出了本申请实施例中交换机对数据包插入的int信息的一种格式,其中,int信息包括以下几部分:nhop用于表示交换机序号,每个交换机加1,pathid是逐跳交换机id进行xor(异或)运算后的结果,1sthop、2ndhop分别表示各个交换机插入的b、ts、txbytes和qlen,其中,b是端口速率,ts是插入int信息时的timestamp(时间戳),即插入时钟,txbytes是发送队列发送数据计数,即累积的端口发送字节数,qlen是发送队列长度。在实际场景中,根据设备的具体情况,还可以增加其它信息,例如int包识别头、int信息类别等等。

接收端设备receiver接收带有检测信息的数据包,会产生关于该数据包的ack报文,并将该ack反馈至发送端设备。该ack报文中会携带交换机向数据包中插入的检测信息,若有多个交换机向数据包中插入了多个检测信息,ack报文中会携带所有的检测信息。以图2所示的场景为例,接收端设备返回的ack报文中,会同时携带link-1和link-2插入的int信息int1和int2。

图6示出了本申请实施例提供的一种实现拥塞控制的发送端设备的结构,包括接收模610、控制模块620和发送模块630。接收模块610用于从接收端设备获取数据包的ack报文,控制模块620用于根据第一检测信息和第二检测信息确定带宽利用率,以及根据所述带宽利用率调整发送窗口。发送模块630基于发送窗口发送向接收端设备发送数据包。

所述ack报文中包含交换机向数据包插入的检测信息,所述检测信息是能够用于计算确定链路的带宽利用率的信息,例如在本申请的一些实施例中,所述检测信息可以是至少包括了发送队列长度(qlen)、发送队列发送数据计数(txbytes)、插入时钟(ts)和端口速率(b)的int信息。

发送端设备发出的数据包经由交换机转发至接收端设备,交换机在转发时可以向数据包中插入相应的检测信息。即在数据包的交互过程中,交换机执行以下的处理以实现拥塞控制:交换机的接收模块接收由发送端设备发送的数据包,交换机的信息插入模块向所述数据包中插入检测信息,交换机的发送模块将插入检测信息后的数据包发送至接收端设备。接收端设备在获取到包含检测信息的数据包之后,会产生并向发送端设备返回关于该数据包的ack报文,该ack报文中会携带数据包中的检测信息,以便于接收端设备能够从收到的ack报文获得检测信息,从而以此为依据实现拥塞控制。为了确保拥塞控制的实时性,接收端设备对于携带检测信息的数据包,可以优先产生并返回ack报文,以使发送端设备能够尽快获得检测信息,以达到迅速响应的目的。

所述第一检测信息为下一个rtt区间对应的ack报文中的检测信息,所述第二检测信息为上一个rtt区间对应的ack报文中的检测信息。所述rtt是指从发送端设备发送一个数据包到达接收端设备,并收到接收端设备返回ack报文的时间,rtt区间则表示该一个rtt所对应的时间区间。

rtt区间的区分可以采用如下的方式:首先,在发送数据包时记录下一个rtt区间对应数据包的序列号snd_nxt,而每个数据包对应的ack报文返回时携带的序列号是接收端设备收到的数据包序列号加1。当发送端设备收到ack报文时,可以根据ack报文的序列号判断是否经历了一个rtt区间。

例如,发送端设备在准备发送序列号为n的数据包时,可以记录下一个rtt区间(即该序列号为n的数据包的发送过程所对应的rtt区间)对应的数据包的序列号n,接收端设备收到序列号为n的数据包,会产生序列号为n+1的ack报文,表示接收端设备下一次期待收到序列号为n+1的数据包。由此,发送端设备会收到序列号为n+1的ack报文,通过比较收到ack报文的序列号n+1以及发出的数据包的序列号n,可以确定是否经历了一个rtt区间。以本实施例中的情况为例,由于n+1>n,则表示收到的ack报文时,已经经历了一个rtt区间。

在本申请的一些实施例中,控制模块可以在从接收端设备获取数据包的ack报文之后,根据ack报文的序列号判断接收到的ack报文是否为下一个rtt区间对应的ack报文。若判断结果为下一个rtt区间对应的ack报文,则执行后续步骤更新发送窗口,否则可以不做调整或者仅在原发送窗口的基础上进行小幅度的调整。由此,可以在每个rtt区间更新一次发送窗口。

在计算带宽利用率时,控制模块可以先基于根据第一检测信息和第二检测信息,计算链路在下一个rtt区间中需要处理的数据量和链路的带宽延迟积(bdp,bandwidth-delayproduct),然后根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟,可以计算带宽利用率。其中,下一个rtt区间中需要处理的数据量表示了链路在当前的rtt区间中还需要处理的数据总量,即in-flight包的数据量,而链路的带宽延迟积则表示了链路在一个rtt区间中实际可以处理的数据量。由此,利用in-flight包的数据量除以bdp,就可以获得整个链路的带宽利用率。

例如,在本申请实施例中可以将第一检测信息可以记作ack.l,将第二检测信息可以记作l。当再次经历一个rtt区间之后,会收到新的ack.l,而原来的ack.l将作为新的l。ack.l和l中都可以包含qlen、txbytes、ts、b四种信息,以用于计算带宽利用率。对于包含多个交换机的场景,对于各个交换机插入的检测信息,可以记为ack.l[i]、l[i],i表示不同的交换机,例如前述link-1插入的int信息即为ack.l[1]和l[1],link-2插入的int信息即为ack.l[2]和l[2]。

对于各个交换机所插入的检测信息,控制模块可以采用如下的方式计算下一个rtt区间中需要处理的数据量以及链路的带宽延迟积:可以根据第一检测信息中的发送队列发送数据计数和第二检测信息中的发送队列发送数据计数之差,以及第一检测信息中的插入时钟和第二检测信息中的插入时钟之差,计算发送速率txrate,即:

txrate=(ack.l[i].txbytes-l[i].txbytes)/(ack.l[i].ts–l[i].ts)

而后,控制模块可以根据所述发送速率、基线rtt值和第一检测信息中的发送队列长度,计算链路在下一个rtt区间中需要处理的数据量,即为ack.l[i].qlen+txrate·t,其中,t为基线rtt值。此外,可以根据第一检测信息中的端口速率和基线rtt值,计算链路的带宽延迟积ack.l[i].b·t。由此可以计算出带宽利用率为:

u=(ack.l[i].qlen+txrate·t)/ack.l[i].b·t

=ack.l[i].qlen/(ack.l[i].b·t)+txrate/ack.l[i].b

由于此时计算获得带宽利用率u是基于两个rtt区间(即前一个rtt区间和下一个rtt区间)对应的检测信息计算获得带宽利用率,该带宽利用率表示了短时间内的带宽利用情况,其结果有可能会收到短时间内的网络环境变化影响。因此,可以基于计算获得的该带宽利用率进行滑动平均处理,以获得能够更加有效地表示实际带宽利用情况的平均带宽利用率。

由此,本申请的一些实施例中,在根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟积计算带宽利用率时,控制模块可以先根据链路在下一个rtt区间中需要处理的数据量以及链路的带宽延迟积,计算第一瞬时带宽利用率,该第一瞬时带宽利用率为当前计算获得的瞬时带宽利用率u。然后可以根据第一瞬时带宽利用率和第二平均带宽利用率进行滑动平均处理,计算第一平均带宽利用率u。其中,所述第一平均带宽利用率为当前计算获得的平均带宽利用率,所述第二平均带宽利用率为上一次计算获得的平均带宽利用率。在本申请的一些实施例中,可以采用如下的公式计算第一平均带宽利用率

u=(1-τ/t)·u'+τ/t·u

其中,u'为第二平均带宽利用率,t为基线rtt值,τ为(ack.l[i].ts–l[i].ts)与t中的较小值,即τ=min(ack.l[i].ts–l[i].ts,t),u为第一瞬时带宽利用率。在此,本领域技术人员应当理解,上述计算第一平均带宽利用率的方式仅为举例,现有或今后出现的基于类似原理的其它方式如果能够适用于本申请,也应该包含在本申请的保护范围内,并以引用的形式包含于此。

在实际场景中,对于第一个rtt区间,由于不存在上一次计算获得的平均带宽利用率,因此,该次计算时的第二平均带宽利用率可以根据实际发送窗口的情况进行确定,例如,若发送端设备对于一个新的数据流都采用满线速发送整个数据,此时在第一个rtt区间计算第一平均带宽利用率时的第二平均带宽利用率可以设定为1。

在本申请的一些实施例中,控制模块可以在根据第一瞬时带宽利用率和第二平均带宽利用率进行滑动平均处理,计算第一平均带宽利用率之前,判断所述第一瞬时带宽利用率是否大于第二瞬时带宽利用率,并仅在判断结果为是时执行后续处理。其中,所述第二瞬时带宽利用率为上一次计算获得的瞬时带宽利用率。由此,可以仅在比上一个rtt区间的带宽利用率更高时,更新第一平均带宽利用率。

调整发送窗口的原则如下:若带宽利用率较高,则可以适当减速,即减小发送窗口;若带宽利用率较低,则可以适当加速,即增大发送窗口。

在本申请的一些实施例中,控制模块可以采用如下的方式调整发送窗口:当所述带宽利用率大于等于预设的利用率阈值时,乘性地减小发送窗口。其中,乘性地调整即为将基线值与某一系数相乘,以实现快速的增大或减小。例如,本实施例中可以设置预设的利用率阈值为utarget,计算获得的带宽利用率为前述的第一平均带宽利用率u,当u≥utarget时,可以采用如下的公式计算发送窗口w:

r=rc/(u/utarget)

w=r·t

其中,rc为每次调整的速率基线值,即上一次调整后的r或者第一次调整时的初始值,乘性的调整系数为带宽利用率与利用率阈值之比。在本申请的另一些实施中,还可以采用如下方式调整发送窗口:

r=rc/(u/utarget)+airate

w=r·t

其中,airate为预先设置的数量级小于r的预设调整值,例如在万兆以太网场景下,r可以是100gbps,而airate可以是100mbps以内。

而当所述带宽利用率小于预设的利用率阈值时,可以加性地增大发送窗口。其中,加性地调整即为将基线值与某一系数相加,以实现慢速的增大或减小。例如,本申请实施例中加性的调整系数可以是预设调整值airate,当u<utarget时,可以采用如下的公式计算发送窗口w:

r=rc+airate

w=r·t

由此,本申请实施例提供的调整发送窗口的方式服从aimd(additive-increasemultiplicative-decrease)准则,从而能够体现公平性。

此外,当连续加性地增大发送窗口的次数大于等于预设次数时,此时一般表示链路还有大量带宽未被利用,因此控制模块可以快速增大发送窗口,即乘性地增大发送窗口。

在实际场景中,可以设置一个参数incstage,在每次加性地增大发送窗口后,该参数incstage自增1,在每次乘性地减小发送窗口后,该参数incstage置0,由此可以在通过比较该参数incstage与预设次数maxstage,来确定是否需要乘性地增大发送窗口。图5示出了本申请实施例中一种调整发送窗口的方式的处理逻辑。

由于本申请实施例的方案中,带宽利用率会在经过每个rtt区间时进行计算,因此调整发送窗口也会在每个rtt区间开始时进行,由此使得拥塞控制能够适应网络拥塞的程度和不同流量的影响。并且,由于发送窗口的调整是依赖于网络的拥塞情况,即发送队列长度、发送队列发送数据计数、时钟等,相对于单依靠单一的ecn信息,本方案能够更加精准的确定网络的拥塞程度,而且使得收敛更加快速,一般可以在一个rtt实现收敛。此外,由于本方案并不依赖队列的反馈,而是基于交换机插入的检测信息直接计算带宽利用率进而调整发送窗口,因此不会增加网络延迟。

由于实际场景中可能存在一些特殊情况,例如部分传输协议无法支持每个数据包都产生ack报文,或者部分传输协议会在收到多个数据包才产生一个ack报文,甚至不需要产生ack报文(如rdmaread),或者在双向数据传输时ack报文会与数据包共享一个消息队列造成int信息的延迟等。在这些场景下,可以使用专用于携带检测信息的探测数据包(probing包)来获取检测信息,probing包可以使用于数据包相同的五元组,或者特殊的五元组,但都需要使其能够测量链路的拥塞情况。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一些实施例包括一个如图7所示的计算设备,该设备包括存储有计算机可读指令的一个或多个存储器710和用于执行计算机可读指令的处理器720,其中,当该计算机可读指令被该处理器执行时,使得所述设备执行基于前述本申请的多个实施例的方法和/或技术方案。

此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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