netdev
[Top] [All Lists]

Re: 2.6: QoS scheduling not working with IP-over-IP

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: 2.6: QoS scheduling not working with IP-over-IP
From: Patrick McHardy <kaber@xxxxxxxxx>
Date: Sun, 15 Feb 2004 11:30:05 +0100
Cc: hadi@xxxxxxxxxx, qnex@xxxxxxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx, shemminger@xxxxxxxx
In-reply-to: <20040214124958.499294a6.davem@redhat.com>
References: <Pine.LNX.4.44.0402101324350.810-100000@atlantis.knm.org.pl> <20040211200549.736fa8b3.davem@redhat.com> <1076561489.1032.65.camel@jzny.localdomain> <1076561998.1035.72.camel@jzny.localdomain> <1076562282.1033.76.camel@jzny.localdomain> <20040211211536.23e97997.davem@redhat.com> <1076563502.1031.85.camel@jzny.localdomain> <1076564638.1033.91.camel@jzny.localdomain> <20040211215142.7f817513.davem@redhat.com> <1076566176.1033.94.camel@jzny.localdomain> <20040211222259.776ad818.davem@redhat.com> <402D54D6.5070708@trash.net> <20040213213606.5a13cc76.davem@redhat.com> <1076762757.1060.4.camel@jzny.localdomain> <1076763997.1059.13.camel@jzny.localdomain> <1076766981.1059.16.camel@jzny.localdomain> <20040214124958.499294a6.davem@redhat.com>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040122 Debian/1.6-1
David S. Miller wrote:

I don't know how wise this tx_queue_len fiddling is.

With this, if user modifies tx_queue_len himself, on ifdown this configuration
change is lost if user sets it explicitly to '1'.  See?  In fact you could
call it corruption :-)

I think Alexey maybe meant something different, achieving the ends by some other
means than directly fiddling with tx_queue_len.


I guess he meant something like this, but I still think it encourages broken configurations in combination with non-work-conserving schedulers.

Regards,
Patrick
===== sch_fifo.c 1.7 vs edited =====
--- 1.7/net/sched/sch_fifo.c    Wed Nov 19 02:37:34 2003
+++ edited/sch_fifo.c   Sun Feb 15 11:06:08 2004
@@ -141,10 +141,12 @@
        struct fifo_sched_data *q = (void*)sch->data;
 
        if (opt == NULL) {
+               unsigned int limit = sch->dev->tx_queue_len || 1;
+
                if (sch->ops == &bfifo_qdisc_ops)
-                       q->limit = sch->dev->tx_queue_len*sch->dev->mtu;
+                       q->limit = limit*sch->dev->mtu;
                else    
-                       q->limit = sch->dev->tx_queue_len;
+                       q->limit = limit;
        } else {
                struct tc_fifo_qopt *ctl = RTA_DATA(opt);
                if (opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
===== sch_gred.c 1.13 vs edited =====
--- 1.13/net/sched/sch_gred.c   Wed Nov 19 02:37:34 2003
+++ edited/sch_gred.c   Sun Feb 15 11:09:42 2004
@@ -110,7 +110,7 @@
        unsigned long   qave=0; 
        int i=0;
 
-       if (!t->initd && skb_queue_len(&sch->q) < sch->dev->tx_queue_len) {
+       if (!t->initd && skb_queue_len(&sch->q) < (sch->dev->tx_queue_len || 
1)) {
                D2PRINTK("NO GRED Queues setup yet! Enqueued anyway\n");
                goto do_enqueue;
        }
<Prev in Thread] Current Thread [Next in Thread>