Re: [PATCH net-next-2.6 v3] net_sched: SFB flow scheduler

Eric Dumazet
2011-02-23T17:16:13Z

Le mercredi 23 février 2011 à 17:58 +0100, Patrick McHardy a écrit :
> Am 23.02.2011 17:48, schrieb Eric Dumazet:
> > Le mercredi 23 février 2011 à 17:24 +0100, Patrick McHardy a écrit :
> >
> >> This needs to be a per-skb property, otherwise you could have the
> >> situation:
> >>
> >> - enqueue skb, double_buffering=0, increment buffer 0
> >> - enable double buffering
> >> - swap buffers
> >> - dequeue same skb, decrement buffer 1
> >>
> >> after which the qlen values of buffer 1 will be incorrect.
> >>
> >
> > Normally its OK, because we bzero() the zone, and the "decrement" is
> > 0-bounded.
>
> Yeah, but we might decrement buckets of different flows which
> are non-zero. Probably not too bad, but still not correct.
>
> > I had this idea (of storing two bits per skb), but :
> >
> > - It means that swap_buffer() should not touch (bzero) the 'old' bins
>
> Yes, it means we have to properly decrement the old buffer
> until all bins reached zero.
>
> > - Since hash perturbator is changed, we have to store the two hash
> > values per skb (instead of one u32 / classid).
>
> Indeed.

BTQ, I had this idea of storing the double_buffer per skb reading SFB
paper, because paper says the double buffering is really needed only for
unelastic flows, not for all packets.

paper quote :

As one set of bins is being used
for queue management, a second set of bins using the next set of hash
functions can be warmed up. In this
case, any time a flow is classified as non-responsive, it is hashed
using the second set of hash functions and
the marking probabilities of the corresponding bins in the warmup set
are updated.

So using two 'hash' values per skb is the way to go, with special 0
value meanings : skb was not 'inserted' into virtual queues.