@@ -176,7 +176,7 @@ static int gred_enqueue(struct sk_buff *skb, struct Qdisc *sch)skb->tc_index=(skb->tc_index&~GRED_VQ_MASK)|dp;}-/* sum up all the qaves of prios <= to ours to get the new qave */+/* sum up all the qaves of prios < ours to get the new qave */if(!gred_wred_mode(t)&&gred_rio_mode(t)){inti;
From: David Ward <hidden> Date: 2012-09-13 15:35:59
gred_dequeue() and gred_drop() do not seem to get called when the
queue is empty, meaning that we never start idling while in WRED
mode. And since qidlestart is not stored by gred_store_wred_set(),
we would never stop idling while in WRED mode if we ever started.
This messes up the average queue size calculation that influences
packet marking/dropping behavior.
Now, we start WRED mode idling as we are removing the last packet
from the queue. Also we now actually stop WRED mode idling when we
are enqueuing a packet.
Cc: Bruce Osler <redacted>
Signed-off-by: David Ward <redacted>
---
net/sched/sch_gred.c | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
From: David Ward <hidden> Date: 2012-09-13 15:48:25
q->vars.qavg is a Wlog scaled value, but q->backlog is not. In order
to pass q->vars.qavg as the backlog value, we need to un-scale it.
Additionally, the qave value returned via netlink should not be Wlog
scaled, so we need to un-scale the result of red_calc_qavg().
This caused artificially high values for "Average Queue" to be shown
by 'tc -s -d qdisc', but did not affect the actual operation of GRED.
Signed-off-by: David Ward <redacted>
---
net/sched/sch_gred.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
From: David Ward <hidden> Date: 2012-09-13 15:58:28
Each pair of DPs only needs to be compared once when searching for
a non-unique prio value.
Signed-off-by: David Ward <redacted>
---
net/sched/sch_gred.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
From: Jamal Hadi Salim <jhs@mojatatu.com> Date: 2012-09-13 18:02:02
On 12-09-13 11:22 AM, David Ward wrote:
q->vars.qavg is a Wlog scaled value, but q->backlog is not. In order
to pass q->vars.qavg as the backlog value, we need to un-scale it.
Additionally, the qave value returned via netlink should not be Wlog
scaled, so we need to un-scale the result of red_calc_qavg().
This caused artificially high values for "Average Queue" to be shown
by 'tc -s -d qdisc', but did not affect the actual operation of GRED.
Signed-off-by: David Ward <redacted>
From: Jamal Hadi Salim <jhs@mojatatu.com> Date: 2012-09-13 18:08:10
On 12-09-13 11:22 AM, David Ward wrote:
gred_dequeue() and gred_drop() do not seem to get called when the
queue is empty, meaning that we never start idling while in WRED
mode. And since qidlestart is not stored by gred_store_wred_set(),
we would never stop idling while in WRED mode if we ever started.
This messes up the average queue size calculation that influences
packet marking/dropping behavior.
Now, we start WRED mode idling as we are removing the last packet
from the queue. Also we now actually stop WRED mode idling when we
are enqueuing a packet.
Cc: Bruce Osler <redacted>
Signed-off-by: David Ward <redacted>
This is one is not so obvious. Iam assuming you vetted it via some tests.
In which case:
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
cheers,
jamal
gred_dequeue() and gred_drop() do not seem to get called when the
queue is empty, meaning that we never start idling while in WRED
mode. And since qidlestart is not stored by gred_store_wred_set(),
we would never stop idling while in WRED mode if we ever started.
This messes up the average queue size calculation that influences
packet marking/dropping behavior.
Now, we start WRED mode idling as we are removing the last packet
from the queue. Also we now actually stop WRED mode idling when we
are enqueuing a packet.
Cc: Bruce Osler <redacted>
Signed-off-by: David Ward <redacted>
This is one is not so obvious. Iam assuming you vetted it via some tests.
In which case:
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
cheers,
jamal
Before applying this patch, the average queue size (as seen with "tc -s
qdisc") remained constant forever after I stopped sending any packets
through the interface -- it didn't taper off as you would expect. After
the patch, the average queue size will now taper off if packets are not
being sent.
David
q->vars.qavg is a Wlog scaled value, but q->backlog is not. In order
to pass q->vars.qavg as the backlog value, we need to un-scale it.
Additionally, the qave value returned via netlink should not be Wlog
scaled, so we need to un-scale the result of red_calc_qavg().
This caused artificially high values for "Average Queue" to be shown
by 'tc -s -d qdisc', but did not affect the actual operation of GRED.
Signed-off-by: David Ward <redacted>
gred_dequeue() and gred_drop() do not seem to get called when the
queue is empty, meaning that we never start idling while in WRED
mode. And since qidlestart is not stored by gred_store_wred_set(),
we would never stop idling while in WRED mode if we ever started.
This messes up the average queue size calculation that influences
packet marking/dropping behavior.
Now, we start WRED mode idling as we are removing the last packet
from the queue. Also we now actually stop WRED mode idling when we
are enqueuing a packet.
Cc: Bruce Osler <redacted>
Signed-off-by: David Ward <redacted>
This is one is not so obvious. Iam assuming you vetted it via some
tests.
In which case:
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
cheers,
jamal
Before applying this patch, the average queue size (as seen with "tc
-s qdisc") remained constant forever after I stopped sending any
packets through the interface -- it didn't taper off as you would
expect. After the patch, the average queue size will now taper off if
packets are not being sent.
From: Jamal Hadi Salim <jhs@mojatatu.com> Date: 2012-09-13 20:37:59
On 12-09-13 03:38 PM, Ward, David - 0663 - MITLL wrote:
Before applying this patch, the average queue size (as seen with "tc
-s qdisc") remained constant forever after I stopped sending any
packets through the interface -- it didn't taper off as you would
expect. After the patch, the average queue size will now taper off if
packets are not being sent.