PCC使用黑盒方法,核心思路是感知网络在给出某发送速率之后的表现,从而调整发送速率
。传统的PCC-Allegro通过发送者观察以特定速率发送所产生的性能指标,并将指标转换成相应的有效值,随后根据经验调整发送速率向更高效用的方向。而Pcc-Vivace的设计实现结合了2015年的PCC-Allegro的基本框架和机器学习中在线学习的原理,通过调整发送端速率的调整方向、调整步长和调整阈值,来解决网络的拥塞控制问题
1.PCC-Allegro实现思路
PCC-Allegro将时间切分为连续的 monitor intervals (MIs),MI的程度通常为1到2个RTT的时间。PCC在一个MI内,选一个发送的速率r,在这个MI内都以这个速率发送,在大约一个RTT之后,发送方会看到SACK,PCC将这些ACK的信息转换了性能评价的指标如吞吐、丢包率和延迟。这些指标通过一个效用函数()计算一个效用值,使用u表示。
在一个速率r下,后面PCC会尝试(1+ε)*r 和 (1-ε)r的速率。PCC会朝着让效用值更加高的方向移动。为了减少一些测试噪音,PCC不是使用在两个MI内测试的方法,而是在四个MI内已随机的顺序测试两种不同的速率。如果两边都得到更加高的效用值,PCC选择随机其中的一个值来作为下次的发送效率。在有n个发送者的一个网络中,网络最大的带宽为C,每一个发送者i的效用函数为:
xi
是发送端 i 的发送速率,Li
是所观察到的丢包率,Ti=xi*(1-Li)
。
PCC这里是控制算法步骤
Starting State,启动状态:启动的发送速率设置为 2 * MSS/RTT
,然后在之后的每一个MI内发送速率加倍。PCC终止启动阶段不是以包丢失来确定的,而是计算的效用值下降的时候;
Decision Making State,决策状态:这里阶段工作的思路就如下面的描述。PCC选择4个MI,分为2组(随机),一组以r(1 + ε )
速率发送,另外一组以r(1 - ε )
发送,之后计算出来的效用值记为Ui+
,Ui-
,如果Ui+ > Ui-
,新速率设置为r(1 + ε )
,反之设置为r(1 - ε )
。但是如果效用下降,PCC将其速率保留在当前的速率。同时ε = ε +εmin
,但是最大不同超过εmax
。这里使用 εmin = 0.01
, εmax = 0.05
。
2.PPC- Vivace算法对PCC-Allegro优化
改进核心
1) 使用了一个新的学习框架来保证多个Vivace流可以收敛到有一个公平和有效率的状态
2) 使用了一个基于梯度在线优化算法来调整发送速率,它会计算步长
PCC Vivace的效用函数框架:
其中0<t<1,b>=0,c>0,( b,c,t为常数)
. 该目标函数的第一项为发送速率的幂次方,第二项为RTT梯度的比例项,第三项为丢包率的比例项。相比Allegro而言,可以看到,Vivace在目标函数中考虑了时延(第二项)。总体来说,效用值在吞吐量上升时得到奖励,在RTT和丢包率上升时受到惩罚。
注:为什么在这里要使用RTT的梯度,而不是RTT的值呢?
考虑以下例子:一个拥有较大缓存的发送者在第一个MI中以2倍于链路带宽的速率发送报文,并且在第二个MI中以一个稍低一点的速率发送。如果使用RTT的值作为目标函数的项,那么发送者在这两个MI中的目标函数值应该都没什么区别,尽管降低发送速率是一个较优的选择。
速率控制部分:
PCC Vivace同样使用在几个连续的MI中测试r(1 + ε )和 r(1 − ε )的方法,不过设置下一个速率的时候使用的梯度的方法。设这个两个测试到的效用函数为u1,u2,