dwww Home | Manual pages | Find package

FQ-PIE(8)                            Linux                            FQ-PIE(8)

NAME
       FQ-PIE - Flow Queue Proportional Integral controller Enhanced

SYNOPSIS
       tc qdisc ... fq_pie [ limit PACKETS ] [ flows NUMBER ]
                           [ target TIME ] [ tupdate TIME ]
                           [ alpha NUMBER ] [ beta NUMBER ]
                           [ quantum BYTES ] [ memory_limit BYTES ]
                           [ ecn_prob PERENTAGE ] [ [no]ecn ]
                           [ [no]bytemode ] [ [no_]dq_rate_estimator ]

DESCRIPTION
       FQ-PIE  (Flow Queuing with Proportional Integral controller Enhanced) is
       a queuing discipline that combines Flow Queuing with the PIE AQM scheme.
       FQ-PIE uses a Jenkins hash function to classify  incoming  packets  into
       different  flows and is used to provide a fair share of the bandwidth to
       all the flows using the qdisc. Each such flow is managed by the PIE  al-
       gorithm.

ALGORITHM
       The  FQ-PIE algorithm consists of two logical parts: the scheduler which
       selects which queue to dequeue a packet from,  and  the  PIE  AQM  which
       works  on  each of the queues. The major work of FQ-PIE is mostly in the
       scheduling part. The interaction between the scheduler and the PIE algo-
       rithm is straight forward.

       During the enqueue stage, a hashing-based scheme is  used,  where  flows
       are  hashed  into  a  number  of buckets with each bucket having its own
       queue. The number of buckets is configurable, and presently defaults  to
       1024  in the implementation.  The flow hashing is performed on the 5-tu-
       ple of source and destination IP addresses, port numbers and IP protocol
       number. Once the packet has been successfully classified into  a  queue,
       it  is  handed over to the PIE algorithm for enqueuing. It is then added
       to the tail of the selected queue, and the queue's byte count is updated
       by the packet size. If the queue is not currently active (i.e., if it is
       not in either the list of new or the list of old queues) , it  is  added
       to  the end of the list of new queues, and its number of credits is ini-
       tiated to the configured quantum. Otherwise, the queue is  left  in  its
       current queue list.

       During  the  dequeue stage, the scheduler first looks at the list of new
       queues; for the queue at the head of that list, if that queue has a neg-
       ative number of credits (i.e., it has already dequeued at least a  quan-
       tum  of  bytes), it is given an additional quantum of credits, the queue
       is put onto the end of the list of old queues, and the  routine  selects
       the  next  queue and starts again. Otherwise, that queue is selected for
       dequeue again. If the list of new queues is empty,  the  scheduler  pro-
       ceeds  down  the  list  of  old queues in the same fashion (checking the
       credits, and either selecting the queue for dequeuing, or adding credits
       and putting the queue back at the end of the  list).  After  having  se-
       lected  a queue from which to dequeue a packet, the PIE algorithm is in-
       voked on that queue.

       Finally, if the PIE algorithm does not return a packet, then  the  queue
       must be empty and the scheduler does one of two things:

       If  the  queue selected for dequeue came from the list of new queues, it
       is moved to the end of the list of old queues. If instead it  came  from
       the list of old queues, that queue is removed from the list, to be added
       back (as a new queue) the next time a packet arrives that hashes to that
       queue.  Then  (since no packet was available for dequeue), the whole de-
       queue process is restarted from the beginning.

       If, instead, the scheduler did get a packet back from the PIE algorithm,
       it subtracts the size of the packet from the byte credits  for  the  se-
       lected  queue and returns the packet as the result of the dequeue opera-
       tion.

PARAMETERS
   limit
       It is the limit on the queue  size  in  packets.  Incoming  packets  are
       dropped when the limit is reached. The default value is 10240 packets.

   flows
       It  is  the  number of flows into which the incoming packets are classi-
       fied. Due to the stochastic nature of hashing, multiple flows may end up
       being hashed into the same slot. Newer flows have  priority  over  older
       ones. This parameter can be set only at load time since memory has to be
       allocated for the hash table. The default value is 1024.

   target
       It is the queue delay which the PIE algorithm tries to maintain. The de-
       fault target delay is 15ms.

   tupdate
       It  is  the time interval at which the system drop probability is calcu-
       lated.  The default is 15ms.

   alpha
   beta
       alpha and beta are parameters chosen to control  the  drop  probability.
       These should be in the range between 0 and 32.

   quantum
       quantum  signifies the number of bytes that may be dequeued from a queue
       before switching to the next queue in the deficit round robin scheme.

   memory_limit
       It is the maximum total memory allowed for packets of all flows. The de-
       fault is 32Mb.

   ecn_prob
       It is the drop probability threshold below which  packets  will  be  ECN
       marked  instead of getting dropped. The default is 10%. Setting this pa-
       rameter requires ecn to be enabled.

   [no]ecn
       It has the same semantics as pie and can be used to mark packets instead
       of dropping them. If ecn has been enabled, noecn can be used to turn  it
       off and vice-a-versa.

   [no]bytemode
       It  is  used to scale drop probability proportional to packet size byte-
       mode to turn on bytemode, nobytemode to turn off bytemode.  By  default,
       bytemode is turned off.

   [no_]dq_rate_estimator
       dq_rate_estimator  can  be  used to calculate queue delay using Little's
       Law, no_dq_rate_estimator can be used to  calculate  queue  delay  using
       timestamp. By default, dq_rate_estimator is turned off.

EXAMPLES
       # tc qdisc add dev eth0 root fq_pie
       # tc -s qdisc show dev eth0
       qdisc  fq_pie  8001: root refcnt 2 limit 10240p flows 1024 target 15.0ms
       tupdate 16.0ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb  ecn_prob
       10
        Sent 159173586 bytes 105261 pkt (dropped 24, overlimits 0 requeues 0)
        backlog 75700b 50p requeues 0
         pkts_in 105311 overlimit 0 overmemory 0 dropped 24 ecn_mark 0
         new_flow_count 7332 new_flows_len 0 old_flows_len 4 memory_used 108800

       # tc qdisc add dev eth0 root fq_pie dq_rate_estimator
       # tc -s qdisc show dev eth0
       qdisc  fq_pie  8001: root refcnt 2 limit 10240p flows 1024 target 15.0ms
       tupdate 16.0ms alpha 2 beta 20 quantum 1514b memory_limit 32Mb  ecn_prob
       10 dq_rate_estimator
        Sent 8263620 bytes 5550 pkt (dropped 4, overlimits 0 requeues 0)
        backlog 805448b 532p requeues 0
         pkts_in 6082 overlimit 0 overmemory 0 dropped 4 ecn_mark 0
         new_flow_count 94 new_flows_len 0 old_flows_len 8 memory_used 1157632

SEE ALSO
       tc(8), tc-pie(8), tc-fq_codel(8)

SOURCES
       RFC 8033: https://tools.ietf.org/html/rfc8033

AUTHORS
       FQ-PIE  was implemented by Mohit P. Tahiliani. Please report corrections
       to the Linux Networking mailing list <netdev@vger.kernel.org>.

iproute2                        23 January 2020                       FQ-PIE(8)

Generated by dwww version 1.16 on Tue Dec 16 04:33:17 CET 2025.