tc-sfb(pdf.php) - phpMan

SFB(8)                               Linux                              SFB(8)

NAME
       sfb - Stochastic Fair Blue
SYNOPSIS
       tc qdisc ... blue rehash milliseconds db milliseconds limit packets max
       packets target packets increment  float  decrement  float  penalty_rate
       packets per second penalty_burst packets

DESCRIPTION
       Stochastic Fair Blue is a classless qdisc to manage congestion based on
       packet loss and link utilization history while trying to  prevent  non-
       responsive flows (i.e. flows that do not react to congestion marking or
       dropped  packets)  from  impacting  performance  of  responsive  flows.
       Unlike  RED,  where  the marking probability has to be configured, BLUE
       tries to determine the ideal marking probability automatically.

ALGORITHM
       The BLUE algorithm maintains a probability which is  used  to  mark  or
       drop  packets  that  are  to  be  queued.  If  the queue overflows, the
       mark/drop probability is increased. If the  queue  becomes  empty,  the
       probability  is  decreased. The Stochastic Fair Blue (SFB) algorithm is
       designed to protect TCP flows against non-responsive flows.
       This SFB implementation maintains 8 levels of 16 bins each for account-
       ing.   Each  flow  is mapped into a bin of each level using a per-level
       hash value.
       Every bin maintains a marking  probability,  which  gets  increased  or
       decreased  based on bin occupancy. If the number of packets exceeds the
       size of that bin, the marking probability is increased. If  the  number
       drops to zero, it is decreased.
       The  marking  probability  is  based on the minimum value of all bins a
       flow is mapped into, thus, when a flow does not respond to  marking  or
       gradual packet drops, the marking probability quickly reaches one.
       In this case, the flow is rate-limited to penalty_rate packets per sec-
       ond.

LIMITATIONS
       Due to SFBs nature, it is possible for responsive flows to share all of
       its  bins with a non-responsive flow, causing the responsive flow to be
       misidentified as being non-responsive.
       The probability of a responsive flow to be misidentified  is  dependent
       on  the  number of non-responsive flows, M. It is (1 - (1 - (1 / 16.0))
       ** M) **8, so for example with 10  non-responsive  flows  approximately
       0.2% of responsive flows will be misidentified.
       To  mitigate  this,  SFB performs performs periodic re-hashing to avoid
       misclassification for prolonged periods of time.
       The default hashing method will use source and destination ip addresses
       and  port  numbers  if possible, and also supports tunneling protocols.
       Alternatively, an external classifier can be configured, too.

PARAMETERS
       rehash Time interval in milliseconds when queue perturbation occurs  to
              avoid erroneously detecting unrelated, responsive flows as being
              part of a non-responsive flow for  prolonged  periods  of  time.
              Defaults to 10 minutes.
       db     Double  buffering  warmup  wait time, in milliseconds.  To avoid
              destroying the probability history when rehashing is  performed,
              this  implementation  maintains  a  second set of levels/bins as
              described in section 4.4 of the SFB reference.  While one set is
              used  to manage the queue, a second set is warmed up: Whenever a
              flow is then determined to be non-responsive, the marking proba-
              bilities  in the second set are updated. When the rehashing hap-
              pens, these bins will be used to manage the queue and  all  non-
              responsive  flows  can  be rate-limited immediately.  This value
              determines how much time has to pass before  the  2nd  set  will
              start  to be warmed up.  Defaults to one minute, should be lower
              than rehash.
       limit  Hard limit on the real (not average) total queue size  in  pack-
              ets.   Further  packets  are  dropped.  Defaults to the transmit
              queue length of the device the qdisc is attached to.
       max    Maximum length of a buckets queue, in  packets,  before  packets
              start  being dropped. Should be sightly larger than target , but
              should not be set to values exceeding 1.5 times that of target .
              Defaults to 25.
       target The  desired average bin length. If the bin queue length reaches
              this value, the marking probability is increased  by  increment.
              The default value depends on the max setting, with max set to 25
              target will default to 20.
       increment
              A value used to increase the marking probability when the  queue
              appears  to be over-used. Must be between 0 and 1.0. Defaults to
              0.00050.
       decrement
              Value used to decrease the marking probability when the queue is
              found  to  be  empty.  Must  be  between 0 and 1.0.  Defaults to
              0.00005.
       penalty_rate
              The maximum number of packets belonging to flows  identified  as
              being  non-responsive that can be enqueued per second. Once this
              number has been reached, further packets of such  non-responsive
              flows  are  dropped.   Set this to a reasonable fraction of your
              uplink throughput; the default value of 10 packets  is  probably
              too small.
       penalty_burst
              The  number of packets a flow is permitted to exceed the penalty
              rate before packets start being dropped.  Defaults to  20  pack-
              ets.

STATISTICS
       This  qdisc  exposes  additional  statistics  via 'tc -s qdisc' output.
       These are:
       earlydrop
              The number of packets dropped before a per-flow queue was full.
       ratedrop
              The number of packets dropped because of rate-limiting.  If this
              value  is  high,  there  are  many non-reactive flows being sent
              through sfb. In such cases, it might  be  better  to  embed  sfb
              within  a  classful  qdisc  to better control such flows using a
              different, shaping qdisc.
       bucketdrop
              The number of packets dropped because a per-flow queue was full.
              High bucketdrop may point to a high number of aggressive, short-
              lived flows.
       queuedrop
              The number of packets dropped due to reaching limit. This should
              normally be 0.
       marked The number of packets marked with ECN.
       maxqlen
              The length of the current longest per-flow (virtual) queue.
       maxprob
              The  maximum  per-flow drop probability. 1 means that some flows
              have been detected as non-reactive.

NOTES
       SFB automatically  enables  use  of  Explicit  Congestion  Notification
       (ECN).   Also,  this  SFB implementation does not queue packets itself.
       Rather, packets are enqueued to the inner qdisc  (defaults  to  pfifo).
       Because  sfb  maintains  virtual queue states, the inner qdisc must not
       drop a packet previously queued.  Furthermore, if a buckets queue has a
       very high marking rate, this implementation will start dropping packets
       instead of marking them, as such a situation points to either bad  con-
       gestion, or an unresponsive flow.

EXAMPLE & USAGE
       To attach to interface $DEV, using default options:
       # tc qdisc add dev $DEV handle 1: root sfb
       Only  use  destination ip addresses for assigning packets to bins, per-
       turbing hash results every 10 minutes:
       # tc filter add dev $DEV parent 1: handle 1 flow hash keys dst  perturb
       600

SEE ALSO
       tc(8), tc-red(8), tc-sfq(8)
SOURCES
       o      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.

AUTHORS
       This  SFB implementation was contributed by Juliusz Chroboczek and Eric
       Dumazet.

iproute2                          August 2011                           SFB(8)