From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leonardo Balliache Date: Mon, 07 Jul 2003 18:08:01 +0000 Subject: RE: [LARTC] Question on prio qdisc Message-Id: List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: lartc@vger.kernel.org Hi, Joseph: At 06:45 a.m. 03/07/03 +0200, you wrote: >Thank you Lars and Wing for your responses. > >I just ran another experiment using RED on the >lowest priority flow as suggested by Wing. I had >used RED before (on all flows) without success. >In this experiment, specified a large queue size for the interface. >In this case the result was roughly the same. >I overloaded the interface with 9.5 Mb/s of >flow with 8 Mb/s at the lowest priority, 1 Mb/s >at the medium priority, and 0.5 Mb/s at the highest >priority hoping that RED would discard lowest >priority packets to make room for the higher priority >packets. The result was that all flows suffered >approximately the same packet loss rate (about 45%). >The interface was an 802.11b interface at 11 Mb/s >with the two nodes very close to each other so that >link quality was very high. Apparently RED does not >discard the lowest priority packets that are overloading >the interface. The following script was >used: RED doesn=B4t have any way to know which are lower, medium or higher priori= ty=20 packets. To do what you want you need to use GRED. >My next step will be to modify the enqueue function to call >prio_drop() if there is not enough room to enqueue a new >packet as you have both suggested. I will have to get some help >for this from some of our engineers that can understand the code >better than I could. The enqueue code is here: static int prio_enqueue(struct sk_buff *skb, struct Qdisc* sch) { struct prio_sched_data *q =3D (struct prio_sched_data *)sch->data; struct Qdisc *qdisc; int ret; qdisc =3D q->queues[prio_classify(skb, sch)]; if ((ret =3D qdisc->enqueue(skb, qdisc)) =3D 0) { sch->stats.bytes +=3D skb->len; sch->stats.packets++; sch->q.qlen++; return 0; } sch->stats.drops++; return ret; } As you see in: qdisc =3D q->queues[prio_classify(skb, sch)]; each queue is an independent queue. Then if high priority packets are=20 dropped is because the high priority queue has overflow, not because some=20 (unique?) queue is full from low priority packets. Also, in drop-tail queues, as its name imply and prio is, never a already=20 enqueue packet is dropped to make room for a new one. Packets are dropped=20 from the tail. Best regards, Leonardo Balliache _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/