htb qdesc 樹如何處理頻寬過度分配?

htb qdesc 樹如何處理頻寬過度分配?

假設我有一個簡單的 htb 層次結構(請參閱man 8 tc-htb) 設定為子 htb 類別指定的總頻寬超過為根 htb 類別指定的總頻寬:

tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 70kbps

這裡根 htb 類別的最大值為 100kbps,但子 htb 類別的集體最大值為 160kbps。

核心將如何處理以最大速率生成流量的所有三個子進程?在這種情況下,我可以使用中介 sfq 來確保公平對待總流量嗎?

更重要的是,如果產生的總流量超過硬體介面的頻寬,核心如何決定讓哪些流量通過?

答案1

HTB 的一般建議是確保“子類別的費率總和等於或小於父類別的費率」。

如果子類別允許更高的速率,則 HTB 將超出頻寬限制。對父級的限制不強制執行,它僅用於「借用頻寬」計算(根據上限速率)。實際的頻寬限制僅由子(葉)類別強制執行。

或者至少這是多年前郵件列表上的解釋:

如果父類別 ceil 小於子類別 ceil 的總和,則子類別可能消耗比父類別允許的更多的頻寬。發生這種情況是因為父類從未被檢查過!只有當子級超出利率並希望向父級借用時,才會檢查父級。

https://www.spinics.net/lists/lartc/msg08619.html

這是非常古老的文檔,但今天仍然適用。

相關內容