PQ(Priority queuing優先順序佇列)

2021-09-22 03:47:26 字數 2580 閱讀 7500

pq是一種具備嚴格的,分等級執行排程的佇列,它可以最多建立4個不同等級的佇列,分別是高、中、普通、低;然後根據對不同的資料流量分類,將不同的分類資料送入到4個不同等級的佇列。如圖x所示,

然後以100%的使用頻寬的方式,首先服務於處於「高」佇列中的資料,直到「高」佇列中的資料全部傳送完成,再服務於「中」佇列中的資料,以此類推,再服務於「普通」佇列,最後才是「低」佇列。按照這樣的邏輯,pq佇列的最大特點是高優先順序的佇列總是被服務,那麼這可能會導致低優先順序佇列中的資料被「餓死」,

為什麼呢?如果高優先順序佇列一直持續傳送資料,那麼pq的排程器,將保證高優先順序的佇列資料傳送完成後,才能輪到較低優先順序的佇列傳送,換而言之,處於「低」等級佇列中的資料,必須要等待「高」、「中」、「普通」這三個佇列的資料全部被傳送完成後,「低」等級佇列中的資料才能傳送。所以說處於「低」等級隊例的資料很容易被「餓死」,導致該佇列中的資料一直得不到服務,最終的結果將是應用服務暫停或者終止。

關於優先順序佇列pq的注意事項:

第一、pq的佇列被充滿時,它將採取尾棄;第二、pq的佇列長度可以被設定為0,如果把pq的佇列長度設定為0,這是意味著佇列的長度不受限制,直到用完路由器的記憶體為止,當記憶體被用完後,那麼資料將不能被送入隊例,換而言之,記憶體沒被用完之前,資料報都能被送入佇列排隊,並且不會丟棄資料報,所認值0並不是說該佇列沒長度,但是請記住:別那麼幹,因為當路由器的記憶體被用完的後果,比資料報不能進入隊例更嚴重;第三、pq中4個佇列預設的長度分別是:高20 中40 普通60 低80;第

四、四個不同優先順序的佇列中的資料排程時,從整體佇列這個角度講是從高到低,但是如果一串資料都屬於同乙個級別的佇列,比如都屬於high佇列,那麼在這個high佇列中的資料將採取fifo邏輯完成排程。第五、pq使用三層的acl或者接入介面、包大小、tcp和udp的埠號來分類,沒有被明確申明的資料流量將被分類到「預設」類。

注意:如果沒有發生擁塞,從技術角度講就是硬體tx佇列沒有被充滿時,那麼資料將直接送入tx佇列,將不會使用pq,請記住,只有在硬體佇列被充滿時才會啟動軟體排隊pq是一種很早、很傳統的佇列方式,當時產生pq時還沒有後面所描述的cbwfqllq的產生,所以在在那一定年代中使用pq來確保一些重要的服務被高質量的保障,但是現今使用pq的機率已經很少了,因為它被本書後面將要描述的llq(低延遲佇列)所代替,這樣做的目標就是能保證重要資料首先被傳送的同時,也不至於「餓死」其它佇列的資料。

取證演示:配置pq佇列及影響資料傳輸的效果

演示目標:

1模擬乙個可能產生擁塞的低速鏈路,並在該鏈路中持續的傳送高壓流量。

2取證先進先出(fifo)佇列對該環境假定的重要資料(icmp)傳輸的不良影響。

3 配置pq佇列將重要資料分類到「高」優先佇列。

4 再次觀察重要資料的傳輸延遲,確定pq對資料傳輸的影響

5 使用debug工具取證不同的實時資料分類被送到了不同等級的佇列。

演示環境:仍然使用「取證演示:fifo佇列影響資料傳輸的效果」相同的實驗環境。

演示步驟:

python優先順序佇列 python 優先順序佇列

簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...

Linux程序優先順序和調整優先順序

linux 是乙個多使用者 多工的作業系統,系統中通常執行著非常多的程序。但是 cpu 在乙個時鐘週期內只能運算一條指令 現在的 cpu 採用了多執行緒 多核心技術,所以在乙個時鐘週期內可以運算多條指令。但是同時運算的指令數也遠遠小於系統中的程序總數 那問題來了 誰應該先運算,誰應該後運算呢?這就需...

RTOS 優先順序翻轉與優先順序繼承

優先順序反轉,是指在使用訊號量時,可能會出現的這樣一種不合理的現象,即 高優先順序任務被低優先順序任務阻塞,導致高優先順序任務遲遲得不到排程。但其他中等優先順序的任務卻能搶到cpu資源。從現象上來看,好像是中優先順序的任務比高優先順序任務具有更高的優先權。具體來說 當高優先順序任務正等待訊號量 此訊...