上一篇部落格簡述了現行的頻寬估計的方法,分類,以及一些問題。
見: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