# tc-pie

## 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 proportional to
           the packet size.
    
           Additional details can be found in the paper cited below.
    


## PARAMETERS



       **limit**
           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
              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 tupdate
           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 tupdate
           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
    


## SOURCES



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


* * *