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 · CSVJSON 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
| Fact | Applies to | Quantity | Unit | Source | Note |
|---|---|---|---|---|---|
| named_scheduler_count | mq-deadline; none; bfq; kyber | 4 | scheduler names | Switching Scheduler | The 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_classes | bfq; mq-deadline | 3 | scheduling classes | Block io priorities | Classes 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_levels | bfq; mq-deadline | 8 | class-data levels | Block io priorities | The page says there are 8 levels of class data within the RT class. none and kyber are not named. |
| be_priority_highest | bfq; mq-deadline | 0 | BE priority level | Block io priorities | 0 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_lowest | bfq; mq-deadline | 7 | BE priority level | Block io priorities | 7 is the lowest BE prio level. |
| kyber_target_tunables | kyber | 2 | nanosecond throttle targets | Kyber I/O scheduler tunables | Names 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_example | mq-deadline | 1 | requests | Deadline IO scheduler tunables | A 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_off | mq-deadline | 0 | bool setting | Deadline IO scheduler tunables | Setting 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
- Population is not applicable. This is not a sample of drives, hosts, or kernels. Sample size is not applicable. There is no observation date range. The scheduler pages were opened on 2026-10-12. On that date kernel.org listed mainline 7.3-rc7 (2026-10-12) and stable 7.2.10 (2026-10-11). Those are release labels, not a test window.
- The switching-sched cat line is an example for the device name sda. It is not a default scheduler, not a population, and not a date range. The sentence that selecting a scheduler can improve throughput is not a measured throughput. No IOPS, MB/s, or latency sample is in this table. The opened scheduler pages do not state a test machine or a drive model.
- bfq is one of the four names and is named for I/O priority. This table does not describe bfq's algorithm. Narrating behavior for only none, mq-deadline, and kyber drops bfq.
- none places requests on the software queue the process is running on without any reordering. That is not a completion-order guarantee. The completion sentence is about the block layer and the device protocols, and this record repeats it for none, mq-deadline, and kyber. It was not measured under each scheduler.
- Kyber read_lat_nsec and write_lat_nsec are target latencies in nanoseconds. The opened kyber page and rst print no default number and no achieved latency. A throttle target is not a measured latency.
- read_expire and write_expire are start-service targets in milliseconds. writes_starved is a number of dispatches. This table does not include compiled expire defaults from mq-deadline.c and does not include an sbitmap magnitude. The deadline page signature is Nov 11 2002, Jens Axboe. The ioprio page signature is March 11 2005, Jens Axboe. Those lines stay on those pages. They are not an observation period. The mq-deadline.c copyright line stays on that file.
- ioprio_set(2) still says that as at kernel 2.6.17 the only I/O-priority scheduler is CFQ, and its example cat line is noop anticipatory deadline [cfq]. That page is not the source of any quantity cell. The kernel ioprio page is. Vendor tuning guides are not cells.
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).
- Switching Scheduler (accessed 2026-10-12)
- Multi-Queue Block IO Queueing Mechanism (blk-mq) (accessed 2026-10-12)
- Block io priorities (accessed 2026-10-12)
- Kyber I/O scheduler tunables (accessed 2026-10-12)
- Kyber I/O scheduler tunables (kyber-iosched.rst) (accessed 2026-10-12)
- Deadline IO scheduler tunables (accessed 2026-10-12)
- Deadline IO scheduler tunables (deadline-iosched.rst.txt) (accessed 2026-10-12)
- MQ Deadline I/O scheduler (block/mq-deadline.c) (accessed 2026-10-12)
- The Linux Kernel Archives (accessed 2026-10-12)
- Linux kernel COPYING (accessed 2026-10-12)
- ioprio_set(2) Linux manual page (accessed 2026-10-12)