I found a strange behavior with SFQ qdisc when several TCP flows start at the same time: despite having different hash values , they have a good chances to fall in the same slot which implies no more fairness than a simple FIFO.
This is due to the fact that the hash table for a flow is not cleared after dequeuing a slot whith a single packet in queue and so the same slot might be shared without hash colisions.
proposed patch :
--- kernel/linux-2.4.18/net/sched/sch_sfq.c
Tue May 7 16:22:23 2002
+++ sch_sfq.c Tue Aug 20 18:07:03 2002
@@ -343,6 +343,7 @@
if (q->qs[a].qlen == 0)
{
a = q->next[a];
if (a == old_a) {
+
q->ht[q->hash[a]] = SFQ_DEPTH;
q->tail = SFQ_DEPTH;
return skb;
}
any comments ?
-- Vincent EGAL Email : egal@ipanematech.com