mirror of
				https://git.proxmox.com/git/mirror_iproute2
				synced 2025-11-04 06:22:48 +00:00 
			
		
		
		
	Lots of little typo errors on man pages. Found by running codespell Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
		
			
				
	
	
		
			214 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.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 slightly 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.
 |