Network scheduler
<templatestyles src="Module:Hatnote/styles.css"></templatestyles>

A network scheduler, also called packet scheduler, is an arbiter program on a node in packet switching communication network. It manages the sequence of network packets in the transmit and receive queues of the network interface controller, which is a circular data buffer. There are several network schedulers available for the different operating system kernels, that implement many of the existing network scheduling algorithms.
The network scheduler logic decides, in a way similar to statistical multiplexers,[citation needed] which network packet to forward next from the buffer. The buffer works as a queuing system, storing the network packets temporarily until they are transmitted. The buffer space may be divided into different queues, with each of them holding the packets of one flow according to configured packet classification rules; for example, packets can be divided into flows by their source and destination IP addresses. Network scheduling algorithms and their associated settings determine how the network scheduler manages the buffer.
Also, network schedulers are enabling accomplishment of the active queue management and traffic shaping.
Contents
Network scheduling algorithms
In the course of time several network scheduling algorithms (also called queueing discipline, qdisc or queueing algorithm) have been developed. Each of the scheduling algorithms used internally for these queuing disciplines provides specific reordering or dropping of network packets inside various transmit or receive buffers.[1][2] 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 the quality of service (QoS) measures.[3][4][5]
Examples of algorithms suitable for managing network traffic include:
<templatestyles src="Div col/styles.css"/>
- AVQ (adaptive virtual queue)[6]
- CBQ (class-based queueing) discipline
- CHOKe (CHOose and Keep for responsive flows, CHOose and Kill for unresponsive flows) is a variant of RED
- CoDel (controlled delay) and fair/flow queue CoDel
- Credit-based fair queuing
- DRR (deficit round robin) and DWRR, implementation e.g. written by Patrick McHardy for the Linux kernel[7] and published under the GNU General Public License.
- FaQ (FavourQueue)[8]
- GCRA (generic cell rate algorithm)
- HFF (heavy-hitter filter)[9]
- HFSC (hierarchical fair-service curve)
- HTB (hierarchical token bucket)[10]
- QFQ (quick fair queueing)[11]
- FQ (fair queuing) and WFQ (weighted fair queuing)
- FIFO (first in, first out)
- pkt_sched: fq: fair queue packet scheduler [12]
- NETEM network emulator[13]
- PIE (proportional integral controller enhanced)[14]
- RED (random early detection) as well as ARED (advanced random early detection, GRED (generalized random early detection), RRED (robust random early detection) and WRED (weighted random early detection)
- RR (round-robin) and WRR (weighted round robin)
- SFB (stochastic fair blue) as well as RSFB (resilient SFB)
- SFQ (stochastic fairness queuing)[15]
- TBF (token bucket filter)[16]
- TEQL (trivial link equalizer)
Several of the above have been implemented as Linux kernel modules[17] and are freely available.
Bufferbloat
<templatestyles src="Module:Hatnote/styles.css"></templatestyles>
Bufferbloat is a phenomenon in packet-switched networks generally, in which excess buffering of packets causes high latency and packet delay variation (also known as jitter), as well as reducing the overall network throughput. When a router device is configured to use excessively large buffers, even very high-speed networks can become practically unusable for many interactive applications like voice calls, chat, and even web surfing.
The CoDel algorithm attempts to reduce this problem by improving upon the RED algorithm.[citation needed] CoDel is less prone to the effects of bufferbloat than the common tail drop disciplines.[citation needed]
Terminology
Lua error in package.lua at line 80: module 'strict' not found.
- Active queue management (AQM) – the employment of an arbiter program
- Network traffic control – an umbrella term for all measures aimed at the control of traffic
- Traffic shaping – a form of AQM, where the available bandwidth is being limited to match certain use cases
- Link sharing – this term is used when more individuals or customers share the same Internet connection
- Traffic prioritizing – a form of AQM, that selectively prioritizes certain network packets (e.g. VoIP-packets)
- TCP Turbo – by prioritizing ACK-packets on the upload, a slow-down of the download rate of a TCP connection is prevented
- Bandwidth management – the management of the available bandwidth
Implementations
Linux kernel

The Linux kernel packet scheduler is configured using the userspace CLI utility called tc
(short for "traffic control"). As the default queuing discipline, the packet scheduler uses a FIFO implementation called pfifo_fast,[18] although systemd since its version 217 changes the default queuing discipline to fq_codel.[19] The packet scheduler is an integral part of the Linux kernel's network stack and manages the ring buffers of all NICs, by working on the layer 2 of the OSI model and handling Ethernet frames, for example. It manages the transmit and receive buffers of all NICs installed in a computer.
The user space programs ifconfig
and ip
enable system administrators to configure the buffer sizes txqueuelen
and rxqueuelen
for each device separately, with their units being 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. 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.
Another network scheduler is being developed as part of Netfilter and nftables.[clarification needed]
eBPF was merged into the Linux kernel mainline in kernel version 3.18, and eBPF filters can also be attached to the packet scheduler's classifiers since the kernel version 4.1.[20] The eBPF functionality brought by version 4.1 of the Linux kernel extends the "classic" BPF programmable classifier by extending its scope to native eBPF code, allowing userspace to implement its own custom, safe, C-like classifiers that can be compiled using the LLVM eBPF backend and loaded into a running kernel using the tc
utility.[21][better source needed]
BSD
ALTQ is the implementation of a network scheduler for BSDs.
See also
- Network congestion
- Quality of service
- Queue (abstract data type)
- Queueing theory
- Statistical time division multiplexing
- Traffic shaping
- Traffic classification
- Type of service
References
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.4477&rep=rep1&type=pdf
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- Pages with reference errors
- Articles with unsourced statements from September 2014
- Pages using div col with unknown parameters
- Wikipedia articles needing clarification from June 2014
- Articles lacking reliable references from May 2016
- Linux kernel features
- Network performance
- Network scheduling algorithms
- Network theory