Provided by: iproute2_4.15.0-2ubuntu1.3_amd64 bug


       FQ - Fair Queue traffic policing


       tc  qdisc  ...  fq  [  limit  PACKETS  ]  [  flow_limit  PACKETS  ]  [  quantum  BYTES ] [
       initial_quantum BYTES ] [ maxrate RATE ] [ buckets NUMBER ]  [ pacing | nopacing ]


       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  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 ( 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.


       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

       Hard limit on the maximum number of packets queued per flow.  Default value is 100.

       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.

       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.

       Maximum sending rate of a flow.  Default is unlimited.  Application specific  setting  via
       SO_MAX_PACING_RATE is ignored only if it is larger than this value.

       The size of the hash table used for flow lookups. Each bucket is assigned a red-black tree
       for efficient collision sorting.  Default: 1024.

       Enable or disable flow pacing. Default is enabled.


       #tc qdisc add dev eth0 root fq
       #tc -s -d qdisc
       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


       tc(8), socket(7)


       FQ was written by Eric Dumazet.