diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 14:18:53 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 14:18:53 +0000 |
commit | a0e0018c9a7ef5ce7f6d2c3ae16aecbbd16a8f67 (patch) | |
tree | 8feaf1a1932871b139b3b30be4c09c66489918be /man/man8/tc-sfq.8 | |
parent | Initial commit. (diff) | |
download | iproute2-upstream.tar.xz iproute2-upstream.zip |
Adding upstream version 6.1.0.upstream/6.1.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'man/man8/tc-sfq.8')
-rw-r--r-- | man/man8/tc-sfq.8 | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/man/man8/tc-sfq.8 b/man/man8/tc-sfq.8 new file mode 100644 index 0000000..ec4d8b8 --- /dev/null +++ b/man/man8/tc-sfq.8 @@ -0,0 +1,222 @@ +.TH TC 8 "24 January 2012" "iproute2" "Linux" +.SH NAME +sfq \- Stochastic Fairness Queueing +.SH SYNOPSIS +.B tc qdisc ... +.B [ divisor +hashtablesize +.B ] [ limit +packets +.B ] [ perturb +seconds +.B ] [ quantum +bytes +.B ] [ flows +number +.B ] [ depth +number +.B ] [ headdrop +.B ] [ redflowlimit +bytes +.B ] [ min +bytes +.B ] [ max +bytes +.B ] [ avpkt +bytes +.B ] [ burst +packets +.B ] [ probability +P +.B ] [ ecn +.B ] [ harddrop ] +.SH DESCRIPTION + +Stochastic Fairness Queueing is a classless queueing discipline available for +traffic control with the +.BR tc (8) +command. + +SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'. +The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing +any single flow from drowning out the rest. + +This may in fact have some effect in mitigating a Denial of Service attempt. + +SFQ is work-conserving and therefore always delivers a packet if it has one available. +.SH ALGORITHM +On enqueueing, each packet is assigned to a hash bucket, based on the packets hash value. +This hash value is either obtained from an external flow classifier (use +.B +tc filter +to set them), or a default internal classifier if no external classifier has been configured. + +When the internal classifier is used, sfq uses +.TP +(i) +Source address +.TP +(ii) +Destination address +.TP +(iii) +Source and Destination port +.P +If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP. +Packets with other protocols are hashed based on the 32bits representation of their +destination and source. A flow corresponds mostly to a TCP/IP connection. + +Each of these buckets should represent a unique flow. Because multiple flows may +get hashed to the same bucket, sfqs internal hashing algorithm may be perturbed at configurable +intervals so that the unfairness lasts only for a short while. Perturbation may +however cause some inadvertent packet reordering to occur. After linux-3.3, there is +no packet reordering problem, but possible packet drops if rehashing hits one limit +(number of flows or packets per flow) + +When dequeuing, each hashbucket with data is queried in a round robin fashion. + +Before linux-3.3, the compile time maximum length of the SFQ is 128 packets, which can be spread over +at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed +on the fullest bucket, thus maintaining fairness. + +After linux-3.3, maximum length of SFQ is 65535 packets, and divisor limit is 65536. +In case of overflow, tail-drop is performed on the fullest bucket, unless headdrop was requested. + +.SH PARAMETERS +.TP +divisor +Can be used to set a different hash table size, available from kernel 2.6.39 onwards. +The specified divisor must be a power of two and cannot be larger than 65536. +Default value: 1024. +.TP +limit +Upper limit of the SFQ. Can be used to reduce the default length of 127 packets. +After linux-3.3, it can be raised. +.TP +depth +Limit of packets per flow (after linux-3.3). Default to 127 and can be lowered. +.TP +perturb +Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that +no perturbation occurs. Do not set too low for each perturbation may cause some packet +reordering or losses. Advised value: 60 +This value has no effect when external flow classification is used. +Its better to increase divisor value to lower risk of hash collisions. +.TP +quantum +Amount of bytes a flow is allowed to dequeue during a round of the round robin process. +Defaults to the MTU of the interface which is also the advised value and the minimum value. +.TP +flows +After linux-3.3, it is possible to change the default limit of flows. +Default value is 127 +.TP +headdrop +Default SFQ behavior is to perform tail-drop of packets from a flow. +You can ask a headdrop instead, as this is known to provide a better feedback for TCP flows. +.TP +redflowlimit +Configure the optional RED module on top of each SFQ flow. +Random Early Detection principle is to perform packet marks or drops in a probabilistic way. +(man tc-red for details about RED) +.nf +redflowlimit configures the hard limit on the real (not average) queue size per SFQ flow in bytes. +.fi +.TP +min +Average queue size at which marking becomes a possibility. Defaults to +.B max +/3 +.TP +max +At this average queue size, the marking probability is maximal. Defaults to +.B redflowlimit +/4 +.TP +probability +Maximum probability for marking, specified as a floating point number from 0.0 to 1.0. Default value is 0.02 +.TP +avpkt +Specified in bytes. Used with burst to determine the time constant for average queue size calculations. Default value is 1000 +.TP +burst +Used for determining how fast the average queue size is influenced by the real queue size. +.nf +Default value is : +.B (2 * min + max) / (3 * avpkt) +.fi +.TP +ecn +RED can either 'mark' or 'drop'. Explicit Congestion +Notification allows RED to notify remote hosts that their rate exceeds the +amount of bandwidth available. Non-ECN capable hosts can only be notified by +dropping a packet. If this parameter is specified, packets which indicate +that their hosts honor ECN will only be marked and not dropped, unless the +queue size hits +.B depth +packets. +.TP +harddrop +If average flow queue size is above +.B max +bytes, this parameter forces a drop instead of ecn marking. +.SH EXAMPLE & USAGE + +To attach to device ppp0: +.P +# tc qdisc add dev ppp0 root sfq +.P +Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful +if it owns the queue. +This is the case when the link speed equals the actually available bandwidth. This holds +for regular phone modems, ISDN connections and direct non-switched ethernet links. +.P +Most often, cable modems and DSL devices do not fall into this category. The same holds +for when connected to a switch and trying to send data to a congested segment also +connected to the switch. +.P +In this case, the effective queue does not reside within Linux and is therefore not +available for scheduling. +.P +Embed SFQ in a classful qdisc to make sure it owns the queue. + +It is possible to use external classifiers with sfq, for example to hash traffic based only +on source/destination ip addresses: +.P +# tc filter add ... flow hash keys src,dst perturb 30 divisor 1024 +.P +Note that the given divisor should match the one used by sfq. If you have +changed the sfq default of 1024, use the same value for the flow hash filter, too. + +.P +Example of sfq with optional RED mode : +.P +# tc qdisc add dev eth0 parent 1:1 handle 10: sfq limit 3000 flows 512 divisor 16384 + redflowlimit 100000 min 8000 max 60000 probability 0.20 ecn headdrop + +.SH SOURCE +.TP +o +Paul E. McKenney "Stochastic Fairness Queuing", +IEEE INFOCOMM'90 Proceedings, San Francisco, 1990. + +.TP +o +Paul E. McKenney "Stochastic Fairness Queuing", +"Interworking: Research and Experience", v.2, 1991, p.113-131. + +.TP +o +See also: +M. Shreedhar and George Varghese "Efficient Fair +Queuing using Deficit Round Robin", Proc. SIGCOMM 95. + +.SH SEE ALSO +.BR tc (8), +.BR tc-red (8) + +.SH AUTHORS +Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, +Eric Dumazet <eric.dumazet@gmail.com>. +.P +This manpage maintained by bert hubert <ahu@ds9a.nl> |