2011年7月18日 星期一

QoS Queue Scheduling

為您介紹QoS的Queue排程,通常採用Queue排程解決網路擁塞時的情況。

下面介紹SP(Strict-Priority,嚴格優先級Queue)、WFQ(Weighted Fair Queue,加權公平Queue)和WRR(Weighted Round Robin,加權輪詢Queue)。

(1) SP Queue


SP Queue排程算法,是針對關鍵service型應用設計的。關鍵service有一個重要的特點,即在擁塞發生時要求優先獲得服務以減小response的延遲。以端口有8 個輸出Queue為例,優先Queue將端口的8 個輸出Queue分成8 類,依次為7、6、5、4、3、2、1、0 Queue,它們的優先級依次降低。

在Queue排程時,SP 嚴格按照優先級從高到低的次序優先發送較高優先級Queue中的分組,當較高優先級Queue為空時,再發送較低優先級Queue中的分組。這樣,將關鍵service的分組放入較高優先級的Queue,將非關鍵service(如E-Mail)的分組放入較低優先級的Queue,可以保證關鍵service的分組被優先傳送,非關鍵service的分組在處理關鍵service數據的空閒間隙被傳送。SP 的缺點是:擁塞發生時,如果較高優先級Queue中長時間有分組存在,那麼低優先級Queue中的封包就會由於得不到服務而“餓死”。

(2) WFQ Queue

在介紹加權公平Queue前,先要理解公平QueueFQ(Fair Queuing)。FQ 是為了公平地分享網路資源,盡可能使所有流的遲延和延遲抖動達到最優而推出的。它照顧了各方面的利益,主要表現在:

不同的Queue獲得公平的排程機會,從總體上均衡各個流的延遲;短封包和長封包獲得公平的排程:如果不同Queue間同時存在多個長封包和短封包等待發送,應當顧及短封包的利益,讓短封包優先獲得排程,從而在總體上減少各個流的報​​文間的延遲抖動。

與FQ 相比,WFQ 在計算封包排程次序時增加了優先權方面的考慮。從統計上,WFQ 使高優先權的封包獲得優先排程的機會多於低優先權的封包。WFQ 能夠按流的“會話”信息(包括協議類型、源和目的TCP 或UDP 端口號、源和目的IP 地址及ToS 域中的優先級等)自動進行流分類,並且盡可能多地提供Queue,以將每個流均勻地放入不同Queue中,從而在總體上均衡各個流的延遲。在出隊的時候,WFQ 按

流的優先級來分配每個流應佔有出口的帶寬。優先級的數值越小,所得的帶寬越少。優先級的數值越大,所得的帶寬越多。最後,輪詢各個Queue,按照帶寬比例從Queue中取出相應數量的封包進行發送。用戶可以用WFQ 的Queue排程算法為0~7 Queue中的每個Queue指定帶寬,然後根據每條流的CoS 值和Queue的映射關係決定哪條流進哪個Queue,也決定了哪條流分得多大的帶寬。

(3) WRR Queue

WRR Queue排程算法在Queue之間進行輪流排程,保證每個Queue都得到一定的服務時間。以端口有8 個輸出Queue為例,WRR 可為每個Queue配置一個加權值(依次為w7、w6、w5、w4、w3、w2、w1、w0),加權值表示獲取資源的比重。如 一個100M的端口,配置它的WRR Queue排程算法的加權值為5、5、3、3、1、1、1、1(依次對應w7、w6、w5、w4、w3、w2、w1、w0 ),這樣可以保證最低優先級Queue至少獲得5Mbit/s 帶寬,避免了採用SP 排程時低優先級Queue中的封包可能長時間得不到服務的缺點。WRR Queue還有一個優點是,雖然多個Queue的排程是輪詢進行的,但對每個Queue不是固定地分配服務時間片——如果某個Queue為空,那麼馬上換到下一個Queue排程,這樣帶寬資源可以得到充分的利用。

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...