Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-18 Thread David Miller
From: Paolo Valente 
Date: Tue, 16 Jul 2013 08:52:30 +0200

 ...
> This patch addresses this issue by just using the above
> 'instantaneous' value of the weight sum, instead of the maximum
> possible value, when updating the system virtual time.  After the
> instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
> service for a time interval in the order of the time to serve one
> maximum-size packet for each backlogged class. The worst-case extent
> of the deviation exhibited by QFQ+ during this time interval [1] is
> basically the same as of the deviation described above (but, without
> this patch, QFQ+ suffers from such a deviation all the time). Finally,
> this patch modifies the comment to the function qfq_slot_insert, to
> make it coherent with the fact that the weight sum used by QFQ+ can
> now be lower than the maximum possible value.
> 
> [1] P. Valente, "Extending WF2Q+ to support a dynamic traffic mix",
> Proceedings of AAA-IDEA'05, June 2005.
> 
> Signed-off-by: Paolo Valente 

Thank you for this amazing commit message.

Since you explained everything, even if I don't understand all of the
details of QFQ/QFQ+ I can in fact be confident in your change.

Applied and queued up for -stable, thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-18 Thread David Miller
From: Paolo Valente paolo.vale...@unimore.it
Date: Tue, 16 Jul 2013 08:52:30 +0200

 ...
 This patch addresses this issue by just using the above
 'instantaneous' value of the weight sum, instead of the maximum
 possible value, when updating the system virtual time.  After the
 instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
 service for a time interval in the order of the time to serve one
 maximum-size packet for each backlogged class. The worst-case extent
 of the deviation exhibited by QFQ+ during this time interval [1] is
 basically the same as of the deviation described above (but, without
 this patch, QFQ+ suffers from such a deviation all the time). Finally,
 this patch modifies the comment to the function qfq_slot_insert, to
 make it coherent with the fact that the weight sum used by QFQ+ can
 now be lower than the maximum possible value.
 
 [1] P. Valente, Extending WF2Q+ to support a dynamic traffic mix,
 Proceedings of AAA-IDEA'05, June 2005.
 
 Signed-off-by: Paolo Valente paolo.vale...@unimore.it

Thank you for this amazing commit message.

Since you explained everything, even if I don't understand all of the
details of QFQ/QFQ+ I can in fact be confident in your change.

Applied and queued up for -stable, thanks!
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-16 Thread Paolo Valente

Il 15/07/2013 20:12, Joe Perches ha scritto:

On Mon, 2013-07-15 at 20:01 +0200, Paolo Valente wrote:

QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness.

[]

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c

[]

@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum;   /* weight sum */
+   unsigned long   iwsum;  /* inverse weight sum*/


This is a different size for 32/64 bit compiles
and may be better as u32.



Sending a new version with u32, thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-16 Thread Paolo Valente
QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness. As QFQ, QFQ+ uses a
special quantity, the system virtual time, to track the service
provided by the ideal system it approximates. When a packet is
dequeued, this quantity must be incremented by the size of the packet,
divided by the sum of the weights of the aggregates waiting to be
served. Tracking this sum correctly is a non-trivial task, because, to
preserve tight service guarantees, the decrement of this sum must be
delayed in a special way [1]: this sum can be decremented only after
that its value would decrease also in the ideal system approximated by
QFQ+. For efficiency, QFQ+ keeps track only of the 'instantaneous'
weight sum, increased and decreased immediately as the weight of an
aggregate changes, and as an aggregate is created or destroyed (which,
in its turn, happens as a consequence of some class being
created/destroyed/changed). However, to avoid the problems caused to
service guarantees by these immediate decreases, QFQ+ increments the
system virtual time using the maximum value allowed for the weight
sum, 2^10, in place of the dynamic, instantaneous value. The
instantaneous value of the weight sum is used only to check whether a
request of weight increase or a class creation can be satisfied.

Unfortunately, the problems caused by this choice are worse than the
temporary degradation of the service guarantees that may occur, when a
class is changed or destroyed, if the instantaneous value of the
weight sum was used to update the system virtual time. In fact, the
fraction of the link bandwidth guaranteed by QFQ+ to each aggregate is
equal to the ratio between the weight of the aggregate and the sum of
the weights of the competing aggregates. The packet delay guaranteed
to the aggregate is instead inversely proportional to the guaranteed
bandwidth. By using the maximum possible value, and not the actual
value of the weight sum, QFQ+ provides each aggregate with the worst
possible service guarantees, and not with service guarantees related
to the actual set of competing aggregates. To see the consequences of
this fact, consider the following simple example.

Suppose that only the following aggregates are backlogged, i.e., that
only the classes in the following aggregates have packets to transmit:
one aggregate with weight 10, say A, and ten aggregates with weight 1,
say B1, B2, ..., B10. In particular, suppose that these aggregates are
always backlogged. Given the weight distribution, the smoothest and
fairest service order would be:
A B1 A B2 A B3 A B4 A B5 A B6 A B7 A B8 A B9 A B10 A B1 A B2 ...

QFQ+ would provide exactly this optimal service if it used the actual
value for the weight sum instead of the maximum possible value, i.e.,
11 instead of 2^10. In contrast, since QFQ+ uses the latter value, it
serves aggregates as follows (easy to prove and to reproduce
experimentally):
A B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 A A A A A A A A A A B1 B2 ... B10 A A ...

By replacing 10 with N in the above example, and by increasing N, one
can increase at will the maximum packet delay and the jitter
experienced by the classes in aggregate A.

This patch addresses this issue by just using the above
'instantaneous' value of the weight sum, instead of the maximum
possible value, when updating the system virtual time.  After the
instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
service for a time interval in the order of the time to serve one
maximum-size packet for each backlogged class. The worst-case extent
of the deviation exhibited by QFQ+ during this time interval [1] is
basically the same as of the deviation described above (but, without
this patch, QFQ+ suffers from such a deviation all the time). Finally,
this patch modifies the comment to the function qfq_slot_insert, to
make it coherent with the fact that the weight sum used by QFQ+ can
now be lower than the maximum possible value.

[1] P. Valente, "Extending WF2Q+ to support a dynamic traffic mix",
Proceedings of AAA-IDEA'05, June 2005.

Signed-off-by: Paolo Valente 
---
 net/sched/sch_qfq.c | 85 +++--
 1 file changed, 56 insertions(+), 29 deletions(-)

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323..8056fb4 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -113,7 +113,6 @@
 
 #define FRAC_BITS  30  /* fixed point arithmetic */
 #define ONE_FP (1UL << FRAC_BITS)
-#define IWSUM  (ONE_FP/QFQ_MAX_WSUM)
 
 #define QFQ_MTU_SHIFT  16  /* to support TSO/GSO */
 #define QFQ_MIN_LMAX   512 /* see qfq_slot_insert */
@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum;   /* weight sum */

[PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-16 Thread Paolo Valente
QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness. As QFQ, QFQ+ uses a
special quantity, the system virtual time, to track the service
provided by the ideal system it approximates. When a packet is
dequeued, this quantity must be incremented by the size of the packet,
divided by the sum of the weights of the aggregates waiting to be
served. Tracking this sum correctly is a non-trivial task, because, to
preserve tight service guarantees, the decrement of this sum must be
delayed in a special way [1]: this sum can be decremented only after
that its value would decrease also in the ideal system approximated by
QFQ+. For efficiency, QFQ+ keeps track only of the 'instantaneous'
weight sum, increased and decreased immediately as the weight of an
aggregate changes, and as an aggregate is created or destroyed (which,
in its turn, happens as a consequence of some class being
created/destroyed/changed). However, to avoid the problems caused to
service guarantees by these immediate decreases, QFQ+ increments the
system virtual time using the maximum value allowed for the weight
sum, 2^10, in place of the dynamic, instantaneous value. The
instantaneous value of the weight sum is used only to check whether a
request of weight increase or a class creation can be satisfied.

Unfortunately, the problems caused by this choice are worse than the
temporary degradation of the service guarantees that may occur, when a
class is changed or destroyed, if the instantaneous value of the
weight sum was used to update the system virtual time. In fact, the
fraction of the link bandwidth guaranteed by QFQ+ to each aggregate is
equal to the ratio between the weight of the aggregate and the sum of
the weights of the competing aggregates. The packet delay guaranteed
to the aggregate is instead inversely proportional to the guaranteed
bandwidth. By using the maximum possible value, and not the actual
value of the weight sum, QFQ+ provides each aggregate with the worst
possible service guarantees, and not with service guarantees related
to the actual set of competing aggregates. To see the consequences of
this fact, consider the following simple example.

Suppose that only the following aggregates are backlogged, i.e., that
only the classes in the following aggregates have packets to transmit:
one aggregate with weight 10, say A, and ten aggregates with weight 1,
say B1, B2, ..., B10. In particular, suppose that these aggregates are
always backlogged. Given the weight distribution, the smoothest and
fairest service order would be:
A B1 A B2 A B3 A B4 A B5 A B6 A B7 A B8 A B9 A B10 A B1 A B2 ...

QFQ+ would provide exactly this optimal service if it used the actual
value for the weight sum instead of the maximum possible value, i.e.,
11 instead of 2^10. In contrast, since QFQ+ uses the latter value, it
serves aggregates as follows (easy to prove and to reproduce
experimentally):
A B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 A A A A A A A A A A B1 B2 ... B10 A A ...

By replacing 10 with N in the above example, and by increasing N, one
can increase at will the maximum packet delay and the jitter
experienced by the classes in aggregate A.

This patch addresses this issue by just using the above
'instantaneous' value of the weight sum, instead of the maximum
possible value, when updating the system virtual time.  After the
instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
service for a time interval in the order of the time to serve one
maximum-size packet for each backlogged class. The worst-case extent
of the deviation exhibited by QFQ+ during this time interval [1] is
basically the same as of the deviation described above (but, without
this patch, QFQ+ suffers from such a deviation all the time). Finally,
this patch modifies the comment to the function qfq_slot_insert, to
make it coherent with the fact that the weight sum used by QFQ+ can
now be lower than the maximum possible value.

[1] P. Valente, Extending WF2Q+ to support a dynamic traffic mix,
Proceedings of AAA-IDEA'05, June 2005.

Signed-off-by: Paolo Valente paolo.vale...@unimore.it
---
 net/sched/sch_qfq.c | 85 +++--
 1 file changed, 56 insertions(+), 29 deletions(-)

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323..8056fb4 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -113,7 +113,6 @@
 
 #define FRAC_BITS  30  /* fixed point arithmetic */
 #define ONE_FP (1UL  FRAC_BITS)
-#define IWSUM  (ONE_FP/QFQ_MAX_WSUM)
 
 #define QFQ_MTU_SHIFT  16  /* to support TSO/GSO */
 #define QFQ_MIN_LMAX   512 /* see qfq_slot_insert */
@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum; 

Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-16 Thread Paolo Valente

Il 15/07/2013 20:12, Joe Perches ha scritto:

On Mon, 2013-07-15 at 20:01 +0200, Paolo Valente wrote:

QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness.

[]

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c

[]

@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum;   /* weight sum */
+   unsigned long   iwsum;  /* inverse weight sum*/


This is a different size for 32/64 bit compiles
and may be better as u32.



Sending a new version with u32, thanks.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-15 Thread Joe Perches
On Mon, 2013-07-15 at 20:01 +0200, Paolo Valente wrote:
> QFQ+ inherits from QFQ a design choice that may cause a high packet
> delay/jitter and a severe short-term unfairness.
[]
> diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
[]
> @@ -189,6 +188,7 @@ struct qfq_sched {
>   struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
>   u32 num_active_agg; /* Num. of active aggregates */
>   u32 wsum;   /* weight sum */
> + unsigned long   iwsum;  /* inverse weight sum*/

This is a different size for 32/64 bit compiles
and may be better as u32.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-15 Thread Paolo Valente
QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness. As QFQ, QFQ+ uses a
special quantity, the system virtual time, to track the service
provided by the ideal system it approximates. When a packet is
dequeued, this quantity must be incremented by the size of the packet,
divided by the sum of the weights of the aggregates waiting to be
served. Tracking this sum correctly is a non-trivial task, because, to
preserve tight service guarantees, the decrement of this sum must be
delayed in a special way [1]: this sum can be decremented only after
that its value would decrease also in the ideal system approximated by
QFQ+. For efficiency, QFQ+ keeps track only of the 'instantaneous'
weight sum, increased and decreased immediately as the weight of an
aggregate changes, and as an aggregate is created or destroyed (which,
in its turn, happens as a consequence of some class being
created/destroyed/changed). However, to avoid the problems caused to
service guarantees by these immediate decreases, QFQ+ increments the
system virtual time using the maximum value allowed for the weight
sum, 2^10, in place of the dynamic, instantaneous value. The
instantaneous value of the weight sum is used only to check whether a
request of weight increase or a class creation can be satisfied.

Unfortunately, the problems caused by this choice are worse than the
temporary degradation of the service guarantees that may occur, when a
class is changed or destroyed, if the instantaneous value of the
weight sum was used to update the system virtual time. In fact, the
fraction of the link bandwidth guaranteed by QFQ+ to each aggregate is
equal to the ratio between the weight of the aggregate and the sum of
the weights of the competing aggregates. The packet delay guaranteed
to the aggregate is instead inversely proportional to the guaranteed
bandwidth. By using the maximum possible value, and not the actual
value of the weight sum, QFQ+ provides each aggregate with the worst
possible service guarantees, and not with service guarantees related
to the actual set of competing aggregates. To see the consequences of
this fact, consider the following simple example.

Suppose that only the following aggregates are backlogged, i.e., that
only the classes in the following aggregates have packets to transmit:
one aggregate with weight 10, say A, and ten aggregates with weight 1,
say B1, B2, ..., B10. In particular, suppose that these aggregates are
always backlogged. Given the weight distribution, the smoothest and
fairest service order would be:
A B1 A B2 A B3 A B4 A B5 A B6 A B7 A B8 A B9 A B10 A B1 A B2 ...

QFQ+ would provide exactly this optimal service if it used the actual
value for the weight sum instead of the maximum possible value, i.e.,
11 instead of 2^10. In contrast, since QFQ+ uses the latter value, it
serves aggregates as follows (easy to prove and to reproduce
experimentally):
A B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 A A A A A A A A A A B1 B2 ... B10 A A ...

By replacing 10 with N in the above example, and by increasing N, one
can increase at will the maximum packet delay and the jitter
experienced by the classes in aggregate A.

This patch addresses this issue by just using the above
'instantaneous' value of the weight sum, instead of the maximum
possible value, when updating the system virtual time.  After the
instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
service for a time interval in the order of the time to serve one
maximum-size packet for each backlogged class. The worst-case extent
of the deviation exhibited by QFQ+ during this time interval [1] is
basically the same as of the deviation described above (but, without
this patch, QFQ+ suffers from such a deviation all the time). Finally,
this patch modifies the comment to the function qfq_slot_insert, to
make it coherent with the fact that the weight sum used by QFQ+ can
now be lower than the maximum possible value.

[1] P. Valente, "Extending WF2Q+ to support a dynamic traffic mix",
Proceedings of AAA-IDEA'05, June 2005.

Signed-off-by: Paolo Valente 
---
 net/sched/sch_qfq.c | 85 +++--
 1 file changed, 56 insertions(+), 29 deletions(-)

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323..a271819 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -113,7 +113,6 @@
 
 #define FRAC_BITS  30  /* fixed point arithmetic */
 #define ONE_FP (1UL << FRAC_BITS)
-#define IWSUM  (ONE_FP/QFQ_MAX_WSUM)
 
 #define QFQ_MTU_SHIFT  16  /* to support TSO/GSO */
 #define QFQ_MIN_LMAX   512 /* see qfq_slot_insert */
@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum;   /* weight sum */

[PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-15 Thread Paolo Valente
QFQ+ inherits from QFQ a design choice that may cause a high packet
delay/jitter and a severe short-term unfairness. As QFQ, QFQ+ uses a
special quantity, the system virtual time, to track the service
provided by the ideal system it approximates. When a packet is
dequeued, this quantity must be incremented by the size of the packet,
divided by the sum of the weights of the aggregates waiting to be
served. Tracking this sum correctly is a non-trivial task, because, to
preserve tight service guarantees, the decrement of this sum must be
delayed in a special way [1]: this sum can be decremented only after
that its value would decrease also in the ideal system approximated by
QFQ+. For efficiency, QFQ+ keeps track only of the 'instantaneous'
weight sum, increased and decreased immediately as the weight of an
aggregate changes, and as an aggregate is created or destroyed (which,
in its turn, happens as a consequence of some class being
created/destroyed/changed). However, to avoid the problems caused to
service guarantees by these immediate decreases, QFQ+ increments the
system virtual time using the maximum value allowed for the weight
sum, 2^10, in place of the dynamic, instantaneous value. The
instantaneous value of the weight sum is used only to check whether a
request of weight increase or a class creation can be satisfied.

Unfortunately, the problems caused by this choice are worse than the
temporary degradation of the service guarantees that may occur, when a
class is changed or destroyed, if the instantaneous value of the
weight sum was used to update the system virtual time. In fact, the
fraction of the link bandwidth guaranteed by QFQ+ to each aggregate is
equal to the ratio between the weight of the aggregate and the sum of
the weights of the competing aggregates. The packet delay guaranteed
to the aggregate is instead inversely proportional to the guaranteed
bandwidth. By using the maximum possible value, and not the actual
value of the weight sum, QFQ+ provides each aggregate with the worst
possible service guarantees, and not with service guarantees related
to the actual set of competing aggregates. To see the consequences of
this fact, consider the following simple example.

Suppose that only the following aggregates are backlogged, i.e., that
only the classes in the following aggregates have packets to transmit:
one aggregate with weight 10, say A, and ten aggregates with weight 1,
say B1, B2, ..., B10. In particular, suppose that these aggregates are
always backlogged. Given the weight distribution, the smoothest and
fairest service order would be:
A B1 A B2 A B3 A B4 A B5 A B6 A B7 A B8 A B9 A B10 A B1 A B2 ...

QFQ+ would provide exactly this optimal service if it used the actual
value for the weight sum instead of the maximum possible value, i.e.,
11 instead of 2^10. In contrast, since QFQ+ uses the latter value, it
serves aggregates as follows (easy to prove and to reproduce
experimentally):
A B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 A A A A A A A A A A B1 B2 ... B10 A A ...

By replacing 10 with N in the above example, and by increasing N, one
can increase at will the maximum packet delay and the jitter
experienced by the classes in aggregate A.

This patch addresses this issue by just using the above
'instantaneous' value of the weight sum, instead of the maximum
possible value, when updating the system virtual time.  After the
instantaneous weight sum is decreased, QFQ+ may deviate from the ideal
service for a time interval in the order of the time to serve one
maximum-size packet for each backlogged class. The worst-case extent
of the deviation exhibited by QFQ+ during this time interval [1] is
basically the same as of the deviation described above (but, without
this patch, QFQ+ suffers from such a deviation all the time). Finally,
this patch modifies the comment to the function qfq_slot_insert, to
make it coherent with the fact that the weight sum used by QFQ+ can
now be lower than the maximum possible value.

[1] P. Valente, Extending WF2Q+ to support a dynamic traffic mix,
Proceedings of AAA-IDEA'05, June 2005.

Signed-off-by: Paolo Valente paolo.vale...@unimore.it
---
 net/sched/sch_qfq.c | 85 +++--
 1 file changed, 56 insertions(+), 29 deletions(-)

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index a7ab323..a271819 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -113,7 +113,6 @@
 
 #define FRAC_BITS  30  /* fixed point arithmetic */
 #define ONE_FP (1UL  FRAC_BITS)
-#define IWSUM  (ONE_FP/QFQ_MAX_WSUM)
 
 #define QFQ_MTU_SHIFT  16  /* to support TSO/GSO */
 #define QFQ_MIN_LMAX   512 /* see qfq_slot_insert */
@@ -189,6 +188,7 @@ struct qfq_sched {
struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
u32 num_active_agg; /* Num. of active aggregates */
u32 wsum; 

Re: [PATCH BUGFIX] pkt_sched: sch_qfq: remove a source of high packet delay/jitter

2013-07-15 Thread Joe Perches
On Mon, 2013-07-15 at 20:01 +0200, Paolo Valente wrote:
 QFQ+ inherits from QFQ a design choice that may cause a high packet
 delay/jitter and a severe short-term unfairness.
[]
 diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
[]
 @@ -189,6 +188,7 @@ struct qfq_sched {
   struct qfq_aggregate*in_serv_agg;   /* Aggregate being served. */
   u32 num_active_agg; /* Num. of active aggregates */
   u32 wsum;   /* weight sum */
 + unsigned long   iwsum;  /* inverse weight sum*/

This is a different size for 32/64 bit compiles
and may be better as u32.

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/