aboutsummaryrefslogtreecommitdiff
path: root/block/Kconfig.iosched
diff options
context:
space:
mode:
authorShaohua Li <shaohua.li@intel.com>2013-10-20 22:42:38 -0500
committerMoyster <oysterized@gmail.com>2016-09-13 13:13:13 +0200
commitc8a191d4fcdf0881a2a36d7b38f80eb7dc9897cb (patch)
treef39d1e33e5b370c350ed2b8a43bf9443d2226081 /block/Kconfig.iosched
parent1000d8e24f8c9b991469ea90303f769b28636344 (diff)
block: fiops ioscheduler core
FIOPS (Fair IOPS) ioscheduler is IOPS based ioscheduler, so only targets for drive without I/O seek. It's quite similar like CFQ, but the dispatch decision is made according to IOPS instead of slice. The algorithm is simple. Drive has a service tree, and each task lives in the tree. The key into the tree is called vios (virtual I/O). Every request has vios, which is calculated according to its ioprio, request size and so on. Task's vios is the sum of vios of all requests it dispatches. FIOPS always selects task with minimum vios in the service tree and let the task dispatch request. The dispatched request's vios is then added to the task's vios and the task is repositioned in the sevice tree. Unlike CFQ, FIOPS doesn't have separate sync/async queues, because with I/O less writeback, usually a task can only dispatch either sync or async requests. Bias read or write request can still be done with read/write scale. One issue is if workload iodepth is lower than drive queue_depth, IOPS share of a task might not be strictly according to its priority, request Bias read or write request can still be done with read/write scale. One issue is if workload iodepth is lower than drive queue_depth, IOPS share of a task might not be strictly according to its priority, request size and so on. In this case, the drive is in idle actually. Solving the problem need make drive idle, so impact performance. I believe CFQ isn't completely fair between tasks in such case too. Change-Id: I1f86b964ada1e06ac979899ca05f1082d0d8228d Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Diffstat (limited to 'block/Kconfig.iosched')
-rw-r--r--block/Kconfig.iosched11
1 files changed, 11 insertions, 0 deletions
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched
index f3416a344..d2f21031e 100644
--- a/block/Kconfig.iosched
+++ b/block/Kconfig.iosched
@@ -78,6 +78,13 @@ config IOSCHED_SIOPLUS
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.
choice
prompt "Default I/O scheduler"
@@ -111,6 +118,9 @@ choice
config DEFAULT_ZEN
bool "ZEN" if IOSCHED_ZEN=y
+ config DEFAULT_FIOPS
+ bool "FIOPS" if IOSCHED_FIOPS=y
+
config DEFAULT_NOOP
bool "No-op"
@@ -122,6 +132,7 @@ config DEFAULT_IOSCHED
default "row" if DEFAULT_ROW
default "sio" if DEFAULT_SIO
default "cfq" if DEFAULT_CFQ
+ default "fiops" if DEFAULT_FIOPS
default "noop" if DEFAULT_NOOP
default "zen" if DEFAULT_ZEN
default "sioplus" if DEFAULT_SIOPLUS