多媒體、即時通訊與服務品質

加權公平佇列(weighted fair queuing)

/ WFQ /

想像好幾排人匯入一個收銀台。先進先出純粹按抵達順序服務——但這樣一個龐大的團體可能霸占收銀台很久,而後面一位單獨的顧客只能乾等。嚴格優先總是先服務貴賓隊伍——但這樣一般隊伍可能完全餓死。加權公平佇列是合理的折衷:它依你指定的權重比例,給每一排保證一份收銀台的時間,於是沒有任何一排會餓死,激進的一排也偷不到超過它份額的量。

具體來說,WFQ 排程器為每個流量類別維持一個獨立的佇列,並以這樣的方式服務它們:長期下來,每個類別 i 得到的連結頻寬比例,等於它的權重 w_i 除以所有權重之和。若在一條 100 Mbps 的連結上有三個權重為 3、1、1 的類別,它們分別被保證大約 60、20、20 Mbps。一個關鍵的公平性質:若某個類別沒用完它的全部份額,WFQ 是「不空閒」的——它會把閒置的頻寬借給活躍的類別,而不是讓連結空著,等那個安靜的類別再度繁忙時再收回。所以一個類別總是至少得到它保證的最低量,而在別人安靜時得到更多。

為什麼重要:WFQ(及其實務變體)是讓以類別為基礎的服務品質真正兌現的排程紀律。它讓業者能承諾,比方說,即時語音總是能拿到足夠的連結份額以保持順暢,同時又從不把盡力而為的網頁流量完全餓死——把優先的保護與輪流的公平結合起來。一個值得言明的細節:WFQ 控制的是一條連結的容量如何在各類別之間分享;它並不創造容量。在一條對所承載負載來說確實太小的連結上,WFQ 決定誰受苦、受多少苦,但總得有東西要等。

一條 100 Mbps 的連結以權重 2、2、1 服務語音、視訊與大量資料。保證份額為 40、40、20 Mbps。若視訊暫時閒置,WFQ 把它的 40 Mbps 借給語音與大量資料;視訊一恢復,它便收回保證的 40——沒有任何類別會被餓死。

每個類別至少得到其加權份額,閒置頻寬則被借出而非浪費。

與嚴格優先不同,WFQ 不會餓死任何類別——每個類別都有保證的最低量。但它分配的是既有的容量,並不製造更多,所以在容量不足的連結上仍會有流量排隊。

又称
WFQweighted fair queueing加權公平佇列加權公平排隊