PBFIFO(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

๐Ÿ’– PBFIFO(8) โ€” pfifo & bfifo โœจ

โœจ NAME โœจ

okay so bestie, this page is about pfifo and bfifo ๐ŸŽ€ โ€” both are Packet limited First In, First Out queues (pfifo) and Byte limited First In, First Out queues (bfifo). Literally the simplest queues ever ๐Ÿ’…

๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

tc qdisc ... add pfifo [ limit packets ]

tc qdisc ... add bfifo [ limit bytes ]

๐ŸŒธ DESCRIPTION ๐ŸŒธ

okay so the pfifo and bfifo qdiscs are totally unadorned First In, First Out queues ๐Ÿซถ They're the simplest queues possible, which means they have no overhead ๐Ÿ˜ญ pfifo limits the queue size by counting packets, and bfifo does it by counting bytes ๐Ÿ”ฅ

ngl, like all non-default qdiscs, they keep statistics ๐Ÿ“Š So this might be a reason to pick pfifo or bfifo over the default ๐Ÿ‘‘

๐Ÿงš ALGORITHM ๐Ÿงš

the vibe is a list of packets ๐Ÿ“ When a packet gets enqueued, it gets inserted at the tail of the list. When a packet needs to head out to the network, it's taken from the head of the list ๐Ÿ’œ

if the list gets too long, no more packets are allowed on ๐Ÿ™ˆ This is called 'tail drop' ๐Ÿ’€

๐ŸŽ€ PARAMETERS ๐ŸŽ€

  • limit โ€” this is the maximum queue size ๐Ÿ’… For bfifo it's measured in bytes, and for pfifo it's measured in packets. For pfifo, it defaults to the interface txqueuelen, as set with ip(8). The range for this parameter is [0, UINT32_MAX].

For bfifo, it defaults to the txqueuelen multiplied by the interface MTU. The range for this parameter is [0, UINT32_MAX] bytes.

Note: the link layer header was counted when measuring packet length ๐Ÿซถ

๐ŸŒˆ OUTPUT ๐ŸŒˆ

okay so tc -s qdisc ls shows the limit (in packets or bytes) plus the number of bytes and packets actually sent โœจ An unsent, dropped packet only shows up between braces and is not counted as 'Sent' ๐Ÿฅบ

here's a cute example ๐Ÿง The queue length is 100 packets, 45894 bytes were sent over 681 packets, no packets were dropped, and since the pfifo queue doesn't slow packets down, there were also no overlimits ๐Ÿ’–

# tc -s qdisc ls dev eth0
qdisc pfifo 8001: dev eth0 limit 100p
 Sent 45894 bytes 681 pkts (dropped 0, overlimits 0)

if a backlog happens, that gets displayed too ๐ŸŒŠ

๐Ÿ”— SEE ALSO ๐Ÿ”—

tc(8)

๐Ÿ‘‘ AUTHORS ๐Ÿ‘‘

Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>

This manpage is maintained by bert hubert <ahu@ds9a.nl> ๐Ÿซถ


bestie, that's the whole thing ๐Ÿ’…โœจ This was the iproute2 package's PBFIFO(8) page, last updated 10 January 2002 ๐ŸŒธ Stay iconic, periodt ๐Ÿ’œ