aboutsummaryrefslogtreecommitdiff
path: root/block/Kconfig.iosched
blob: b168d2b36eff4b4c1885cdc368ed0ae3389f9fbf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
if BLOCK

menu "IO Schedulers"

config IOSCHED_NOOP
	bool
	default y
	---help---
	  The no-op I/O scheduler is a minimal scheduler that does basic merging
	  and sorting. Its main uses include non-disk based block devices like
	  memory devices, and specialised software or hardware environments
	  that do their own scheduling and require only minimal assistance from
	  the kernel.

config IOSCHED_DEADLINE
	tristate "Deadline I/O scheduler"
	default y
	---help---
	  The deadline I/O scheduler is simple and compact. It will provide
	  CSCAN service with FIFO expiration of requests, switching to
	  a new point in the service tree and doing a batch of IO from there
	  in case of expiry.

config IOSCHED_ROW
	tristate "ROW I/O scheduler"
	default y
	---help---
	  The ROW I/O scheduler gives priority to READ requests over the
	  WRITE requests when dispatching, without starving WRITE requests.
	  Requests are kept in priority queues. Dispatching is done in a RR
	  manner when the dispatch quantum for each queue is calculated
	  according to queue priority.
	  Most suitable for mobile devices.

config IOSCHED_SIO
	tristate "Simple I/O scheduler"
	default y
	---help---
	The Simple I/O scheduler is an extremely simple scheduler,
	based on noop and deadline, that relies on deadlines to
	ensure fairness. The algorithm does not do any sorting but
	basic merging, trying to keep a minimum overhead. It is aimed
	mainly for aleatory access devices (eg: flash devices).

config IOSCHED_ZEN
	tristate "Zen I/O scheduler"
	default y
	---help---
	FCFS, dispatches are back-inserted, deadlines ensure fairness.
        Should work best with devices where there is no travel delay.

config IOSCHED_CFQ
	tristate "CFQ I/O scheduler"
	default y
	---help---
	  The CFQ I/O scheduler tries to distribute bandwidth equally
	  among all processes in the system. It should provide a fair
	  and low latency working environment, suitable for both desktop
	  and server systems.

	  This is the default I/O scheduler.

config CFQ_GROUP_IOSCHED
	bool "CFQ Group Scheduling support"
	depends on IOSCHED_CFQ && BLK_CGROUP
	default n
	---help---
	  Enable group IO scheduling in CFQ.


config IOSCHED_SIOPLUS
	tristate "Simple I/O scheduler plus"
	default y
	---help---
	  The Simple I/O scheduler is an extremely simple scheduler,
	  based on noop and deadline, that relies on deadlines to
	  ensure fairness. The algorithm does not do any sorting but
	  basic merging, trying to keep a minimum overhead. It is aimed
	  mainly for aleatory access devices (eg: flash devices).

config IOSCHED_FIOPS
	tristate "IOPS based I/O scheduler"
	default y
	---help---
	  This is an IOPS based I/O scheduler. It will try to distribute
          IOPS equally among all processes in the system. It's mainly for
          Flash based storage.

config IOSCHED_BFQ
	tristate "BFQ I/O scheduler"
	default n
	---help---
	  The BFQ I/O scheduler tries to distribute bandwidth among
	  all processes according to their weights.
	  It aims at distributing the bandwidth as desired, independently of
	  the disk parameters and with any workload. It also tries to
	  guarantee low latency to interactive and soft real-time
	  applications. If compiled built-in (saying Y here), BFQ can
	  be configured to support hierarchical scheduling.

config CGROUP_BFQIO
	bool "BFQ hierarchical scheduling support"
	depends on CGROUPS && IOSCHED_BFQ=y
	default n
	---help---
	  Enable hierarchical scheduling in BFQ, using the cgroups
	  filesystem interface.  The name of the subsystem will be
	  bfqio.

choice
	prompt "Default I/O scheduler"
	default DEFAULT_CFQ
	help
	  Select the I/O scheduler which will be used by default for all
	  block devices.

	config DEFAULT_DEADLINE
		bool "Deadline" if IOSCHED_DEADLINE=y

	config DEFAULT_ROW
		bool "ROW" if IOSCHED_ROW=y
		help
		  The ROW I/O scheduler gives priority to READ requests
		  over the WRITE requests when dispatching, without starving
		  WRITE requests. Requests are kept in priority queues.
		  Dispatching is done in a RR manner when the dispatch quantum
		  for each queue is defined according to queue priority.
		  Most suitable for mobile devices.

	config DEFAULT_SIO
		bool "SIO" if IOSCHED_SIO=y

	config DEFAULT_CFQ
		bool "CFQ" if IOSCHED_CFQ=y

    	config DEFAULT_SIOPLUS
		bool "SIOPLUS" if IOSCHED_SIOPLUS=y

    	config DEFAULT_ZEN
		bool "ZEN" if IOSCHED_ZEN=y

	config DEFAULT_FIOPS
		bool "FIOPS" if IOSCHED_FIOPS=y

	config DEFAULT_BFQ
		bool "BFQ" if IOSCHED_BFQ=y
		help
		  Selects BFQ as the default I/O scheduler which will be
		  used by default for all block devices.
		  The BFQ I/O scheduler aims at distributing the bandwidth
		  as desired, independently of the disk parameters and with
		  any workload. It also tries to guarantee low latency to
		  interactive and soft real-time applications.

	config DEFAULT_NOOP
		bool "No-op"

endchoice

config DEFAULT_IOSCHED
	string
	default "deadline" if DEFAULT_DEADLINE
	default "row" if DEFAULT_ROW
	default "sio" if DEFAULT_SIO
	default "cfq" if DEFAULT_CFQ
	default "fiops" if DEFAULT_FIOPS
	default "bfq" if DEFAULT_BFQ
	default "noop" if DEFAULT_NOOP
    	default "zen" if DEFAULT_ZEN
	default "sioplus" if DEFAULT_SIOPLUS

endmenu

endif