| .TH FQ 8 "10 Sept 2015" "iproute2" "Linux" |
| .SH NAME |
| FQ \- Fair Queue traffic policing |
| .SH SYNOPSIS |
| .B tc qdisc ... fq |
| [ |
| .B limit |
| PACKETS ] [ |
| .B flow_limit |
| PACKETS ] [ |
| .B quantum |
| BYTES ] [ |
| .B initial_quantum |
| BYTES ] [ |
| .B maxrate |
| RATE ] [ |
| .B buckets |
| NUMBER ] [ |
| .B pacing |
| | |
| .B nopacing |
| ] |
| |
| .SH DESCRIPTION |
| FQ (Fair Queue) is a classless packet scheduler meant to be mostly |
| used for locally generated traffic. It is designed to achieve per flow pacing. |
| FQ does flow separation, and is able to respect pacing requirements set by TCP stack. |
| All packets belonging to a socket are considered as a 'flow'. |
| For non local packets (router workload), packet rxhash is used as fallback. |
| |
| An application can specify a maximum pacing rate using the |
| .B SO_MAX_PACING_RATE |
| setsockopt call. This packet scheduler adds delay between packets to |
| respect rate limitation set by TCP stack. |
| |
| Dequeueing happens in a round-robin fashion. |
| A special FIFO queue is reserved for high priority packets ( |
| .B TC_PRIO_CONTROL |
| priority), such packets are always dequeued first. |
| |
| FQ is non-work-conserving. |
| |
| TCP pacing is good for flows having idle times, as the congestion |
| window permits TCP stack to queue a possibly large number of packets. |
| This removes the 'slow start after idle' choice, badly hitting |
| large BDP flows and applications delivering chunks of data such as video streams. |
| |
| .SH PARAMETERS |
| .SS limit |
| Hard limit on the real queue size. When this limit is reached, new packets |
| are dropped. If the value is lowered, packets are dropped so that the new limit is |
| met. Default is 10000 packets. |
| .SS flow_limit |
| Hard limit on the maximum number of packets queued per flow. |
| Default value is 100. |
| .SS quantum |
| The credit per dequeue RR round, i.e. the amount of bytes a flow is allowed to |
| dequeue at once. A larger value means a longer time period before the next flow |
| will be served. |
| Default is 2 * interface MTU bytes. |
| .SS initial_quantum |
| The initial sending rate credit, i.e. the amount of bytes a new flow is allowed |
| to dequeue initially. |
| This is specifically meant to allow using IW10 without added delay. |
| Default is 10 * interface MTU, i.e. 15140 for 'standard' ethernet. |
| .SS maxrate |
| Maximum sending rate of a flow. Default is unlimited. |
| Application specific setting via |
| .B SO_MAX_PACING_RATE |
| is ignored only if it is larger than this value. |
| .SS buckets |
| The size of the hash table used for flow lookups. Each bucket is assigned a |
| red-black tree for efficient collision sorting. |
| Default: 1024. |
| .SS [no]pacing |
| Enable or disable flow pacing. Default is enabled. |
| .SH EXAMPLES |
| #tc qdisc add dev eth0 root fq |
| .br |
| #tc -s -d qdisc |
| .br |
| qdisc fq 8003: dev eth0 root refcnt 2 limit 10000p flow_limit 100p buckets 1024 quantum 3028 initial_quantum 15140 |
| Sent 503727981 bytes 1146972 pkt (dropped 0, overlimits 0 requeues 54452) |
| backlog 0b 0p requeues 54452 |
| 1289 flows (1289 inactive, 0 throttled) |
| 0 gc, 31 highprio, 27411 throttled |
| .br |
| .SH SEE ALSO |
| .BR tc (8), |
| .BR socket (7) |
| .SH AUTHORS |
| FQ was written by Eric Dumazet. |