
Nehmen wir an, ich habe eine einfache htb-Hierarchie (sieheman 8 tc-htb
) eingerichtet, wo die Gesamtbandbreite für untergeordnete HTB-Klassen angegeben wirdübersteigtdie für die Root-HTB-Klasse angegebene Gesamtbandbreite:
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
Hier beträgt das Maximum für die Stamm-HTB-Klasse 100 kbit/s, das kollektive Maximum für untergeordnete HTB-Klassen beträgt jedoch 160 kbit/s.
Wie würde der Kernel mit allen drei untergeordneten Elementen umgehen, die bei maximaler Geschwindigkeit Datenverkehr erzeugen? Kann ich in diesem Fall einen Zwischen-SFQ verwenden, um eine faire Behandlung des gesamten Datenverkehrs sicherzustellen?
Und noch wichtiger: Wie entscheidet der Kernel, welcher Datenverkehr durchgelassen wird, wenn die Gesamtheit des generierten Datenverkehrs die Bandbreite der Hardwareschnittstelle überschreitet?
Antwort1
Die allgemeine Empfehlung bei HTB ist, sicherzustellen, dass „die Summe der Raten der Kindklasse ist gleich oder kleiner als die Rate der Elternklasse".
Wenn die untergeordneten Klassen höhere Raten zulassen, würde HTB die Bandbreitenbegrenzung überschreiten. Die Begrenzung der übergeordneten Klasse wird nicht erzwungen, sie wird lediglich für Berechnungen zur „Bandbreitenleihe“ (entsprechend der Höchstrate) verwendet. Die tatsächliche Bandbreitenbegrenzung wird nur von der untergeordneten (Blatt-)Klasse erzwungen.
Oder zumindest wurde es vor vielen Jahren auf den Mailinglisten so erklärt:
Wenn die Obergrenze der übergeordneten Klasse kleiner ist als die Summe der Obergrenzen der untergeordneten Klassen, können die untergeordneten Klassen mehr Bandbreite verbrauchen, als die übergeordnete Klasse zulässt. Dies liegt daran, dass die übergeordnete Klasse nie überprüft wird! Die übergeordnete Klasse wird nur überprüft, wenn die untergeordnete Klasse die Rate überschritten hat und von der übergeordneten Klasse etwas ausleihen möchte.
https://www.spinics.net/lists/lartc/msg08619.html
Dies ist zwar ein sehr altes Dokument, es dürfte aber auch heute noch gültig sein.