• E
    sch_red: fix red_change · 1ee5fa1e
    Eric Dumazet 提交于
    Le mercredi 30 novembre 2011 à 14:36 -0800, Stephen Hemminger a écrit :
    
    > (Almost) nobody uses RED because they can't figure it out.
    > According to Wikipedia, VJ says that:
    >  "there are not one, but two bugs in classic RED."
    
    RED is useful for high throughput routers, I doubt many linux machines
    act as such devices.
    
    I was considering adding Adaptative RED (Sally Floyd, Ramakrishna
    Gummadi, Scott Shender), August 2001
    
    In this version, maxp is dynamic (from 1% to 50%), and user only have to
    setup min_th (target average queue size)
    (max_th and wq (burst in linux RED) are automatically setup)
    
    By the way it seems we have a small bug in red_change()
    
    if (skb_queue_empty(&sch->q))
    	red_end_of_idle_period(&q->parms);
    
    First, if queue is empty, we should call
    red_start_of_idle_period(&q->parms);
    
    Second, since we dont use anymore sch->q, but q->qdisc, the test is
    meaningless.
    
    Oh well...
    
    [PATCH] sch_red: fix red_change()
    
    Now RED is classful, we must check q->qdisc->q.qlen, and if queue is empty,
    we start an idle period, not end it.
    Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    1ee5fa1e
sch_red.c 7.9 KB