| .TH TC 8 "8 December 2001" "iproute2" "Linux" |
| .SH NAME |
| sfq \- Stochastic Fairness Queueing |
| .SH SYNOPSIS |
| .B tc qdisc ... perturb |
| seconds |
| .B quantum |
| bytes |
| |
| .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 |
| .TP |
| (i) |
| Source address |
| .TP |
| (ii) |
| Destination address |
| .TP |
| (iii) |
| Source 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 the socket they belong to. 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, the hashing algorithm is perturbed at configurable |
| intervals so that the unfairness lasts only for a short while. Perturbation may |
| however cause some inadvertent packet reordering to occur. |
| |
| When dequeuing, each hashbucket with data is queried in a round robin fashion. |
| |
| 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. |
| |
| .SH PARAMETERS |
| .TP |
| limit |
| Upper limit of the SFQ. Can be used to reduce the default length of 128 packets. |
| .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. Advised value: 10 |
| .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. |
| |
| .SH EXAMPLE & USAGE |
| |
| To attach to device ppp0: |
| .P |
| # tc qdisc add dev ppp0 root sfq perturb 10 |
| .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. |
| |
| .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) |
| |
| .SH AUTHOR |
| Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. This manpage maintained by |
| bert hubert <ahu@ds9a.nl> |
| |
| |