pathload --有效的網路頻寬估計方法

weixin_33816946發表於2019-01-08


上一篇部落格簡述了現行的頻寬估計的方法,分類,以及一些問題。

見:http://blog.csdn.net/ice110956/article/details/11071969

上文列出了13種現行的方法,這裡首先介紹效能,準確性都較好的一個方法:pathload.


 

Pathload

首先介紹Pathload方法所屬的類別

1.    正如上一篇blog所述,頻寬估計的方法分為單端探測和兩端探測,pathload屬於兩端探測;

2.    我們還可以根據傳送的是包對,還是一系列緊相連的包,分為包對探測,包序列探測。Pathload屬於包序列探測。如下圖所示:

 

 

3.    接上篇blog的一幅圖:

 

 

 

同樣是包序列探測,還有許多不同的方法,比較直觀的有兩種:

一個是直接計算到達包的個數/秒,上圖可得頻寬為2packets/s.

另一個是用接收端到的時間-傳送端發出的時間,具體到上圖就是:

Da=t1+t2+0-0=t1+t2+0

Db=t1+t2+2-1=t1+t2+1

Dc=t1+t2+2

Dd=t1+t2+3;

接著再根據D來作進一步的計算,pathload就是用這種方法,具體實現下面介紹。

兩個方法一個橫向計算,一個縱向計算。

 

 

下面具體介紹pathload的方法。

 

一.判斷是否過載

Pathload方法傳送一個包序列,並記錄發出時間以及到達時間。據證明,如果傳送速率大於鏈路頻寬,包的間隔會有增大的趨勢;相反,傳送速率小於鏈路頻寬,沒有這種趨勢。傳送端再根據這種趨勢迭代地更新傳送速率,直至收斂。

根據我們上面的圖也能看出來,Da,Db,Dc,DD是直線上升的。

 

如下面兩個圖,橫座標是包間隔,縱座標是單向的鏈路延時,即到達時間減去傳送時間。

圖1是在傳送速率達於鏈路的情況下統計的,表明傳送頻寬達於鏈路頻寬,D成增長趨勢。

圖2表明,小於的情況下,沒有這種趨勢。

圖3表示網路頻寬突然的增長導致曲線突然上升。



 

 

 

上面我們只是直觀地判斷是否有增長的趨勢,下面具體提出兩個指標公式。

 

PCT指標為增加的百分比;一直上升為1,不變為0;

PDT指標為絕對差值比去相對總浮動。直線上升為1,直線下降為-1,水平為0.

 

 

如上圖所示,這兩個指標有的時候是有差異以及盲點的。第一幅,雖然呈現上升趨勢,當偶然的誤差導致PDT為0;第二幅,同樣也是上升,PCT卻為4/11.

於是我們取如下的綜合策略來進行綜合評估。

1,  如果其中某個為上升,另一個是上升或不確定,則判斷為上升。

2,  同樣,如果其中一個為下降,另一個是下降或不確定,判斷為下降。

3,  如果都為不確定,則判斷為不確定

4,  一個上升,一個下降,結果丟棄。

 

pathload設定的PCT和PDT的閾值分別為:

PCT:0-0.54,下降;0.54-0.66,不確定;0.66-1,上升。

PDT:-1-0.45,下降;0.45-0.55,不確定;0.55-1,上升。

 

下面兩個圖分別展示著兩個指標的準確度。


二.引數選擇問題:

首先是包大小與傳送週期的關係;

包的大小不能達於鏈路最小分包的大小,否則會被鏈路層切成小塊;同樣也不能過小,防止鏈路層填充包大小。

一般包大小為48-96byte.

發包的週期越小越好。

作業系統最小週期可達30us,pathload採用100us的週期。即間隔100us傳送一個探測包。

於是首先確定要傳送的包序列的頻寬R,然後週期為T,再計算應該傳送的包的大小,用如下的公式:

然後是序列的長度。序列過長導致路由阻塞丟包。過短不能有效判斷頻寬。這裡的長度為K=100,這樣的一個序列成為一個stream.

 

一個stream的判斷準確度有限,pathload裡面用N個stream來綜合評定是否上升。

Stream之間有一個小的間隔,只為等待兩端的計算處理。

pathload中N是12,這樣的12個stream稱為一個fleet.

 

最後,根據N個序列的結果,我們還要做一次綜合評定。取f=70%為閾值,即這N個fleet裡面,增長或減少的判斷數要分別大於70%才能下結論,否者定為不確定。

 

三.二分法收斂到估計頻寬

我們上面最後的計算結果過載,不確定,或不過載。那麼我們要如何估計網路的具體頻寬呢?pathload用二分法來收斂到網路頻寬。

一個fleet用於判定是否過載,接下來要用多個fleet進行頻寬準確估計。每個fleet得到一個判定後,用二分法迭代,直到滿足一定的收斂條件,程式如下:

如上圖,其中的R分別表示當前的傳送速率,G表示當前的不確定區間。用二分法迭代收斂R和G,當滿足一個閾值w,x的時候,表示收斂,可以得到最終的鏈路速率。這種方法最後確定的是一個速率區間。

 

四.幾個注意事項:

1.接受方還要計算丟包率,當有丟包時,這個stream就被標記為不可用。如果多餘一個stream丟包,或丟包率很大,直接把當前的速率作為上限,繼續計算。

2.接受方還要計算兩個包的傳送間隔,間隔大於一定值時,接受端判斷髮送端傳送執行緒被搶佔,出現錯誤,以i為界限,把包分為兩個部分,取大的一個部分繼續計算,丟棄另一部分。如下圖,只取後面的一段。

 

五.結果

最後取(Rmin+Rmax)/2作為頻寬估計值。試驗表明,頻寬越高,需要的收斂時間越長,15Mbps的頻寬大概需要10個fleet即12S的時間。

 

參考文獻:

Pathload: a measurement tool for end-to-end availablebandwidth

http://www.ece.ucdavis.edu/~chuah/classes/EEC274/refs/02JD-pathload.pdf

 


 

相關文章