diff options
| author | Shaohua Li <shaohua.li@intel.com> | 2013-10-20 22:42:38 -0500 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-09-13 13:13:13 +0200 |
| commit | c8a191d4fcdf0881a2a36d7b38f80eb7dc9897cb (patch) | |
| tree | f39d1e33e5b370c350ed2b8a43bf9443d2226081 /block/Kconfig.iosched | |
| parent | 1000d8e24f8c9b991469ea90303f769b28636344 (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.iosched | 11 |
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 |
