Network scheduler: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m →‎Algorithms: replace {{date}} in cs1|2 date-holding parameters; evaluated 22 templates; 7 parameters modified;
m green
(12 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{Short description|Arbiter on a node in packet switching communication network}}
{{About|scheduling in networking|scheduling in computing generally|Scheduling (computing)}}
{{About|scheduling in networking|scheduling in computing generally|Scheduling (computing)}}
[[File:Data Queue.svg|thumb|right|250px|Packets queuing in a [[FIFO (computing and electronics)|FIFO]] (first in, first out) data structure.]]
[[File:Data Queue.svg|thumb|right|250px|Packets queuing in a [[FIFO (computing and electronics)|FIFO]] (first in, first out) data structure.]]


A '''network scheduler''', also called '''packet scheduler''', '''queueing discipline''', '''qdisc''' or '''queueing algorithm''', is an [[Arbiter (electronics)|arbiter]] on a [[Node (networking)|node]] in [[packet switching]] communication network. It manages the sequence of [[network packet]]s in the transmit and receive [[queue (abstract data type)|queues]] of the [[network interface controller]]. There are several network schedulers available for the different [[operating system]]s, that implement many of the existing network [[scheduling algorithm]]s.
A '''network scheduler''', also called '''packet scheduler''', '''queueing discipline''' ('''qdisc''') or '''queueing algorithm''', is an [[Arbiter (electronics)|arbiter]] on a [[Node (networking)|node]] in a [[packet switching]] communication network. It manages the sequence of [[network packet]]s in the transmit and receive [[queue (abstract data type)|queues]] of the [[protocol stack]] and [[network interface controller]]. There are several network schedulers available for the different [[operating system]]s, that implement many of the existing network [[scheduling algorithm]]s.


The network scheduler logic decides which network packet to forward next. The network scheduler is associated with a queuing system, storing the network packets temporarily until they are transmitted. Systems may have a single or multiple queues in which case each may hold the packets of one [[Traffic flow (computer networking)|flow]], classification, or priority.
The network scheduler logic decides which network packet to forward next. The network scheduler is associated with a queuing system, storing the network packets temporarily until they are transmitted. Systems may have a single or multiple queues in which case each may hold the packets of one [[Traffic flow (computer networking)|flow]], [[Traffic classification|classification]], or priority.


In some cases it may not be possible to schedule all transmissions within the constraints of the system. In these cases the network scheduler is responsible for deciding which traffic to forward and what gets [[Packet loss|dropped]].
In some cases it may not be possible to schedule all transmissions within the constraints of the system. In these cases the network scheduler is responsible for deciding which traffic to forward and what gets [[Packet loss|dropped]].


== Terminology and responsibilities ==
== Terminology and responsibilities ==
A network scheduler may have responsibility in implementation of specific [[network traffic control]] initiatives. Network traffic control is an umbrella term for all measures aimed at reducing congestion, latency and packet loss. Specifically, [[active queue management]] (AQM) is the selective dropping of queued network packets to achieve the larger goal of preventing excessive network congestion. The scheduler must choose which packets to drop. [[Traffic shaping]] smooths the bandwidth requirements of traffic flows by delaying transmission packets when they are queued in bursts. The scheduler decides the timing for the transmitted packets. [[quality of service]] (QoS) is the prioritization of traffic based on service class ([[Differentiated services]]) or reserved connection ([[Integrated services]]).
A network scheduler may have responsibility in implementation of specific [[network traffic control]] initiatives. Network traffic control is an umbrella term for all measures aimed at reducing [[network congestion]], latency and packet loss. Specifically, [[active queue management]] (AQM) is the selective dropping of queued network packets to achieve the larger goal of preventing excessive network congestion. The scheduler must choose which packets to drop. [[Traffic shaping]] smooths the bandwidth requirements of traffic flows by delaying transmission packets when they are queued in bursts. The scheduler decides the timing for the transmitted packets. [[Quality of service]] (QoS) is the prioritization of traffic based on service class ([[Differentiated services]]) or reserved connection ([[Integrated services]]).


== Algorithms ==
== Algorithms ==
In the course of time many network queueing disciplines have been developed. Each of these provides specific reordering or dropping of network packets inside various transmit or receive [[Data buffer|buffers]].<ref>{{cite web
In the course of time, many network queueing disciplines have been developed. Each of these provides specific reordering or dropping of network packets inside various transmit or receive [[Data buffer|buffers]].<ref>{{cite web
| url = http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/classless-qdiscs.html
| url = http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/classless-qdiscs.html
| title = Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs)
| title = Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs)
| access-date = November 24, 2013
| access-date = November 24, 2013
| website = tldp.org
| website = tldp.org
}}</ref><ref>{{cite web
| url = http://qos.ittc.ku.edu/howto/node8.html
| title = QoS Support in Linux: Queuing Disciplines
| date = September 30, 1999 | access-date = March 18, 2014
| author = Saravanan Radhakrishnan | website = qos.ittc.ku.edu
}}</ref>
}}</ref>
Queuing disciplines are commonly used as attempts to compensate for various networking conditions, like reducing the [[Network latency|latency]] for certain classes of network packets, and are generally used as part of QoS measures.<ref>{{cite web
Queuing disciplines are commonly used as attempts to compensate for various networking conditions, like reducing the [[Network latency|latency]] for certain classes of network packets, and are generally used as part of QoS measures.<ref>{{cite web
Line 37: Line 33:
| title = Queuing Disciplines: Order of Packet Transmission and Dropping
| title = Queuing Disciplines: Order of Packet Transmission and Dropping
| date = October 25, 2006 | access-date = March 18, 2014
| date = October 25, 2006 | access-date = March 18, 2014
| website = tau.ac.il }}</ref>
| website = tau.ac.il }}</ref>

''Classful'' queueing disciplines allow the creation of classes, which work like branches on a tree. Rules can then be set to filter packets into each class. Each class can itself have assigned other classful or ''classless'' queueing discipline. Classless queueing disciplines do not allow adding more queueing disciplines to it.<ref>{{Cite web |title=Advanced traffic control - ArchWiki |url=https://wiki.archlinux.org/title/advanced_traffic_control |access-date=2023-09-11 |website=wiki.archlinux.org}}</ref>


Examples of algorithms suitable for managing network traffic include:
Examples of algorithms suitable for managing network traffic include:
{| class="wikitable sortable"

|+Queueing Algorithms
{{Div col|colwidth=30em}}
!Algorithm
* AVQ ([[adaptive virtual queue]])<ref>{{Cite document|url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.4477&rep=rep1&type=pdf|citeseerx = 10.1.1.108.4477|title = Abstract|year = 2002}}</ref>
!Acronym
* CBQ ([[class-based queueing]]) discipline
!Type
* CHOKe (CHOose and Keep for responsive flows, CHOose and Kill for unresponsive flows) is a variant of RED
!HW Support
* [[CoDel]] (controlled delay) and fair/flow queue CoDel
|-
* [[CAKE (queue management algorithm)|CAKE]] (Common Applications Kept Enhanced), implemented in linux kernel<ref>{{cite web |url=https://lwn.net/Articles/758353/ |title=Let them run CAKE |publisher=[[LWN.net]]}}</ref>
|[[Generic cell rate algorithm]]

|GCRA
* [[Credit-based fair queuing]]
|
* DRR ([[deficit round robin]]) and DWRR, implementation e.g. written by Patrick McHardy for the [[Linux kernel]]<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_drr.c |title=DRR Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref> and published under the [[GNU General Public License]].
|
* FaQ (FavourQueue)<ref>{{cite web |url=http://oatao.univ-toulouse.fr/10282/1/Lochin_10282.pdf |title=FavorQueue: a Parameterless Active Queue Management to Improve TCP Traffic Performance}}</ref>
|-
* FQ-PIE (Flow Queue Proportional Integral controller Enhanced)
|CHOose and Kill for unresponsive flows
* GCRA ([[generic cell rate algorithm]])
|CHOKe
* HFF ([[heavy-hitter filter]])<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=10239edf86f137ce4c39b62ea9575e8053c549a0 |title=Heavy-Hitter Filter qdisc |publisher=[[kernel.org]]}}</ref>
|Classless
* HFSC ([[hierarchical fair-service curve]])
|
* HTB ([[Token Bucket#Hierarchical token bucket|hierarchical token bucket]])<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_htb.c |title=HTB Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref>
|-
* QFQ ([[quick fair queueing]])<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_qfq.c |title=QFQ Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref>
|[[Controlled Delay]]
* FQ ([[fair queuing]]) and WFQ ([[weighted fair queuing]])
|CoDel
* FIFO ([[FIFO (computing and electronics)|first in, first out]])
|Classless
* pkt_sched: fq: fair queue packet scheduler <ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=afe4fd062416b158a8a8538b23adc1930a9b88dc |title=Fair Queue packet scheduler committed to Linux kernel 3.12}}</ref>
|
* NETEM network emulator<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_netem.c |title=Network emulator Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref>
|-
* PIE ([[proportional integral controller enhanced]])<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d4b36210c2e6ecef0ce52fb6c18c51144f5c2d88 |title=Proportional Integral controller Enhanced (PIE) |publisher=[[kernel.org]] }}</ref>
|[[CAKE (queue management algorithm)|Common Applications Kept Enhanced]]<ref>{{cite web |title=Let them run CAKE |url=https://lwn.net/Articles/758353/ |publisher=[[LWN.net]]}}</ref>
* RED ([[random early detection]])
|CAKE
** ARED ([[random early detection#ARED|advanced random early detection]])
|
** GRED ([[generalized random early detection]])
|
** RRED ([[robust random early detection]])
|-
** WRED ([[weighted random early detection]])
|Earliest TxTime First
* RR ([[Round-robin scheduling|round-robin]]) and WRR ([[weighted round robin]])
|ETF
* SFB ([[Blue (queue management algorithm)|stochastic fair blue]]) as well as RSFB (resilient SFB)
|Classless
* {{visible anchor|SFQ}} (stochastic fairness queuing)<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_sfq.c |title=SFQ Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref>
|{{Yes}}
* TBF ([[token bucket filter]])<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_tbf.c |title=TBF Linux kernel network scheduler module |publisher=[[kernel.org]] |access-date=2013-09-07}}</ref>
|-
* TEQL ([[trivial link equalizer]])
|[[First In, First Out]]
{{div col end}}
|FIFO

|Classless
Several of the above have been implemented as [[Linux kernel module]]s<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched|title=The Linux kernel network scheduler|publisher=[[kernel.org]]|date=2012-12-26|access-date=2013-09-07}}</ref> and are [[free and open-source software|freely available]].
|
|-
|[[Fair queuing|Fair Queue]]
|FQ
|Classless
|
|-
|[[CoDel|Fair Queuing Controlled Delay]]
|FQ-CoDel
|Classless
|
|-
|Flow Queuing with Proportional Integral controller Enhanced
|FQ-PIE
|Classless
|
|-
|Generalized Random Early Detection
|GRED
|Classless
|
|-
|Heavy-Hitter Filter<ref>{{cite web |title=Heavy-Hitter Filter qdisc |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=10239edf86f137ce4c39b62ea9575e8053c549a0 |publisher=[[kernel.org]]}}</ref>
|HHF
|Classless
|
|-
|Multiqueue Priority
|MQ-PRIO
|Classless
|{{Yes}}
|-
|Multiqueue
|MULTIQ
|Classless
|{{Yes}}
|-
|[[Netem|Network Emulator]]<ref>{{cite web |title=Network emulator Linux kernel network scheduler module |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_netem.c |access-date=2013-09-07 |publisher=[[kernel.org]]}}</ref>
|NETEM
|Classless
|
|-
|Proportional Integral controller-Enhanced<ref>{{cite web |title=Proportional Integral controller Enhanced (PIE) |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d4b36210c2e6ecef0ce52fb6c18c51144f5c2d88 |publisher=[[kernel.org]]}}</ref>
|PIE
|Classless
|
|-
|[[Random early detection|Random Early Detection]]
|RED
|Classless
|
|-
|[[Stochastic Fair Blue]]
|SFB
|Classless
|
|-
|Stochastic Fairness Queueing
|SFQ
|Classless
|
|-
|[[Token Bucket Filter]]
|TBF
|Classless
|
|-
|[[Class-based queueing|Class Based Queueing]]
|CBQ
|Classful
|
|-
|[[Credit-based fair queuing|Credit-Based Shaper]]
|CBS
|Classful
|{{Yes}}
|-
|[[Deficit round robin|Deficit Round Robin]]<ref>{{cite web |title=DRR Linux kernel network scheduler module |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_drr.c |access-date=2013-09-07 |publisher=[[kernel.org]]}}</ref>
|DRR
|Classful
|
|-
|[[Enhanced Transmission Selection]]
|ETS
|Classful
|
|-
|[[Hierarchical fair-service curve|Hierarchical Fair Service Curve]]
|HFSC
|Classful
|
|-
|[[Hierarchical Token Bucket]]<ref>{{cite web |title=HTB Linux kernel network scheduler module |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_htb.c |access-date=2013-09-07 |publisher=[[kernel.org]]}}</ref>
|HTB
|Classful
|
|-
|Priority
|PRIO
|Classful
|
|-
|Quick Fair Queueing<ref>{{cite web |title=QFQ Linux kernel network scheduler module |url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched/sch_qfq.c |access-date=2013-09-07 |publisher=[[kernel.org]]}}</ref>
|QFQ
|Classful
|
|-
|Time Aware Priority Shaper
|TAPRIO
|Classful
|{{Yes}}
|}
Several of the above have been implemented as [[Linux kernel module]]s<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/sched|title=The Linux kernel network scheduler|publisher=[[kernel.org]]|date=2012-12-26|access-date=2013-09-07}}</ref><ref>{{Cite web |title=tc(8) - Linux manual page |url=https://man7.org/linux/man-pages/man8/tc.8.html |access-date=2023-09-11 |website=man7.org}}</ref> and are [[free and open-source software|freely available]].


== Bufferbloat ==
== Bufferbloat ==
[[Bufferbloat]] is a phenomenon in packet-switched networks in which excess [[buffer (telecommunication)|buffer]]ing of packets causes high [[Latency (engineering)|latency]] and [[packet delay variation]]. Bufferbloat can be addressed by a network scheduler that strategically discards packets to avoid an unnecessarily high buffering backlog. Examples include [[CoDel]] and [[Random early detection]].
[[Bufferbloat]] is a phenomenon in packet-switched networks in which excess [[buffer (telecommunication)|buffer]]ing of packets causes high [[Latency (engineering)|latency]] and [[packet delay variation]]. Bufferbloat can be addressed by a network scheduler that strategically discards packets to avoid an unnecessarily high buffering backlog. Examples include [[CoDel]], [[FQ-CoDel]] and [[Random early detection]].


== Implementations ==
== Implementations ==
Line 92: Line 203:
| date = 2012-05-19 | access-date = 2014-09-19
| date = 2012-05-19 | access-date = 2014-09-19
| website = lartc.org
| website = lartc.org
}}</ref> although [[systemd]] since its version 217 changes the default queuing discipline to <tt>fq_codel</tt>.<ref>{{cite web
}}</ref> although [[systemd]] since its version 217 changes the default queuing discipline to <code>fq_codel</code>.<ref>{{cite web
| url = http://cgit.freedesktop.org/systemd/systemd/tree/NEWS
| url = http://cgit.freedesktop.org/systemd/systemd/tree/NEWS
| title = systemd System and Service Manager: NEWS file
| title = systemd System and Service Manager: NEWS file
Line 107: Line 218:


== See also ==
== See also ==

* [[Network congestion]]
* [[Queue (abstract data type)]]
* [[Queueing theory]]
* [[Queueing theory]]
* [[Statistical time division multiplexing]]
* [[Statistical time division multiplexing]]
* [[Traffic shaping]]
* [[Traffic classification]]
* [[Type of service]]
* [[Type of service]]



Revision as of 13:37, 16 September 2023

Packets queuing in a FIFO (first in, first out) data structure.

A network scheduler, also called packet scheduler, queueing discipline (qdisc) or queueing algorithm, is an arbiter on a node in a packet switching communication network. It manages the sequence of network packets in the transmit and receive queues of the protocol stack and network interface controller. There are several network schedulers available for the different operating systems, that implement many of the existing network scheduling algorithms.

The network scheduler logic decides which network packet to forward next. The network scheduler is associated with a queuing system, storing the network packets temporarily until they are transmitted. Systems may have a single or multiple queues in which case each may hold the packets of one flow, classification, or priority.

In some cases it may not be possible to schedule all transmissions within the constraints of the system. In these cases the network scheduler is responsible for deciding which traffic to forward and what gets dropped.

Terminology and responsibilities

A network scheduler may have responsibility in implementation of specific network traffic control initiatives. Network traffic control is an umbrella term for all measures aimed at reducing network congestion, latency and packet loss. Specifically, active queue management (AQM) is the selective dropping of queued network packets to achieve the larger goal of preventing excessive network congestion. The scheduler must choose which packets to drop. Traffic shaping smooths the bandwidth requirements of traffic flows by delaying transmission packets when they are queued in bursts. The scheduler decides the timing for the transmitted packets. Quality of service (QoS) is the prioritization of traffic based on service class (Differentiated services) or reserved connection (Integrated services).

Algorithms

In the course of time, many network queueing disciplines have been developed. Each of these provides specific reordering or dropping of network packets inside various transmit or receive buffers.[1] Queuing disciplines are commonly used as attempts to compensate for various networking conditions, like reducing the latency for certain classes of network packets, and are generally used as part of QoS measures.[2][3][4]

Classful queueing disciplines allow the creation of classes, which work like branches on a tree. Rules can then be set to filter packets into each class. Each class can itself have assigned other classful or classless queueing discipline. Classless queueing disciplines do not allow adding more queueing disciplines to it.[5]

Examples of algorithms suitable for managing network traffic include:

Queueing Algorithms
Algorithm Acronym Type HW Support
Generic cell rate algorithm GCRA
CHOose and Kill for unresponsive flows CHOKe Classless
Controlled Delay CoDel Classless
Common Applications Kept Enhanced[6] CAKE
Earliest TxTime First ETF Classless Yes
First In, First Out FIFO Classless
Fair Queue FQ Classless
Fair Queuing Controlled Delay FQ-CoDel Classless
Flow Queuing with Proportional Integral controller Enhanced FQ-PIE Classless
Generalized Random Early Detection GRED Classless
Heavy-Hitter Filter[7] HHF Classless
Multiqueue Priority MQ-PRIO Classless Yes
Multiqueue MULTIQ Classless Yes
Network Emulator[8] NETEM Classless
Proportional Integral controller-Enhanced[9] PIE Classless
Random Early Detection RED Classless
Stochastic Fair Blue SFB Classless
Stochastic Fairness Queueing SFQ Classless
Token Bucket Filter TBF Classless
Class Based Queueing CBQ Classful
Credit-Based Shaper CBS Classful Yes
Deficit Round Robin[10] DRR Classful
Enhanced Transmission Selection ETS Classful
Hierarchical Fair Service Curve HFSC Classful
Hierarchical Token Bucket[11] HTB Classful
Priority PRIO Classful
Quick Fair Queueing[12] QFQ Classful
Time Aware Priority Shaper TAPRIO Classful Yes

Several of the above have been implemented as Linux kernel modules[13][14] and are freely available.

Bufferbloat

Bufferbloat is a phenomenon in packet-switched networks in which excess buffering of packets causes high latency and packet delay variation. Bufferbloat can be addressed by a network scheduler that strategically discards packets to avoid an unnecessarily high buffering backlog. Examples include CoDel, FQ-CoDel and Random early detection.

Implementations

Linux kernel

The Linux kernel's packet scheduler is part of the network stack, together with netfilter, nftables, and Berkeley Packet Filter.

The Linux kernel packet scheduler is an integral part of the Linux kernel's network stack and manages the transmit and receive ring buffers of all NICs, by working on the layer 2 of the OSI model and handling Ethernet frames, for example.

The packet scheduler is configured using the utility called tc (short for "traffic control"). As the default queuing discipline, the packet scheduler uses a FIFO implementation called pfifo_fast,[15] although systemd since its version 217 changes the default queuing discipline to fq_codel.[16]

The ifconfig and ip utilities enable system administrators to configure the buffer sizes txqueuelen and rxqueuelen for each device separately in terms of number of Ethernet frames regardless of their size. The Linux kernel's network stack contains several other buffers, which are not managed by the network scheduler.[a]

Berkeley Packet Filter filters can be attached to the packet scheduler's classifiers. The eBPF functionality brought by version 4.1 of the Linux kernel in 2015 extends the classic BPF programmable classifiers to eBPF.[17] These can be compiled using the LLVM eBPF backend and loaded into a running kernel using the tc utility.[18]

BSD and OpenBSD

ALTQ is the implementation of a network scheduler for BSDs. As of OpenBSD version 5.5 ALTQ was replaced by the HFSC scheduler.

See also

Notes

  1. ^ The overall size of all buffers has been the point of critique by the Bufferbloat project, which provided a partial solution with CoDel that has been primarily tested in OpenWrt.

References

  1. ^ "Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs)". tldp.org. Retrieved November 24, 2013.
  2. ^ "Traffic Control HOWTO: Components of Linux Traffic Control". tldp.org. Retrieved November 24, 2013.
  3. ^ "Traffic Control HOWTO: Traditional Elements of Traffic Control". tldp.org. Retrieved November 24, 2013.
  4. ^ "Queuing Disciplines: Order of Packet Transmission and Dropping" (PDF). tau.ac.il. October 25, 2006. Retrieved March 18, 2014.
  5. ^ "Advanced traffic control - ArchWiki". wiki.archlinux.org. Retrieved 2023-09-11.
  6. ^ "Let them run CAKE". LWN.net.
  7. ^ "Heavy-Hitter Filter qdisc". kernel.org.
  8. ^ "Network emulator Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  9. ^ "Proportional Integral controller Enhanced (PIE)". kernel.org.
  10. ^ "DRR Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  11. ^ "HTB Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  12. ^ "QFQ Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  13. ^ "The Linux kernel network scheduler". kernel.org. 2012-12-26. Retrieved 2013-09-07.
  14. ^ "tc(8) - Linux manual page". man7.org. Retrieved 2023-09-11.
  15. ^ "Linux Advanced Routing and Traffic Control HOWTO, Section 9.2.1. pfifo_fast". lartc.org. 2012-05-19. Retrieved 2014-09-19.
  16. ^ "systemd System and Service Manager: NEWS file". freedesktop.org. 2015-05-22. Retrieved 2015-06-09.
  17. ^ "Linux kernel 4.1, Section 11. Networking". kernelnewbies.org. 2015-06-21.
  18. ^ "BPF and XDP Reference Guide". Cilium documentation web site.