All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/4] blk-mq: multiqueue I/O scheduler
@ 2017-03-17 22:03 Omar Sandoval
  2017-03-17 22:03 ` [RFC PATCH 1/4] sbitmap: add sbitmap_get_shallow() operation Omar Sandoval
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Omar Sandoval @ 2017-03-17 22:03 UTC (permalink / raw)
  To: linux-block; +Cc: kernel-team

From: Omar Sandoval <osandov@fb.com>

This patch series implements an I/O scheduler for multiqueue devices
combining several techniques: the scalable bitmap library, the new
blk-stats API, and queue depth throttling similar to blk-wbt.

These patches are on top of my earlier blk-stats series [1]. They also
need a fix in Jens' for-linus branch in order to work properly [2].

Patches 1 and 2 implement a new sbitmap operation and patch 3 exports a
required function. Patch 4 implements the new scheduler, named Kyber.

The commit message in patch 4 describes Kyber in detail. The scheduler
employs some heuristics that I've experimented with, but that's probably
the area that needs the most work. I'll be at LSF/MM next week, and
there's currently a lightning talk on the schedule to discuss
improvements and extensions.

A quick test case that demonstrates the scheduler in action:

---
[global]
filename=/dev/nvme0n1
direct=1
runtime=10s
time_based
group_reporting

[writers]
numjobs=40
ioengine=libaio
iodepth=1024
rw=randwrite

[reader]
new_group
rate_iops=1000
ioengine=sync
rw=randread
---

With Kyber set to a target latency of 1 ms, the reader sees latencies of 8 ms
on average. Kyber brings this down to just over 1 ms.

Thanks!

1: http://marc.info/?l=linux-block&m=148952547205774&w=2
2: http://git.kernel.dk/cgit/linux-block/commit/?h=for-linus&id=efd4b81abbe1ac753717f2f10cd3dab8bed6c103

Omar Sandoval (4):
  sbitmap: add sbitmap_get_shallow() operation
  blk-mq: add shallow depth option for blk_mq_get_tag()
  blk-mq: export blk_mq_finish_request()
  blk-mq: introduce Kyber multiqueue I/O scheduler

 block/Kconfig.iosched   |   8 +
 block/Makefile          |   1 +
 block/blk-mq-tag.c      |   5 +-
 block/blk-mq.c          |   1 +
 block/blk-mq.h          |   1 +
 block/elevator.c        |   9 +-
 block/kyber-iosched.c   | 586 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/sbitmap.h |  55 +++++
 lib/sbitmap.c           |  75 ++++++-
 9 files changed, 729 insertions(+), 12 deletions(-)
 create mode 100644 block/kyber-iosched.c

-- 
2.12.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-03-18 20:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-17 22:03 [RFC PATCH 0/4] blk-mq: multiqueue I/O scheduler Omar Sandoval
2017-03-17 22:03 ` [RFC PATCH 1/4] sbitmap: add sbitmap_get_shallow() operation Omar Sandoval
2017-03-17 22:03 ` [RFC PATCH 2/4] blk-mq: add shallow depth option for blk_mq_get_tag() Omar Sandoval
2017-03-17 22:03 ` [RFC PATCH 3/4] blk-mq: export blk_mq_finish_request() Omar Sandoval
2017-03-17 22:03 ` [RFC PATCH 4/4] blk-mq: introduce Kyber multiqueue I/O scheduler Omar Sandoval
2017-03-18  0:55 ` [RFC PATCH 0/4] blk-mq: " Omar Sandoval
2017-03-18 11:14 ` [Lsf] " Hannes Reinecke
2017-03-18 11:15   ` Paolo Valente
2017-03-18 20:18     ` Martin K. Petersen
2017-03-18 15:30   ` Bart Van Assche

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.