PFIFO_FAST(8)
๐ pfifo_fast(8) ๐
Manual section 8, the one for system admin stuff, all about pfifo_fast ๐
โจ NAME โจ
pfifo_fast - three-band first in, first out queue ๐ง
๐ธ DESCRIPTION ๐ธ
okay so pfifo_fast is the default qdisc on every interface ๐
The second an interface gets created, pfifo_fast is automatically handling the queue. If you attach a different qdisc, it preempts the default and steps aside. Then when that qdisc gets detached, pfifo_fast automatically comes back and takes over again ๐
ngl this qdisc is kind of magic, and it's totally unlike the others ๐ฆ
๐ฆ ALGORITHM ๐ฆ
The algorithm is super similar to the classful tc-prio(8) qdisc, so if you know that one you're already halfway there ๐ซถ
Basically pfifo_fast is like three tc-pfifo(8) queues sitting side by side. Packets can get enqueued into any of the three bands, and which band they land in depends on their Type of Service bits or their assigned priority ๐
Here's the tea: not all three bands get dequeued at the same time ๐
As long as the lower bands have traffic, the higher bands are never dequeued. This is how you can prioritize interactive traffic, or basically penalize the 'lowest cost' traffic ๐
Each band can be txqueuelen packets long, as configured with ip(8). Any extra packets that come in don't get enqueued at all. They just get dropped ๐ญ
Heads up bestie: packets over the band limit don't wait around. They're dropped, full stop.
For the complete details on how TOS bits get translated into bands, go check out tc-prio(8) ๐
๐ง PARAMETERS ๐ง
txqueuelenโ the length of all three bands depends on the interfacetxqueuelen, which you set withip(8)โจ
๐ BUGS ๐
Okay this one is a little sad ๐ฅบ pfifo_fast does not maintain statistics, and it does not show up in tc qdisc ls. The reason is that it's the automatic default whenever there's no configured qdisc, so it's kind of a ghost ๐ป
๐ฅ SEE ALSO ๐ฅ
tc(8)๐
๐ซถ AUTHORS ๐ซถ
Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru> ๐
This manpage is maintained by bert hubert <ahu@ds9a.nl> ๐ธ
Bye bestie, that's the whole pfifo_fast tea โ๐ This page is from iproute2, last updated 10 January 2002, so it's a true vintage classic ๐ฆโจ
๐ฆ where this page comes from
- alpine 3.22: iproute2-doc 6.15.0-r0 ยท GPL-2.0-or-later
- alpine 3.23: iproute2-doc 6.17.0-r0 ยท GPL-2.0-or-later
- alpine 3.24: iproute2-doc 7.0.0-r0 ยท GPL-2.0-or-later
- arch rolling: iproute2 7.2.0-1
- arch rolling: iproute2 7.3.0-1 ยท GPL-2.0-or-later
- centos-stream 10: iproute-tc 7.0.0-2.el10 ยท GPL-2.0-or-later
- centos-stream 9: iproute-tc 6.17.0-3.el9 ยท GPL-2.0-or-later
- debian trixie: iproute2 6.15.0-1 ยท GPL-2.0-only
- fedora 43: iproute-tc 6.14.0-2.fc43 ยท GPL-2.0-or-later
- fedora 44: iproute-tc 6.17.0-2.fc44 ยท GPL-2.0-or-later
- nixos 26.05: iproute2 7.0.0
- nixpkgs unstable: iproute2 7.2.0
- opensuse-leap 16.0: iproute2 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2 6.12-160000.4.1 ยท GPL-2.0-only
- opensuse-leap 16.0: iproute2 6.12-160000.4.1 ยท GPL-2.0-only
- ubuntu questing: iproute2 6.16.0-1ubuntu2
- ubuntu questing: iproute2 6.16.0-1ubuntu2.1 ยท GPL-2.0-only
- ubuntu questing: iproute2 6.16.0-1ubuntu2.2
- ubuntu resolute: iproute2 6.19.0-1ubuntu1 ยท GPL-2.0-only
- ubuntu resolute: iproute2 6.19.0-1ubuntu1.1 ยท GPL-2.0-only
- ubuntu stonking: iproute2 7.2.0-1ubuntu1 ยท GPL-2.0-only
- ๐ girlified by anthropic/claude-haiku-5.5 on : a language model's rewrite of the original, under its terms