You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
6.8 KiB
214 lines
6.8 KiB
.TH SFB 8 "August 2011" "iproute2" "Linux"
|
|
.SH NAME
|
|
sfb \- Stochastic Fair Blue
|
|
.SH SYNOPSIS
|
|
.B tc qdisc ... blue
|
|
.B rehash
|
|
milliseconds
|
|
.B db
|
|
milliseconds
|
|
.B limit
|
|
packets
|
|
.B max
|
|
packets
|
|
.B target
|
|
packets
|
|
.B increment
|
|
float
|
|
.B decrement
|
|
float
|
|
.B penalty_rate
|
|
packets per second
|
|
.B penalty_burst
|
|
packets
|
|
|
|
.SH 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.
|
|
|
|
.SH ALGORITHM
|
|
|
|
The
|
|
.B 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
|
|
.B 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 accounting.
|
|
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
|
|
.B penalty_rate
|
|
packets per second.
|
|
|
|
.SH 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.
|
|
|
|
.SH PARAMETERS
|
|
.TP
|
|
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.
|
|
.TP
|
|
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
|
|
probabilities in the second set are updated. When the rehashing
|
|
happens, 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
|
|
.B
|
|
rehash.
|
|
.TP
|
|
limit
|
|
Hard limit on the real (not average) total queue size in packets.
|
|
Further packets are dropped. Defaults to the transmit queue length of the
|
|
device the qdisc is attached to.
|
|
.TP
|
|
max
|
|
Maximum length of a buckets queue, in packets, before packets start being
|
|
dropped. Should be sightly larger than
|
|
.B target
|
|
, but should not be set to values exceeding 1.5 times that of
|
|
.B target .
|
|
Defaults to 25.
|
|
.TP
|
|
target
|
|
The desired average bin length. If the bin queue length reaches this value,
|
|
the marking probability is increased by
|
|
.B increment.
|
|
The default value depends on the
|
|
.B max
|
|
setting, with max set to 25
|
|
.B target
|
|
will default to 20.
|
|
.TP
|
|
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.
|
|
.TP
|
|
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.
|
|
.TP
|
|
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.
|
|
.TP
|
|
penalty_burst
|
|
The number of packets a flow is permitted to exceed the penalty rate before packets
|
|
start being dropped.
|
|
Defaults to 20 packets.
|
|
|
|
.SH STATISTICS
|
|
|
|
This qdisc exposes additional statistics via 'tc -s qdisc' output.
|
|
These are:
|
|
.TP
|
|
earlydrop
|
|
The number of packets dropped before a per-flow queue was full.
|
|
.TP
|
|
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.
|
|
.TP
|
|
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.
|
|
.TP
|
|
queuedrop
|
|
The number of packets dropped due to reaching limit. This should normally be 0.
|
|
.TP
|
|
marked
|
|
The number of packets marked with ECN.
|
|
.TP
|
|
maxqlen
|
|
The length of the current longest per-flow (virtual) queue.
|
|
.TP
|
|
maxprob
|
|
The maximum per-flow drop probability. 1 means that some
|
|
flows have been detected as non-reactive.
|
|
|
|
.SH 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 congestion, or an
|
|
unresponsive flow.
|
|
|
|
.SH EXAMPLE & USAGE
|
|
|
|
To attach to interface $DEV, using default options:
|
|
.P
|
|
# tc qdisc add dev $DEV handle 1: root sfb
|
|
|
|
Only use destination ip addresses for assigning packets to bins, perturbing
|
|
hash results every 10 minutes:
|
|
.P
|
|
# tc filter add dev $DEV parent 1: handle 1 flow hash keys dst perturb 600
|
|
|
|
.SH SEE ALSO
|
|
.BR tc (8),
|
|
.BR tc-red (8),
|
|
.BR tc-sfq (8)
|
|
.SH SOURCES
|
|
.TP
|
|
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.
|
|
|
|
.SH AUTHORS
|
|
|
|
This SFB implementation was contributed by Juliusz Chroboczek and Eric Dumazet.
|