* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented
@ 2001-12-08 19:20 jamal
2001-12-09 1:14 ` jamal
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: jamal @ 2001-12-08 19:20 UTC (permalink / raw)
To: lartc
On Mon, 3 Dec 2001, bert hubert wrote:
> On Sat, Dec 01, 2001 at 01:33:41AM +0100, bert hubert wrote:
>
> > One thing - does *anybody* understand how hash tables work in tc filter, and
> > what they do? Furthermore, I could use some help with the tc filter police
> > things.
>
> Thanks to Andreas Steinmetz and David Sauer, tc hash tables are now
> documented as well, thanks!
>
> See:
>
> http://ds9a.nl/2.4Routing/HOWTO//cvs/2.4routing/output/2.4routing-12.html
>
> And then 'Hashing filters for very fast massive filtering'.
>
> I also finished documenting all parameters for TBF, CBQ, SFQ, PRIO,
> bfifo, pfifo and pfifo_fast. All queues in the Linux kernel are now
> described in the Linux Advanced Routing & Shaping HOWTO, which can be found on
>
> http://ds9a.nl/2.4Routing
>
> I want to send this off to the LDP and Freshmeat somewhere next week, I
> *would really* like people who are knowledgeable about this subject (this
> means you, ANK & Jamal 8) ) to read through this.
>
> This HOWTO is rapidly becoming the perceived authoritative source for
> traffic control in linux (google on 'Linux Routing' finds it), it might as
> well be right! So if you have any time at all, check the parts you know
> about. I expect mistakes.
>
> The parts of the table of contents that document stuff in the kernel not
> documented elsewhere:
"not documented elsewhere" comes out rude. Werner and I (and even
Alexey when he was in the mood -- and i have seen some good documentation
by other people as well) have spent numerous hours documenting, presenting
and answering questions on mailing lists at times
Sample docs that i was personally involved in:
ftp://icaftp.epfl.ch/pub/linux/diffserv/misc/dsid-01.txt.gz
You need to introduce the big picture to the user.
and what is wrong with the definitions used in
http://www.davin.ottawa.on.ca/ols/img10.htm that forced you to introduce
your own?
Actually, the big picture is:
http://www.davin.ottawa.on.ca/ols/img9.htm
Also
http://www.linuxjournal.com/article.php?sid369
(was written in 98 but got published in 99)
Now despite all the bitching above, i think your efforts are noble.
[My complaints about your style is you often are trying to present facts
by using opinions. For example despite a lot of effort in the past to
explain ingress qdisc to you in the past and, pointing you to very good
documentation from CISCO you still ended using your opinions on what you
thought it should be;->
My scanning of the document shows opinions still posing as miscontrued
facts. It is improving compared to what i saw last when we discussed ingress.
Let me clarify one thing in this email; i'll read what you have later.
Lets start by your description of TC_PRIO and TOS mappings etc:
Your descriptions of these values is insufficient. Consider this a
tutorial and reword it as you wish but please avoid opinions.
Ok here's clarification, this applies to both prio, default fifo 3 band
queueing and CBQ defaultmap classification; applies to both packets being
forwarded as well as locally generated:
First Step:
=====
Define TOS: This is a 4 bit value used as defined in RFC 1349.
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | |
| PRECEDENCE | TOS | MBZ |
| | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
Then define the values possible as:
1000 -- minimize delay
0100 -- maximize throughput
0010 -- maximize reliability
0001 -- minimize monetary cost
0000 -- normal service
Look at RFC 1349 for typical values used by different applications
Then of course note that RFC 1349 is obsoleted by RFC 2474 (yes, you can
weep);
Having said all that:
Linux remaps packets incoming with different values to some internal
value; the colum "mapped to" shows the internal mapping
8value(hex) TOS(dec) mapped to(dec)
----------------------------------
0x0 0 0
1 7
2 0
3 0
4 2
5 2
6 2
7 2
0x10 8 6
9 6
10 6
11 6
12 2
13 2
14 2
15 2
Fill in the "8value(hex)" column gaps using the bitmap from RFC1349 for
the 8 bits; These are the values ou would see with tcpdump -vvv
I filled the two easiest ones i could compute in my head.
Second step:
Take the default priority map:
1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
This applies for both default prio and the 3-band FIFO queue.
Note the queue map fitted on the last column
8 but value TOS mapped to queue map
---------------------------------------------
0x0 0 0 1
1 7 2
2 0 2
3 0 2
4 2 1
5 2 2
6 2 0
7 2 0
0x10 8 6 1
9 6 1
10 6 1
11 6 1
12 2 1
13 2 1
14 2 1
15 2 1
Queue 0 gets processed first then queue 1 then queue 2. In the strict
priority processing such as in prio or default 3 band sched, queue 0 is
processed until no more packets are left, then queue1 etc. This could
result in starvation. You could avoid starvation by inserting a TBF
in a prio; limit the size of the fifo in a class or use CBQ configured
as WRR.
I hope the above explains why you have to recreate the priomap everytime
you change the number of bands. You used the word "probably" which is
wrong. The proper word is "MUST".
What i think would be useful for you to do is describe some of the vlaues
used by some applications (RFC 1349 cut-n-paste job would help).
cheers,
jamal
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/
^ permalink raw reply [flat|nested] 7+ messages in thread* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal @ 2001-12-09 1:14 ` jamal 2001-12-09 2:10 ` jamal ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: jamal @ 2001-12-09 1:14 UTC (permalink / raw) To: lartc On Sun, 9 Dec 2001, bert hubert wrote: > On Sat, Dec 08, 2001 at 02:20:20PM -0500, jamal wrote: > > > Linux remaps packets incoming with different values to some internal > > value; the colum "mapped to" shows the internal mapping > > > > 8value(hex) TOS(dec) mapped to(dec) > > ---------------------------------- > > 0x0 0 0 > > 1 7 > > 2 0 > > 3 0 > > 4 2 > > 5 2 > > 6 2 > > 7 2 > > 0x10 8 6 > > 9 6 > > 10 6 > > 11 6 > > 12 2 > > 13 2 > > 14 2 > > 15 2 > > I find this tos2prio table in the kernel (2.5.x), which is somewhat > different than your table: > > 0 TC_PRIO_BESTEFFORT, 0 > 1 TC_PRIO_(FILLER), 1 > 2 TC_PRIO_BESTEFFORT, 0 > 3 TC_PRIO_(BESTEFFORT), 0 > 4 TC_PRIO_BULK, 2 > 5 TC_PRIO_(BULK), 2 > 6 TC_PRIO_BULK, 2 > 7 TC_PRIO_(BULK), 2 > 8 TC_PRIO_INTERACTIVE, 6 > 9 TC_PRIO_(INTERACTIVE), 6 > 10 TC_PRIO_INTERACTIVE, 6 > 11 TC_PRIO_(INTERACTIVE), 6 > 12 TC_PRIO_INTERACTIVE_BULK, 4 > 13 TC_PRIO_(INTERACTIVE_BULK), 4 > 14 TC_PRIO_INTERACTIVE_BULK, 4 > 15 TC_PRIO_(INTERACTIVE_BULK) 4 > > > > Fill in the "8value(hex)" column gaps using the bitmap from RFC1349 for > > the 8 bits; These are the values ou would see with tcpdump -vvv > > I filled the two easiest ones i could compute in my head. > > > > Second step: > > > > Take the default priority map: > > 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1 > > This applies for both default prio and the 3-band FIFO queue. > > Note the queue map fitted on the last column > > > > 8 but value TOS mapped to queue map > > --------------------------------------------- > > 0x0 0 0 1 > > 1 7 2 > > 2 0 2 > > 3 0 2 > > 4 2 1 > > 5 2 2 > > 6 2 0 > > 7 2 0 > > 0x10 8 6 1 > > 9 6 1 > > 10 6 1 > > 11 6 1 > > 12 2 1 > > 13 2 1 > > 14 2 1 > > 15 2 1 > > I've changed this table to: > TOS Bits Means Linux Priority Band > ------------------------------------------------------------ > 0x0 0 Normal Service 0 Best Effort 1 > 0x2 1 Minimize Monetary Cost 1 Filler 2 > 0x4 2 Maximize Reliability 0 Best Effort 1 > 0x6 3 mmc+mr 0 Best Effort 1 > 0x8 4 Maximize Throughput 2 Bulk 2 > 0xa 5 mmc+mt 2 Bulk 2 > 0xc 6 mr+mt 2 Bulk 2 > 0xe 7 mmc+mr+mt 2 Bulk 2 > 0x10 8 Minimize Delay 6 Interactive 0 > 0x12 9 mmc+md 6 Interactive 0 > 0x14 10 mr+md 6 Interactive 0 > 0x16 11 mmc+mr+md 6 Interactive 0 > 0x18 12 mt+md 4 Int. Bulk 1 > 0x1a 13 mmc+mt+md 4 Int. Bulk 1 > 0x1c 14 mr+mt+md 4 Int. Bulk 1 > 0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1 > Yes, sorry the last 4 are int_bulk (value 4) and not just bulk (2). good eye. You are still abusing the word TOS. Thats only 4 bits not 8; Use the terminology from RFC1349 at least. > http://ds9a.nl/lartc/HOWTO/cvs/2.4routing/output/2.4routing-9.html#ss9.2 > > Your table appears to imply that a Maximum Reliability, Mininum Delay > packet, TOS bits=9, gets mapped to band 1, not 0, which would not make > sense. > This is the priomap: 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1 It says 1 is the right value > Laying it out like this, which does appear how it works, does mean that you > can specify priorities in the priomap which do not correspond to possible > TOS values. > You cant remap the 3 band scheduler trivially, but you should be able to replace it with a default prio qdisc get exactly the same behavior and use whatever map you want (eg your 0 to 1 substitution for TOS 1001) > Is it possible at all to set skb->priority from userspace without going > through the tos2prio mapping? > SO_PRIORITY socket option is doable; you have to be root. > CBQ can use the skb->priority to classify: so do prio and pfifo_fast (as i am sure you are aware) > /* > * Step 1. If skb->priority points to one of our classes, use it. > */ > if (TC_H_MAJ(prio^sch->handle) = 0 && > (cl = cbq_class_lookup(q, prio)) != NULL) > return cl; > > But to do this, you would need to be able to set skb->priority to a 32bit > number: > Cant think of a straight way to do this .... Alexey would know, cheers, jamal _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal 2001-12-09 1:14 ` jamal @ 2001-12-09 2:10 ` jamal 2001-12-09 18:14 ` kuznet ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: jamal @ 2001-12-09 2:10 UTC (permalink / raw) To: lartc On Sun, 9 Dec 2001, bert hubert wrote: > On Sat, Dec 08, 2001 at 08:14:10PM -0500, jamal wrote: > > AFAICT, the priomap maps skb->priority to band. So the translation is as > follows: > yes ;-> > > > > so do prio and pfifo_fast (as i am sure you are aware) > > Of course, but only CBQ (& HTB, by the way) can extract a classid directly > from it, without a priomap. Devik is planning to learn HTB to extract a > classid directly from the fwmark, to skip a layer of indirection. > I am not sure if this is such a nice hack. Whats wrong with with using the fwmark classifier to select classes? cheers, jamal _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal 2001-12-09 1:14 ` jamal 2001-12-09 2:10 ` jamal @ 2001-12-09 18:14 ` kuznet 2001-12-09 18:18 ` bert hubert ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: kuznet @ 2001-12-09 18:14 UTC (permalink / raw) To: lartc Hello! > > But to do this, you would need to be able to set skb->priority to a 32bit > > number: > > > > Cant think of a straight way to do this .... Alexey would know, SO_PRIORITY. Or I did not follow you? Alexey _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal ` (2 preceding siblings ...) 2001-12-09 18:14 ` kuznet @ 2001-12-09 18:18 ` bert hubert 2001-12-09 21:45 ` jamal 2001-12-10 17:04 ` kuznet 5 siblings, 0 replies; 7+ messages in thread From: bert hubert @ 2001-12-09 18:18 UTC (permalink / raw) To: lartc On Sun, Dec 09, 2001 at 09:14:46PM +0300, kuznet@ms2.inr.ac.ru wrote: > > > But to do this, you would need to be able to set skb->priority to a 32bit > > > number: > > Cant think of a straight way to do this .... Alexey would know, > > SO_PRIORITY. Or I did not follow you? Ah yes, thanks, that sets sk->priority which later sets skb->priority. Regards, bert -- http://www.PowerDNS.com Versatile DNS Software & Services Trilab The Technology People Netherlabs BV / Rent-a-Nerd.nl - Nerd Available - 'SYN! .. SYN|ACK! .. ACK!' - the mating call of the internet _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal ` (3 preceding siblings ...) 2001-12-09 18:18 ` bert hubert @ 2001-12-09 21:45 ` jamal 2001-12-10 17:04 ` kuznet 5 siblings, 0 replies; 7+ messages in thread From: jamal @ 2001-12-09 21:45 UTC (permalink / raw) To: lartc On Sun, 9 Dec 2001 kuznet@ms2.inr.ac.ru wrote: > Hello! > > > > But to do this, you would need to be able to set skb->priority to a 32bit > > > number: > > > > > > > Cant think of a straight way to do this .... Alexey would know, > > SO_PRIORITY. Or I did not follow you? > So priority limits the size of skb->priority to be from 0..6; this wont work with that check in cbq. cheers, jamal _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal ` (4 preceding siblings ...) 2001-12-09 21:45 ` jamal @ 2001-12-10 17:04 ` kuznet 5 siblings, 0 replies; 7+ messages in thread From: kuznet @ 2001-12-10 17:04 UTC (permalink / raw) To: lartc Hello! > So priority limits the size of skb->priority to be from 0..6; this wont > work with that check in cbq. No, it does not. Values different of "low prio" defaults (0..6) are not allowed to user without privileges by evident reasons. User with correspoding capability may direct traffic to any class. Alexey _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://ds9a.nl/lartc/ ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2001-12-10 17:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2001-12-08 19:20 [LARTC] Re: CBQ and all other qdiscs now REALLY completely documented jamal 2001-12-09 1:14 ` jamal 2001-12-09 2:10 ` jamal 2001-12-09 18:14 ` kuznet 2001-12-09 18:18 ` bert hubert 2001-12-09 21:45 ` jamal 2001-12-10 17:04 ` kuznet
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.