• E
    net_sched: SFB flow scheduler · e13e02a3
    Eric Dumazet 提交于
    This is the Stochastic Fair Blue scheduler, based on work from :
    
    W. Feng, D. Kandlur, D. Saha, K. Shin. Blue: A New Class of Active Queue
    Management Algorithms. U. Michigan CSE-TR-387-99, April 1999.
    
    http://www.thefengs.com/wuchang/blue/CSE-TR-387-99.pdf
    
    This implementation is based on work done by Juliusz Chroboczek
    
    General SFB algorithm can be found in figure 14, page 15:
    
    B[l][n] : L x N array of bins (L levels, N bins per level)
    enqueue()
    Calculate hash function values h{0}, h{1}, .. h{L-1}
    Update bins at each level
    for i = 0 to L - 1
       if (B[i][h{i}].qlen > bin_size)
          B[i][h{i}].p_mark += p_increment;
       else if (B[i][h{i}].qlen == 0)
          B[i][h{i}].p_mark -= p_decrement;
    p_min = min(B[0][h{0}].p_mark ... B[L-1][h{L-1}].p_mark);
    if (p_min == 1.0)
        ratelimit();
    else
        mark/drop with probabilty p_min;
    
    I did the adaptation of Juliusz code to meet current kernel standards,
    and various changes to address previous comments :
    
    http://thread.gmane.org/gmane.linux.network/90225
    http://thread.gmane.org/gmane.linux.network/90375
    
    Default flow classifier is the rxhash introduced by RPS in 2.6.35, but
    we can use an external flow classifier if wanted.
    
    tc qdisc add dev $DEV parent 1:11 handle 11:  \
            est 0.5sec 2sec sfb limit 128
    
    tc filter add dev $DEV protocol ip parent 11: handle 3 \
            flow hash keys dst divisor 1024
    
    Notes:
    
    1) SFB default child qdisc is pfifo_fast. It can be changed by another
    qdisc but a child qdisc MUST not drop a packet previously queued. This
    is because SFB needs to handle a dequeued packet in order to maintain
    its virtual queue states. pfifo_head_drop or CHOKe should not be used.
    
    2) ECN is enabled by default, unlike RED/CHOKe/GRED
    
    With help from Patrick McHardy & Andi Kleen
    Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
    CC: Juliusz Chroboczek <Juliusz.Chroboczek@pps.jussieu.fr>
    CC: Stephen Hemminger <shemminger@vyatta.com>
    CC: Patrick McHardy <kaber@trash.net>
    CC: Andi Kleen <andi@firstfloor.org>
    CC: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    e13e02a3
sch_sfb.c 16.2 KB