{
    "mode": "man",
    "parameter": "tc-pie",
    "section": "8",
    "url": "https://www.chedong.com/phpMan.php/man/tc-pie/8/json",
    "generated": "2026-05-30T08:16:24Z",
    "synopsis": "tc  qdisc ... pie [ limit PACKETS ] [ target TIME ] [ tupdate TIME ] [ alpha int ] [ beta int\n] [ ecn | noecn ] [ bytemode | nobytemode ] [ dqrateestimator | nodqrateestimator ]",
    "sections": {
        "NAME": {
            "content": "PIE - Proportional Integral controller-Enhanced AQM algorithm\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "tc  qdisc ... pie [ limit PACKETS ] [ target TIME ] [ tupdate TIME ] [ alpha int ] [ beta int\n] [ ecn | noecn ] [ bytemode | nobytemode ] [ dqrateestimator | nodqrateestimator ]\n\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "Proportional Integral controller-Enhanced (PIE) is a control theoretic active  queue  manage‐\nment  scheme.  It is based on the proportional integral controller but aims to control delay.\nThe main design goals are\no Low latency control\no High link utilization\no Simple implementation\no Guaranteed stability and fast responsiveness\n\n",
            "subsections": []
        },
        "ALGORITHM": {
            "content": "PIE is designed to control delay effectively. First, an average  dequeue  rate  is  estimated\nbased  on the standing queue. The rate is used to calculate the current delay. Then, on a pe‐\nriodic basis, the delay is used to calculate the dropping probability. Finally, on arrival, a\npacket is dropped (or marked) based on this probability.\n\nPIE  makes adjustments to the probability based on the trend of the delay i.e.  whether it is\ngoing up or down.The delay converges quickly to the target value specified.\n\nalpha and beta are statically chosen parameters chosen to control the drop probability growth\nand  are  determined through control theoretic approaches. alpha determines how the deviation\nbetween the current and target latency changes probability. beta  exerts  additional  adjust‐\nments depending on the latency trend.\n\nThe  drop  probability  is  used  to mark packets in ecn mode. However, as in RED, beyond 10%\npackets are dropped based on this probability. The bytemode is used to drop  packets  propor‐\ntional to the packet size.\n\nAdditional details can be found in the paper cited below.\n\n",
            "subsections": []
        },
        "PARAMETERS": {
            "content": "",
            "subsections": [
                {
                    "name": "limit",
                    "content": "limit  on the queue size in packets. Incoming packets are dropped when this limit is reached.\nDefault is 1000 packets.\n\n"
                },
                {
                    "name": "target",
                    "content": "is the expected queue delay. The default target delay is 15ms.\n\n"
                },
                {
                    "name": "tupdate",
                    "content": "is the frequency at which the system drop probability is calculated. The default is 15ms.\n\n"
                },
                {
                    "name": "alpha",
                    "content": ""
                },
                {
                    "name": "beta",
                    "content": "alpha and beta are parameters chosen to control the drop probability. These should be in  the\nrange between 0 and 32.\n\n"
                },
                {
                    "name": "ecn | noecn",
                    "content": "is  used to mark packets instead of dropping.  ecn to turn on ecn mode, noecn to turn off ecn\nmode. By default, ecn is turned off.\n\n"
                },
                {
                    "name": "bytemode | nobytemode",
                    "content": "is used to scale drop probability proportional to packet size.  bytemode to turn on bytemode,\nnobytemode to turn off bytemode. By default, bytemode is turned off.\n\n\ndqrateestimator | nodqrateestimator\nis  used to calculate delay using Little's law.  dqrateestimator to turn on dqrateestima‐\ntor, nodqrateestimator to turn off nodqrateestimator. By default, dqrateestimator  is\nturned off.\n\n"
                }
            ]
        },
        "EXAMPLES": {
            "content": "# tc qdisc add dev eth0 root pie\n# tc -s qdisc show\nqdisc  pie  8036:  dev eth0 root refcnt 2 limit 1000p target 15.0ms tupdate 16.0ms alpha 2\nbeta 20\nSent 31216108 bytes 20800 pkt (dropped 80, overlimits 0 requeues 0)\nbacklog 16654b 11p requeues 0\nprob 0.006161 delay 15666us\npktsin 20811 overlimit 0 dropped 80 maxq 50 ecnmark 0\n\n# tc qdisc add dev eth0 root pie dqrateestimator\n# tc -s qdisc show\nqdisc pie 8036: dev eth0 root refcnt 2 limit 1000p target 15.0ms tupdate  16.0ms  alpha  2\nbeta 20\nSent 63947420 bytes 42414 pkt (dropped 41, overlimits 0 requeues 0)\nbacklog 271006b 179p requeues 0\nprob 0.000092 delay 22200us avgdqrate 12145996\npktsin 41 overlimit 343 dropped 0 maxq 50 ecnmark 0\n\n# tc qdisc add dev eth0 root pie limit 100 target 20ms tupdate 30ms ecn\n# tc -s qdisc show\nqdisc  pie  8036:  dev  eth0 root refcnt 2 limit 100p target 20.0ms tupdate 32.0ms alpha 2\nbeta 20 ecn\nSent 6591724 bytes 4442 pkt (dropped 27, overlimits 0 requeues 0)\nbacklog 18168b 12p requeues 0\nprob 0.008845 delay 11348us\npktsin 4454 overlimit 0 dropped 27 maxq 65 ecnmark 0\n\n# tc qdisc add dev eth0 root pie limit 100 target 50ms tupdate 30ms bytemode\n# tc -s qdisc show\nqdisc pie 8036: dev eth0 root refcnt 2 limit 100p target 50.0ms  tupdate  32.0ms  alpha  2\nbeta 20 bytemode\nSent 1616274 bytes 1137 pkt (dropped 0, overlimits 0 requeues 0)\nbacklog 13626b 9p requeues 0\nprob 0.000000 delay 0us\npktsin 1146 overlimit 0 dropped 0 maxq 23 ecnmark 0\n\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "tc(8), tc-codel(8) tc-red(8)\n\n",
            "subsections": []
        },
        "SOURCES": {
            "content": "o RFC 8033: https://tools.ietf.org/html/rfc8033\n\n",
            "subsections": []
        },
        "AUTHORS": {
            "content": "PIE  was  implemented  by  Vijay Subramanian and Mythili Prabhu, also the authors of this man\npage. Please report bugs and corrections to the Linux networking development mailing list  at\n<netdev@vger.kernel.org>.\n\n\n\niproute2                                   16 January 2014                                    PIE(8)",
            "subsections": []
        }
    },
    "summary": "PIE - Proportional Integral controller-Enhanced AQM algorithm",
    "flags": [],
    "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",
        "pktsin 20811 overlimit 0 dropped 80 maxq 50 ecnmark 0",
        "# tc qdisc add dev eth0 root pie dqrateestimator",
        "# 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 avgdqrate 12145996",
        "pktsin 41 overlimit 343 dropped 0 maxq 50 ecnmark 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",
        "pktsin 4454 overlimit 0 dropped 27 maxq 65 ecnmark 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",
        "pktsin 1146 overlimit 0 dropped 0 maxq 23 ecnmark 0"
    ],
    "see_also": [
        {
            "name": "tc",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/tc/8/json"
        },
        {
            "name": "tc-codel",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/tc-codel/8/json"
        },
        {
            "name": "tc-red",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/tc-red/8/json"
        }
    ]
}