[LARTC] "Classful Queueing Disciplines" in LARTC HOWTO

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday 04 February 2003 07:06, Rob Pitman wrote:
> Hi,
>
> I am a newbie to LARTC and to this mailing-list. I have read through the
> Linux Advanced Routing & Traffic Control HOWTO many times, trying to
> understand Classful Queueing Disciplines (and in particular CBQ). I have
> some suggestions that I think will help to make the HOWTO more
> understandable.
>
> Suggestions
> =========
> (1)
> In section 9.4 (Terminology) the definition for "Classes" states that:
>
> "A classful qdisc may have many classes, which each are internal to the
> qdisc. Each of these classes may contain a real qdisc".
>
> As far as I can understand, each class can actually contain one _or more_
> qdiscs. Furthermore, (at least in the case of CBQ) a class may also contain
> one or more _classes_ (this really puzzled me. But the HOWTO's example of a
> CBQ configuration, and a reading of /usr/src/linux-2.4/net/sched/sch_cbq.c
> appear to indicate this).
Each class has __one__ qdisc attached to it.  If you create a class, a fifo 
qdisc is attached.  But you can replace it with something else if you want.  
A class can't send the data it contains.  That's why you need a qdisc.
Also, you can't add a qdisc to a non-leaf class.  (a leaf class is a class 
with no children).  You can add a qdisc, but if you add a child class, the 
qdisc is removed.

> (2)
> In section 9.5.2 ("The qdisc family: roots, handles, siblings and
> parents"), the HOWTO does not really make clear the fact that some of the
> nodes in the tree are qdiscs, and some nodes are classes. In particular,
> the "ASCII-art" diagram does not show this; it just shows a bunch of nodes
> with handles. As I understand it, the diagram should be as follows (please
> tell me if I am wrong).
>
>
>            1:            root qdisc
>
>           1:1            class (child of root qdisc)
>          --|--
>         /  |  \
>        /   |   \
>       /    |    \
>      /     |     \
>     10:   11:    12:     qdiscs contained in 1:1 class
>    /  \         /  \
>   10:1 10:2   12:1 12:2  classes (children of qdiscs)
Not really.  The ascii drawing is wrong.  

It should look like this :
         root 1:
            |
          _1:1_
         /  |  \
        /   |   \
      1:10 1:11 1:12
       |    |    |
     10:   11:   12:
    /   \       /   \
 10:1  10:2   12:1  12:2

> Section 9.5.2, paragraph 2 says "The handles of these qdiscs consist of two
> parts...". The text does not explicitly say that _classes_ are also
> assigned handles in the same way (that only became apparent after reading
> the HOWTO several times).
The line should be "The handles of these qdisc and classes consists of two 
parts : <major number>:<minor number>"

> Section 9.5.2 paragraph 3 says "Classes need to have the same major number
> as their parent". Shouldn't this be changed to "Classes need to have the
> same major number as their parent _qdisc_"?
No.  Class.  A class can have an other class as parent.
Better would be:  "Class need to have the same major number as their parent."

> (3)
> Section 9.5.2.2 paragraph 1 says "When the kernel decides that it needs to
> extract packets to send to the interface, the root qdisc 1: gets a dequeue
> request, which is passed to 1:1, which is in turn passed to 10:, 11: and
> 12: ..".
>
> I think it would be clearer if this was changed to "....which is passed to
> the 1:1 class, which is in turn passed to the 10:, 11: and 12: qdiscs...".

> (4)
> Section 9.5.3 ("The PRIO qdisc") has a spelling mistake in paragraph 4: "It
> can also contain more all qdiscs...". I think this should be "It can also
> contain almost all qdiscs...". (I know this is rather nitpicky).
Better : "You can add an other qdisc to the 3 predefined classes."

> (5)
> Section 9.5.3.2 ("Sample configuration") has another ASCII-art diagram
> where it would be clearer if the nodes were labelled as being either qdiscs
> or classes. Node 1: is the root qdisc; nodes 1:1, 1:2 and 1:3 are classes;
> nodes 10:, 20: and 30: are qdiscs.
Qdiscs are always x: or x:0.  See 9.5.2 paragraph 2.

> (6)
> Section 9.5.4.2 ("CBQ classful behaviour") paragraph 2: the phrase "lower
> priority classes" should, I believe, be "lower-numbered priority classes"
> (because lower-numbered means higher-priority). The same applies in the
> paragraph that describes the prio parameter.
Indeed.  Lower prio means higher priority.

> (7)
> Section 9.5.4.4 ("Sample configuration") really took many re-readings to
> understand, and I'm still not sure I do understand. An ASCII-art diagram
> would really help here, showing which nodes are qdiscs and which are
> classes.
         root 1:
            |
          _1:1_
         /     \
       1:3     1:4
        |       |
       sfq     sfq

> The second paragraph starts "This part installs the root node and the
> customary 1:0 class". I think this is an error, it should be the 1:1 class,
> not the 1:0 class.
Indeed

> A bit lower down, the HOWTO shows the commands to add classes 1:3 and 1:4.
> My understanding is that these two _classes_ are being added to the parent
> _class_ 1:1, is this right? This part was confusing, because in previous
> examples _classes_ were added to a parent _qdisc_, or _qdiscs_ were added
> to a parent _class_. This is the first place where _classes_ are added to a
> parent _class_. That's why I suggested (above) that the definition of a
> class be changed to make it clear that a class can contain other classes,
> not only qdiscs.
>
> In the next paragraph the HOWTO says "These are our two classes". But there
> are actually three classes in the configuration.
Yes.  But only 2 classes are leaf classes so they are the only classes who can 
actually send data.

> In the same paragraph, the last sentence reads "The classids need to be
> within the same major number as the parent CBQ". I think this should be
>
> "The classids need to have the same major number as the parent qdisc"
Indeed.

> because it it not clear (except by re-reading a few times) that these two
> classes have _class_ 1:1 as a parent, which in turn has _qdisc_ 1:0 as a
> parent; so classes 1:3 and 1:4 actually need to have the same major number
> as their _grandparent_ node, which is a qdisc.
>
> A bit lower down, the HOWTO shows the commands to attach some filters
> directly to the root qdisc. May I suggest inserting the following sentence
> just _before_ these commands:
>
> 'Now we attach "filters" to the root qdisc, to send traffic to the correct
> classes (1:3 and 1:4).'
>
> I hope these suggestions will help to make the HOWTO clearer to the
> uninitiated (like me). Please tell me if I have misunderstood anything.
It was fun :)
Maybe it's time to reread the pages thru the eyes of a newbie.

Stef

-- 

stef.coene@docum.org
 "Using Linux as bandwidth manager"
     http://www.docum.org/
     #lartc @ irc.oftc.net



[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux