On Saturday 18 June 2005 15:09, Bernd Froemel wrote:
> Am I missing an important point? Unfortunately I couldn't find any
> examples showing a more complex tree.
Yes, unless I'm completely mistaken, you misunderstood something about the
way QDiscs and especially HTB works.
Your old setup looked something like this:
1: HTB Qdisc
| | |
| | \--- 1:1 HTB Root Class (10mbit)
| | |
| | \--- 1:10 HTB Child Class (1kbit/512kbit)
| |
| \--- 1:f1 HTB Root Class (2048kbit)
| |
| \--- 1:a1 HTB Child Class (2048kbit)
| \--- 1:b1 HTB Child Class (2048kbit)
| \--- 1:c1 HTB Child Class (2048kbit)
|
\--- 1:f2 HTB Root Class (1024kbit)
|
\--- 1:a2 HTB Child Class (1024kbit)
\--- 1:b2 HTB Child Class (1024kbit)
\--- 1:c2 HTB Child Class (1024kbit)
Root classes are independent from each other. A HTB qdisc by itself has
unlimited bandwidth. Limiting is done by the classes, the root class
imposing a global limit. You have three root classes, and a total
bandwidth capacity of 10mbit+2048kbit+1024kbit on your link. This is
assuming that the ceil parameter does not have any effect for root
classes, otherwise you'd have 30mbit altogether.
Now, the 1:f1 class has a guaranteed rate of 2048kbit. It's children, 1:a1
1:b1 and 1:c1 also have 2048kbit guaranteed each. This is impossible,
since a parent with only 2048kbit guaranteed bandwidth cannot guarantee
three times as much bandwidth to it's children. The 1:f2 class has the
same problem.
Your new setup isn't any different; instead of using more than one root
class, you now use nested HTB qdiscs, which is extremely nasty:
1: HTB QDisc
|
\--- 1:1 HTB Root Class (10MBit)
|
\--- 1:10 HTB Child Class (8MBit/10MBit)
| *
| \--- 10: HTB QDisc
| |
| \--- 10:f1 HTB Root Class (2MBit)
| *
| \--- f1: HTB QDisc
| [...]
|
\--- 1:40 HTB Child Class (2MBit/2MBit)
The tree is broken at *. Although it looks like the HTB QDiscs depend on
each other, they actually don't really know about each other. There is no
borrowing/lending possible across different QDiscs / root classes.
You should build a tree with only one HTB QDisc and only one root class.
Something similar to this:
1: HTB QDisc
|
\--- 1:1 HTB Root Class (10MBit) [The total link capacity]
|
\--- 1:10 HTB Child Class (7MBit/10MBit) [High priority stuff]
| |
| \--- 1:a1 HTB Child Class (3MBit/10MBit)
| \--- 1:b1 HTB Child Class (2MBit/10MBit)
| \--- 1:c1 HTB Child Class (2MBit/10MBit)
|
\--- 1:40 HTB Child Class (3MBit/10MBit) [Low priority stuff]
|
\--- 1:a2 HTB Child Class (1MBit/10MBit)
\--- 1:b2 HTB Child Class (1MBit/10MBit)
\--- 1:c2 HTB Child Class (1MBit/10MBit)
Make sure your child class rates add up to the parent class rate (7MBit =
3+2+2MBit, 3MBit = 1+1+1MBit). Use smaller units than MBit if you want to
divide more accurately.
That's about it. Use only one HTB Qdisc, and only one HTB Root Class, and
divide rates properly, then things should start working the way you expect
them to.
HTH
Andreas
_______________________________________________
LARTC mailing list
[email protected]
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc