Thread (7 messages) 7 messages, 4 authors, 2009-08-31

Re: [RFC PATCH] sched: Fix resource limiting in pfifo_fast

From: Krishna Kumar2 <hidden>
Date: 2009-08-30 08:22:17

I had thought of this reason before submitting. But I felt that if we are
filling up the qdisc due to some problem at driver/device, then the issue
should be handled at a different level (increase tx_queue_len, let
packets drop and TCP handle it, etc).

So I am not sure if it is intentionally designed this way, or whether it
needs fixing to reflect a maximum limit.

Thanks,

- KK
Eric Dumazet [off-list ref]
Re: [RFC PATCH] sched: Fix resource limiting in pfifo_fast

Krishna Kumar a écrit :
quoted
From: Krishna Kumar <redacted>

pfifo_fast_enqueue has this check:
        if (skb_queue_len(list) < qdisc_dev(qdisc)->tx_queue_len) {

which allows each band to enqueue upto tx_queue_len skbs for a
total of 3*tx_queue_len skbs. I am not sure if this was the
intention of limiting in qdisc.
Yes I noticed that and said to myself :
This was to let high priority packets have their own limit,
independent on fact that low priority packets filled their queue.
quoted
Patch compiled and 32 simultaneous netperf testing ran fine. Also:
# tc -s qdisc show dev eth2
qdisc pfifo_fast 0: root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1
1
quoted
 Sent 16835026752 bytes 373116 pkt (dropped 0, overlimits 0 requeues
25)
quoted
 rate 0bit 0pps backlog 0b 0p requeues 25

(I am taking next week off, so sorry for any delay in responding)

Signed-off-by: Krishna Kumar <redacted>
---

 net/sched/sch_generic.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff -ruNp org/net/sched/sch_generic.c new/net/sched/sch_generic.c
--- org/net/sched/sch_generic.c   2009-08-30 11:18:23.000000000 +0530
+++ new/net/sched/sch_generic.c   2009-08-30 11:21:50.000000000 +0530
@@ -432,11 +432,11 @@ static inline struct sk_buff_head *band2

 static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc*
qdisc)
quoted
 {
-   int band = prio2band[skb->priority & TC_PRIO_MAX];
-   struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
-   struct sk_buff_head *list = band2list(priv, band);
+   if (skb_queue_len(&qdisc->q) < qdisc_dev(qdisc)->tx_queue_len) {
+      int band = prio2band[skb->priority & TC_PRIO_MAX];
+      struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
+      struct sk_buff_head *list = band2list(priv, band);

-   if (skb_queue_len(list) < qdisc_dev(qdisc)->tx_queue_len) {
       priv->bitmap |= (1 << band);
       qdisc->q.qlen++;
       return __qdisc_enqueue_tail(skb, qdisc, list);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help