1# SPDX-License-Identifier: GPL-2.0
2if BLOCK
3
4menu "IO Schedulers"
5
6config IOSCHED_NOOP
7	bool
8	default y
9	---help---
10	  The no-op I/O scheduler is a minimal scheduler that does basic merging
11	  and sorting. Its main uses include non-disk based block devices like
12	  memory devices, and specialised software or hardware environments
13	  that do their own scheduling and require only minimal assistance from
14	  the kernel.
15
16config IOSCHED_DEADLINE
17	tristate "Deadline I/O scheduler"
18	default y
19	---help---
20	  The deadline I/O scheduler is simple and compact. It will provide
21	  CSCAN service with FIFO expiration of requests, switching to
22	  a new point in the service tree and doing a batch of IO from there
23	  in case of expiry.
24
25config IOSCHED_CFQ
26	tristate "CFQ I/O scheduler"
27	default y
28	---help---
29	  The CFQ I/O scheduler tries to distribute bandwidth equally
30	  among all processes in the system. It should provide a fair
31	  and low latency working environment, suitable for both desktop
32	  and server systems.
33
34	  This is the default I/O scheduler.
35
36config CFQ_GROUP_IOSCHED
37	bool "CFQ Group Scheduling support"
38	depends on IOSCHED_CFQ && BLK_CGROUP
39	default n
40	---help---
41	  Enable group IO scheduling in CFQ.
42
43choice
44
45	prompt "Default I/O scheduler"
46	default DEFAULT_CFQ
47	help
48	  Select the I/O scheduler which will be used by default for all
49	  block devices.
50
51	config DEFAULT_DEADLINE
52		bool "Deadline" if IOSCHED_DEADLINE=y
53
54	config DEFAULT_CFQ
55		bool "CFQ" if IOSCHED_CFQ=y
56
57	config DEFAULT_NOOP
58		bool "No-op"
59
60endchoice
61
62config DEFAULT_IOSCHED
63	string
64	default "deadline" if DEFAULT_DEADLINE
65	default "cfq" if DEFAULT_CFQ
66	default "noop" if DEFAULT_NOOP
67
68config MQ_IOSCHED_DEADLINE
69	tristate "MQ deadline I/O scheduler"
70	default y
71	---help---
72	  MQ version of the deadline IO scheduler.
73
74config MQ_IOSCHED_KYBER
75	tristate "Kyber I/O scheduler"
76	default y
77	---help---
78	  The Kyber I/O scheduler is a low-overhead scheduler suitable for
79	  multiqueue and other fast devices. Given target latencies for reads and
80	  synchronous writes, it will self-tune queue depths to achieve that
81	  goal.
82
83config IOSCHED_BFQ
84	tristate "BFQ I/O scheduler"
85	default n
86	---help---
87	BFQ I/O scheduler for BLK-MQ. BFQ distributes the bandwidth of
88	of the device among all processes according to their weights,
89	regardless of the device parameters and with any workload. It
90	also guarantees a low latency to interactive and soft
91	real-time applications.  Details in
92	Documentation/block/bfq-iosched.txt
93
94config BFQ_GROUP_IOSCHED
95       bool "BFQ hierarchical scheduling support"
96       depends on IOSCHED_BFQ && BLK_CGROUP
97       default n
98       ---help---
99
100       Enable hierarchical scheduling in BFQ, using the blkio
101       (cgroups-v1) or io (cgroups-v2) controller.
102
103endmenu
104
105endif
106