1. 10 12月, 2011 1 次提交
    • E
      sch_red: generalize accurate MAX_P support to RED/GRED/CHOKE · a73ed26b
      Eric Dumazet 提交于
      Now RED uses a Q0.32 number to store max_p (max probability), allow
      RED/GRED/CHOKE to use/report full resolution at config/dump time.
      
      Old tc binaries are non aware of new attributes, and still set/get Plog.
      
      New tc binary set/get both Plog and max_p for backward compatibility,
      they display "probability value" if they get max_p from new kernels.
      
      # tc -d  qdisc show dev ...
      ...
      qdisc red 10: parent 1:1 limit 360Kb min 30Kb max 90Kb ecn ewma 5
      probability 0.09 Scell_log 15
      
      Make sure we avoid potential divides by 0 in reciprocal_value(), if
      (max_th - min_th) is big.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a73ed26b
  2. 09 12月, 2011 1 次提交
    • E
      sch_red: Adaptative RED AQM · 8af2a218
      Eric Dumazet 提交于
      Adaptative RED AQM for linux, based on paper from Sally FLoyd,
      Ramakrishna Gummadi, and Scott Shenker, August 2001 :
      
      http://icir.org/floyd/papers/adaptiveRed.pdf
      
      Goal of Adaptative RED is to make max_p a dynamic value between 1% and
      50% to reach the target average queue : (max_th - min_th) / 2
      
      Every 500 ms:
       if (avg > target and max_p <= 0.5)
        increase max_p : max_p += alpha;
       else if (avg < target and max_p >= 0.01)
        decrease max_p : max_p *= beta;
      
      target :[min_th + 0.4*(min_th - max_th),
                min_th + 0.6*(min_th - max_th)].
      alpha : min(0.01, max_p / 4)
      beta : 0.9
      max_P is a Q0.32 fixed point number (unsigned, with 32 bits mantissa)
      
      Changes against our RED implementation are :
      
      max_p is no longer a negative power of two (1/(2^Plog)), but a Q0.32
      fixed point number, to allow full range described in Adatative paper.
      
      To deliver a random number, we now use a reciprocal divide (thats really
      a multiply), but this operation is done once per marked/droped packet
      when in RED_BETWEEN_TRESH window, so added cost (compared to previous
      AND operation) is near zero.
      
      dump operation gives current max_p value in a new TCA_RED_MAX_P
      attribute.
      
      Example on a 10Mbit link :
      
      tc qdisc add dev $DEV parent 1:1 handle 10: est 1sec 8sec red \
         limit 400000 min 30000 max 90000 avpkt 1000 \
         burst 55 ecn adaptative bandwidth 10Mbit
      
      # tc -s -d qdisc show dev eth3
      ...
      qdisc red 10: parent 1:1 limit 400000b min 30000b max 90000b ecn
      adaptative ewma 5 max_p=0.113335 Scell_log 15
       Sent 50414282 bytes 34504 pkt (dropped 35, overlimits 1392 requeues 0)
       rate 9749Kbit 831pps backlog 72056b 16p requeues 0
        marked 1357 early 35 pdrop 0 other 0
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8af2a218
  3. 01 12月, 2011 1 次提交
  4. 13 1月, 2011 1 次提交
  5. 04 11月, 2009 1 次提交
  6. 26 4月, 2007 3 次提交
  7. 05 8月, 2006 1 次提交
    • I
      [PKT_SCHED] RED: Fix overflow in calculation of queue average · c4c0ce5c
      Ilpo Järvinen 提交于
      Overflow can occur very easily with 32 bits, e.g., with 1 second
      us_idle is approx. 2^20, which leaves only 11-Wlog bits for queue
      length. Since the EWMA exponent is typically around 9, queue
      lengths larger than 2^2 cause overflow. Whether the affected
      branch is taken when us_idle is as high as 1 second, depends on
      Scell_log, but with rather reasonable configuration Scell_log is
      large enough to cause p->Stab to have zero index, which always
      results zero shift (typically also few other small indices result
      in zero shift).
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c4c0ce5c
  8. 26 4月, 2006 1 次提交
  9. 06 11月, 2005 1 次提交
    • T
      [PKT_SCHED]: Generic RED layer · a7834745
      Thomas Graf 提交于
      Extracts the RED algorithm from sch_red.c and puts it into include/net/red.h
      for use by other RED based modules. The statistics are extended to be more
      fine grained in order to differ between probability/forced marks/drops.
      We now reset the average queue length when setting new parameters, leaving
      it might result in an unreasonable qavg for a while depending on the value of W.
      Signed-off-by: NThomas Graf <tgraf@suug.ch>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@mandriva.com>
      a7834745