Skip to download

hesela.dev

Storage glossary · datasets · llms.txt · hesela.com

Dataset · kernel documentation opened 2026-10-12 · not a device sample

Linux names 4 blk-mq schedulers; I/O priority lists 8 RT levels for bfq and mq-deadline

Linux switching-sched names 4 per-device blk-mq schedulers: mq-deadline, none, bfq, and kyber. I/O priority is named for bfq and mq-deadline, with 3 classes, 8 RT class-data levels, and best-effort levels 0 (highest) through 7 (lowest); none and kyber are not named. Kyber has 2 tunables, read and synchronous-write targets in nanoseconds, which are throttle targets rather than a measured latency. The none scheduler does not reorder, and completion order is not guaranteed. No throughput was measured.

Download CSV8 rows · 6 columns · CSV

JSON metadata · All datasets · blk-mq documentation

Method

Rows are printed counts and levels from Linux kernel documentation and from block/mq-deadline.c, opened on 2026-10-12. They are not a trace of devices. switching-sched names four schedulers that can be written to /sys/block/DEV/queue/scheduler, and it shows the active name in brackets. The example cat line is for one device (sda). blk-mq.html says none places requests on whatever software queue the process is running on, without any reordering. The same page says neither the block layer nor the device protocols guarantee the order of completion of requests, and that higher layers such as the filesystem must handle that. That completion sentence is about the block layer, so this record uses it for none, mq-deadline, and kyber alike. It is not a measured completion order.

ioprio.html says I/O-priority support is scheduler dependent and currently supported by bfq and mq-deadline. It names three classes, 8 RT class-data levels, and best-effort levels from 0 (highest) to 7 (lowest). none and kyber are not named. Kyber's only two tunables, read_lat_nsec and write_lat_nsec, are target latencies in nanoseconds. Kyber throttles requests in order to meet those targets. The opened kyber text prints no default number. Those targets are not a measured latency. The deadline tunables page defines read_expire as the current time plus read_expire in milliseconds, a start-service target, and defines write_expire the same way for writes. Requests are grouped into batches of one data direction and serviced in increasing sector order. Reads are preferred until writes_starved, whose unit is a number of dispatches, says to dispatch some writes. A fifo_batch value of 1 is the documented first-come first-served case, not a default in this table. Setting front_merges to 0 disables front-merge lookup. block/mq-deadline.c begins with SPDX-License-Identifier: GPL-2.0, sets elevator_name to mq-deadline and elevator_alias to deadline, points at Documentation/block/deadline-iosched.rst, maps IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, and IOPRIO_CLASS_IDLE, and dispatches in priority order while higher-priority requests are pending. Expire defaults and sbitmap magnitudes from that file are not columns.

Named fault: treating the bracketed scheduler name, or none's lack of reordering, as a completion-order guarantee. The signal is the bracket in /sys/block/DEV/queue/scheduler and the blk-mq sentence that none does not reorder onto the running process's software queue. The miss is the same page's statement that neither the block layer nor the device protocols guarantee completion order. Named fault: reading read_lat_nsec or write_lat_nsec as achieved latency. The signal is Kyber's two nanosecond throttle targets. The miss is that the opened text has no default and no measured latency. Named fault: applying I/O priority to every scheduler, or stopping at ioprio_set(2), which still says that as at kernel 2.6.17 the only such scheduler is CFQ. The signal is ioprio.html, which names bfq and mq-deadline, 8 RT levels, and best-effort levels 0 through 7. The miss is that none and kyber are not named, and the man page is not a cell in this table. Named fault: reading the four-name cat line as a fleet, a default, or a measured throughput. The signal is one example device. The miss is that bfq is named there and in the I/O-priority rows, while this table does not transcribe bfq's algorithm, and the phrase about improving throughput is not a measured rate.

Documented quantities

Eight documented quantities. The Unit column is the unit of Quantity. Best-effort quantities are priority-level indexes, not counts of levels. Kyber's quantity counts throttle targets whose latency unit is nanoseconds. Not a measured throughput. Population, date range, and sample size do not apply.
FactApplies toQuantityUnitSourceNote
named_scheduler_countmq-deadline; none; bfq; kyber4scheduler namesSwitching SchedulerThe active name is shown in square brackets. The sda cat line is an example for one device. It is not a default. It is not a population. It is not a date range. bfq is one of the four names. Later rows do not describe the bfq algorithm.
io_priority_classesbfq; mq-deadline3scheduling classesBlock io prioritiesClasses are IOPRIO_CLASS_RT; IOPRIO_CLASS_BE; and IOPRIO_CLASS_IDLE. Support is named for bfq and mq-deadline. none and kyber are not named. The idle class has no class data.
rt_class_data_levelsbfq; mq-deadline8class-data levelsBlock io prioritiesThe page says there are 8 levels of class data within the RT class. none and kyber are not named.
be_priority_highestbfq; mq-deadline0BE priority levelBlock io priorities0 is the highest BE prio level. The page also prints io_nice = (cpu_nice + 20) / 5. This cell does not evaluate that expression.
be_priority_lowestbfq; mq-deadline7BE priority levelBlock io priorities7 is the lowest BE prio level.
kyber_target_tunableskyber2nanosecond throttle targetsKyber I/O scheduler tunablesNames are read_lat_nsec and write_lat_nsec. Each is a target latency in nanoseconds for reads or for synchronous writes. Kyber throttles requests to meet these targets. The opened rst prints no default. This is not a measured latency.
fifo_batch_fcfs_examplemq-deadline1requestsDeadline IO scheduler tunablesA fifo_batch value of 1 yields first-come first-served behaviour. The page does not call 1 the default. Batches have one data direction (read or write) and are serviced in increasing sector order. This cell is not an expire default and not an sbitmap size.
front_merges_offmq-deadline0bool settingDeadline IO scheduler tunablesSetting front_merges to 0 disables front-merge lookup. The page says front merges may still occur from the cached last_merge hint. This 0 is the documented off value. It is not an expire default and not an sbitmap size.

Limits

Column definitions

fact
string. Identifier of one documented quantity. Not a device-sample id.
applies_to
string. Scheduler names the quantity applies to, separated by semicolons. bfq is included where switching-sched or ioprio names it. none and kyber are not given I/O-priority quantities.
quantity
integer. Number printed on the cited page, or the count of names that page lists. Not a measured throughput, not an expire default, and not an sbitmap size. Best-effort quantities are priority-level indexes.
unit
string. Unit of quantity. Kyber's row counts throttle targets whose printed latency unit is nanoseconds.
citation_id
string. Id of the citation in this file. The note applies only to this row.
note
string. Scope of the quantity. Present only for facts that are rows in this table. The io_nice formula is quoted and not evaluated.

Sources and license

Small derived table. The CSV and this JSON metadata are CC0-1.0. They are not a Linux kernel dump. The opened file block/mq-deadline.c begins with SPDX-License-Identifier: GPL-2.0 and prints Copyright (C) 2016 Jens Axboe. The opened kyber-iosched.rst, switching-sched.rst, and deadline-iosched.rst.txt files contain no SPDX-License-Identifier line, and the opened blk-mq and ioprio HTML pages do not show one, so GPL-2.0 is not read off those documents. COPYING at the kernel tree root states SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note and GNU General Public License version 2 only. Canonical full dumps, linked and not mirrored: mainline 7.3-rc7 (2026-10-12) https://git.kernel.org/torvalds/t/linux-7.3-rc7.tar.gz and stable 7.2.10 (2026-10-11) https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.2.10.tar.xz.

Canonical kernel dumps, not mirrored on this site: linux-7.3-rc7.tar.gz (mainline 7.3-rc7, 2026-10-12) and linux-7.2.10.tar.xz (stable 7.2.10, 2026-10-11).

  1. Switching Scheduler (accessed 2026-10-12)
  2. Multi-Queue Block IO Queueing Mechanism (blk-mq) (accessed 2026-10-12)
  3. Block io priorities (accessed 2026-10-12)
  4. Kyber I/O scheduler tunables (accessed 2026-10-12)
  5. Kyber I/O scheduler tunables (kyber-iosched.rst) (accessed 2026-10-12)
  6. Deadline IO scheduler tunables (accessed 2026-10-12)
  7. Deadline IO scheduler tunables (deadline-iosched.rst.txt) (accessed 2026-10-12)
  8. MQ Deadline I/O scheduler (block/mq-deadline.c) (accessed 2026-10-12)
  9. The Linux Kernel Archives (accessed 2026-10-12)
  10. Linux kernel COPYING (accessed 2026-10-12)
  11. ioprio_set(2) Linux manual page (accessed 2026-10-12)