PFIFO_FAST(8)

๐Ÿ“ฆ
version 7.3.0 ยท 2 versions
  • 7.3.0 ยท alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, centos-stream 10, centos-stream 9, debian trixie, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking (latest)
  • 6.1.0 ยท debian bookworm, ubuntu jammy, ubuntu noble
, in alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, centos-stream 10, centos-stream 9, debian trixie, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking

๐ŸŽ€ 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 interface txqueuelen, which you set with ip(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 ๐Ÿ”ฅ

๐Ÿซถ 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 ๐Ÿฆ‹โœจ