Message ID | 1343631141.2626.13293.camel@edumazet-glaptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 30 Jul 2012 08:52:21 +0200 > From: Eric Dumazet <edumazet@google.com> > > One condition before codel_Newton_step() was not good if > we never left the dropping state for a flow. As a result > rec_inv_sqrt was 0, instead of the ~0 initial value. > > codel control law was then set to a very aggressive mode, dropping > many packets before reaching 'target' and recovering from this problem. > > To keep codel_vars_init() as efficient as possible, refine > the condition to make sure rec_inv_sqrt initial value is correct > > Many thanks to Anton Mich for discovering the issue and suggesting > a fix. > > Reported-by: Anton Mich <lp2s1h@gmail.com> > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied and queued up for -stable. -- 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
On Mon, 2012-07-30 at 14:54 -0700, David Miller wrote: > From: Eric Dumazet <eric.dumazet@gmail.com> > Date: Mon, 30 Jul 2012 08:52:21 +0200 > > > From: Eric Dumazet <edumazet@google.com> > > > > One condition before codel_Newton_step() was not good if > > we never left the dropping state for a flow. As a result > > rec_inv_sqrt was 0, instead of the ~0 initial value. > > > > codel control law was then set to a very aggressive mode, dropping > > many packets before reaching 'target' and recovering from this problem. > > > > To keep codel_vars_init() as efficient as possible, refine > > the condition to make sure rec_inv_sqrt initial value is correct > > > > Many thanks to Anton Mich for discovering the issue and suggesting > > a fix. > > > > Reported-by: Anton Mich <lp2s1h@gmail.com> > > Signed-off-by: Eric Dumazet <edumazet@google.com> > > Applied and queued up for -stable. Hi David, I think this patch got lost somehow ? Thanks -- 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
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Fri, 10 Aug 2012 17:16:11 +0200 > On Mon, 2012-07-30 at 14:54 -0700, David Miller wrote: >> From: Eric Dumazet <eric.dumazet@gmail.com> >> Date: Mon, 30 Jul 2012 08:52:21 +0200 >> >> > From: Eric Dumazet <edumazet@google.com> >> > >> > One condition before codel_Newton_step() was not good if >> > we never left the dropping state for a flow. As a result >> > rec_inv_sqrt was 0, instead of the ~0 initial value. >> > >> > codel control law was then set to a very aggressive mode, dropping >> > many packets before reaching 'target' and recovering from this problem. >> > >> > To keep codel_vars_init() as efficient as possible, refine >> > the condition to make sure rec_inv_sqrt initial value is correct >> > >> > Many thanks to Anton Mich for discovering the issue and suggesting >> > a fix. >> > >> > Reported-by: Anton Mich <lp2s1h@gmail.com> >> > Signed-off-by: Eric Dumazet <edumazet@google.com> >> >> Applied and queued up for -stable. > > Hi David, I think this patch got lost somehow ? Thanks for catching this, I've corrected it now. -- 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
diff --git a/include/net/codel.h b/include/net/codel.h index 550debf..389cf62 100644 --- a/include/net/codel.h +++ b/include/net/codel.h @@ -305,6 +305,8 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch, } } } else if (drop) { + u32 delta; + if (params->ecn && INET_ECN_set_ce(skb)) { stats->ecn_mark++; } else { @@ -320,9 +322,11 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch, * assume that the drop rate that controlled the queue on the * last cycle is a good starting point to control it now. */ - if (codel_time_before(now - vars->drop_next, + delta = vars->count - vars->lastcount; + if (delta > 1 && + codel_time_before(now - vars->drop_next, 16 * params->interval)) { - vars->count = (vars->count - vars->lastcount) | 1; + vars->count = delta; /* we dont care if rec_inv_sqrt approximation * is not very precise : * Next Newton steps will correct it quadratically.