PIE(8)                  (16 January 2014)                  PIE(8)

     NAME
          PIE - Proportional Integral controller-Enhanced AQM
          algorithm

     SYNOPSIS
          tc qdisc ... pie [ limit PACKETS ] [ target TIME ] [ tupdate
          TIME ] [ alpha int ] [ beta int ] [ ecn | noecn ] [ bytemode
          | nobytemode ] [ dq_rate_estimator | no_dq_rate_estimator ]

     DESCRIPTION
          Proportional Integral controller-Enhanced (PIE) is a control
          theoretic active queue management scheme. It is based on the
          proportional integral controller but aims to control delay.
          The main design goals are
           o Low latency control
           o High link utilization
           o Simple implementation
           o Guaranteed stability and fast responsiveness

     ALGORITHM
          PIE is designed to control delay effectively. First, an
          average dequeue rate is estimated based on the standing
          queue. The rate is used to calculate the current delay.
          Then, on a periodic basis, the delay is used to calculate
          the dropping probability. Finally, on arrival, a packet is
          dropped (or marked) based on this probability.

          PIE makes adjustments to the probability based on the trend
          of the delay i.e.  whether it is going up or down.The delay
          converges quickly to the target value specified.

          alpha and beta are statically chosen parameters chosen to
          control the drop probability growth and are determined
          through control theoretic approaches. alpha determines how
          the deviation between the current and target latency changes
          probability. beta exerts additional adjustments depending on
          the latency trend.

          The drop probability is used to mark packets in ecn mode.
          However, as in RED, beyond 10% packets are dropped based on
          this probability. The bytemode is used to drop packets pro-
          portional to the packet size.

          Additional details can be found in the paper cited below.

     PARAMETERS
        limit

     Page 1                      iproute2            (printed 5/25/22)

     PIE(8)                  (16 January 2014)                  PIE(8)

          limit on the queue size in packets. Incoming packets are
          dropped when this limit is reached. Default is 1000 packets.

        target
          is the expected queue delay. The default target delay is
          15ms.

        tupdate
          is the frequency at which the system drop probability is
          calculated. 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.

        ecn | noecn
          is used to mark packets instead of dropping.  ecn to turn on
          ecn mode, noecn to turn off ecn mode. By default, ecn is
          turned off.

        bytemode | nobytemode
          is used to scale drop probability proportional to packet
          size.  bytemode to turn on bytemode, nobytemode to turn off
          bytemode. By default, bytemode is turned off.

        dq_rate_estimator | no_dq_rate_estimator
          is used to calculate delay using Little's law.
          dq_rate_estimator to turn on dq_rate_estimator,
          no_dq_rate_estimator to turn off no_dq_rate_estimator. By
          default, dq_rate_estimator is turned off.

     EXAMPLES
           # tc qdisc add dev eth0 root pie
           # tc -s qdisc show
             qdisc pie 8036: dev eth0 root refcnt 2 limit 1000p target
          15.0ms tupdate 16.0ms alpha 2 beta 20
              Sent 31216108 bytes 20800 pkt (dropped 80, overlimits 0
          requeues 0)
              backlog 16654b 11p requeues 0
               prob 0.006161 delay 15666us
               pkts_in 20811 overlimit 0 dropped 80 maxq 50 ecn_mark 0

           # tc qdisc add dev eth0 root pie dq_rate_estimator
           # tc -s qdisc show

     Page 2                      iproute2            (printed 5/25/22)

     PIE(8)                  (16 January 2014)                  PIE(8)

             qdisc pie 8036: dev eth0 root refcnt 2 limit 1000p target
          15.0ms tupdate 16.0ms alpha 2 beta 20
              Sent 63947420 bytes 42414 pkt (dropped 41, overlimits 0
          requeues 0)
              backlog 271006b 179p requeues 0
               prob 0.000092 delay 22200us avg_dq_rate 12145996
               pkts_in 41 overlimit 343 dropped 0 maxq 50 ecn_mark 0

           # tc qdisc add dev eth0 root pie limit 100 target 20ms tup-
          date 30ms ecn
           # tc -s qdisc show
             qdisc pie 8036: dev eth0 root refcnt 2 limit 100p target
          20.0ms tupdate 32.0ms alpha 2 beta 20 ecn
              Sent 6591724 bytes 4442 pkt (dropped 27, overlimits 0
          requeues 0)
              backlog 18168b 12p requeues 0
               prob 0.008845 delay 11348us
               pkts_in 4454 overlimit 0 dropped 27 maxq 65 ecn_mark 0

           # tc qdisc add dev eth0 root pie limit 100 target 50ms tup-
          date 30ms bytemode
           # tc -s qdisc show
             qdisc pie 8036: dev eth0 root refcnt 2 limit 100p target
          50.0ms tupdate 32.0ms alpha 2 beta 20 bytemode
              Sent 1616274 bytes 1137 pkt (dropped 0, overlimits 0
          requeues 0)
              backlog 13626b 9p requeues 0
               prob 0.000000 delay 0us
               pkts_in 1146 overlimit 0 dropped 0 maxq 23 ecn_mark 0

     SEE ALSO
          tc(8), tc-codel(8) tc-red(8)

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

     AUTHORS
          PIE was implemented by Vijay Subramanian and Mythili Prabhu,
          also the authors of this man page. Please report bugs and
          corrections to the Linux networking development mailing list
          at <netdev@vger.kernel.org>.

     Page 3                      iproute2            (printed 5/25/22)