原文在這里,是一篇2018年的NSDI。
Vivace的對手
PCC Vivace結合了一篇2015年NSDI的PCC[1]的基本框架,以及機器學習中online convex optimization的原理[2],通過調整發(fā)送端速率的調整方向、調整步長和調整閾值,來解決網絡的擁塞控制問題。
這篇論文作為擁塞控制問題的解決辦法之一,在Introduction段就擊中了上一篇文章講到的Remy[3]的痛點——無法自適應不同的網絡應用場景。
論文也將BBR[4]作為主要的對比對象之一。BBR采用白盒的網絡建模方式,假設網絡環(huán)境已知;而PCC Vivace使用黑盒方法,感知網絡在給出某發(fā)送速率之后的表現,從而調整發(fā)送速率。Dong實驗發(fā)現,一方面,在網絡達到穩(wěn)定收斂的狀態(tài)后,BBR仍表現出較大的比特率抖動和較高的丟包率。另一方面,和Remy一樣,一旦建模的網絡環(huán)境和真實的網絡環(huán)境相差很大,算法的性能就會遭受嚴重的損失。
另外,論文特別提到了另一個對比對象,Sprout[5]。Sprout是一篇2013年的NSDI,使用隨機森林的方法達到蜂窩網絡下的高吞吐量和低延遲。Dong承認在蜂窩網絡的場景下Sprout比Vivace表現更好,但表示Vivace的目標是一種更普適的擁塞控制算法,不會局限于某一種特定的網絡場景。
Vivace的效用方程
Vivace將時間切割成連續(xù)的 MI (Monitor Intervals)。每個MI結束時,發(fā)送端i就用下面的效用方程把MI時段觀察的數據轉換為效用值 u:
其中0<t<1,b>=0,c>0,xi是發(fā)送端 i 的發(fā)送速率,Li 是所觀察到的丟包率,式子的第二項是這段 MI 所觀察到的 “RTT梯度” ??傮w來說,效用值在吞吐量上升時得到獎勵,在RTT和loss上升時受到懲罰。
Vivace的四個Theorem
Theorem1
Theorem1: 考慮一個網絡模型中,有n個同構sender同時競爭一個帶FIFO隊列緩沖的瓶頸鏈路,網絡收斂時,每個sender發(fā)送速率都相等
Theorem2
理想情況下,網絡收斂時,latency不會超過base RTT,i.e.,沒有使用鏈路緩沖時的RTT。因此第二個theorem得出了達到這種理想情況對參數b的要求。
假設C為瓶頸鏈路的容量,當b滿足下面的不等式時,網絡穩(wěn)定時delay不超過base RTT:
Theorem3
p-loss-resilient:這個協議不降低發(fā)送速率時,最多能忍受p的隨機loss(一旦隨機loss超過p就要求降低發(fā)送速率)
要使Vivace能承受p-loss-resilient,則需要設置效用方程的第三項中的參數c滿足:
然而要忍受更多的隨機loss是有代價的。為了簡化,下面設置b=0(即效用方程的計算只依賴loss)。
在一個有n個Vivace sender的系統(tǒng)中,每個sender要達到p-loss-resilient,則處于平衡狀態(tài)的每個sender i 的丟包率L滿足:
Theorem4
上面的三條theorem都是討論的同構的sender,這一條是關于異構sender的情況。異構senders通常需要考慮的就是資源分配的問題。舉一個詳細的例子,效用公式如下:
假定n個Vivace senders共用鏈路容量為C的瓶頸鏈路,各個sender被分配的資源總和為C。
若每個sender的損失懲罰系數c設置如下,則鏈路最終收斂到各sender被分配的資源總和為C。
Vivace的比特率控制算法
(鑒于公式字符過于復雜,這里不詳細列出每個字符了)
總的來說,每次計算新的發(fā)送比特率時,都會先給定一個小的差值,計算上次比特率加減差值的兩個效用方程的值,兩效用值相減再除以二倍差值就是比特率在此時的梯度(也就是導數)。Vivace算法通過控制這個梯度的值來控制比特率的變化程度。新的比特率=上一次比特率+梯度
首先,Vivace給這個梯度設置了一個信心放大器。顧名思義,比特率連續(xù)朝同一個方向改變的次數多了,那步子就可以邁大一點,即增加梯度。
其次,Vivace給步長設置了一個動態(tài)閾值(畢竟步子邁大了容易***),一旦這次計算的梯度超出了此時的閾值,那就把閾值拉高一點點;一旦沒超過,但比特率仍朝著同一個方向前進,那就把閾值拉回比這次計算的梯度多一點點的地方等它下次爭取超過;一旦比特率連變化方向都變了,那直接把閾值設為0,哪怕你之前腿比維密模還長都得全砍了。
總結
Vivace的大體思路如上,但論文中分loss和delay進行了實現和對比,實驗細節(jié)詳見論文本文。