From: Jens Axboe <axboe@fb.com>
To: <axboe@kernel.dk>, <linux-block@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Cc: <paolo.valente@linaro.org>, <osandov@fb.com>
Subject: [PATCHSET v3] blk-mq scheduling framework
Date: Wed, 14 Dec 2016 22:26:01 -0700 [thread overview]
Message-ID: <1481779568-10642-1-git-send-email-axboe@fb.com> (raw)
This is version 3 of the blk-mq scheduling framework. Version 2
was posted here:
https://marc.info/?l=linux-block&m=148122805026762&w=2
It's fully stable. In fact I'm running it on my laptop [1]. That may
or may not have been part of a dare. In any case, it's been stable
on that too, and has survived lengthy testing on dedicated test
boxes.
[1] $ cat /sys/block/nvme0n1/queue/scheduler
[mq-deadline] none
I'm still mentally debating whether to shift this over to have
duplicate request tags, one for the scheduler and one for the issue
side. We run into various issues if we do that, but we also get
rid of the shadow request field copying. I think both approaches
have their downsides. I originally considered both, and though that
the shadow request would potentially be the cleanest.
I've rebased this against Linus master branch, since a bunch of
the prep patches are now in, and the general block changes are in
as well.
The patches can be pulled here:
git://git.kernel.dk/linux-block blk-mq-sched.3
Changes since v2:
- Fix the Kconfig single/multi queue sched entry. Suggested by Bart.
- Move the queue ref put into the failure path of the request getting,
so the caller doesn't have to know about it. Suggested by Bart.
- Add support for IO context management. Needed for the BFQ port.
- Change the anonymous elevator ops union to a named one, since
old (looking at you, gcc 4.4) compilers don't support named
initialization of anon unions.
- Constify the blk_mq_ops structure pointers.
- Add generic merging code, so mq-deadline (and others) don't have to
handle/duplicate that.
- Switched the dispatch hook to list based, so we can move more entries
at the time, if we want/need to. From Omar.
- Add support for schedulers to continue using the software queues.
From Omar.
- Ensure that it works with blk-wbt.
- Fix a failure case if we fail registering the MQ elevator. We'd
fall back to trying noop, which we'd find, but that would not
work for MQ devices. Fall back to 'none' instead.
- Verified queue ref management.
- Fixed a bunch of bugs, and added a bunch of cleanups.
block/Kconfig.iosched | 37 ++
block/Makefile | 3
block/blk-core.c | 23 -
block/blk-exec.c | 3
block/blk-flush.c | 7
block/blk-ioc.c | 8
block/blk-merge.c | 4
block/blk-mq-sched.c | 394 +++++++++++++++++++++++++++++
block/blk-mq-sched.h | 192 ++++++++++++++
block/blk-mq-tag.c | 1
block/blk-mq.c | 226 +++++++---------
block/blk-mq.h | 28 ++
block/blk.h | 26 +
block/cfq-iosched.c | 2
block/deadline-iosched.c | 2
block/elevator.c | 229 ++++++++++++----
block/mq-deadline.c | 638 +++++++++++++++++++++++++++++++++++++++++++++++
block/noop-iosched.c | 2
drivers/nvme/host/pci.c | 1
include/linux/blk-mq.h | 6
include/linux/blkdev.h | 2
include/linux/elevator.h | 33 ++
22 files changed, 1635 insertions(+), 232 deletions(-)
--
Jens Axboe
next reply other threads:[~2016-12-15 6:58 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-15 5:26 Jens Axboe [this message]
2016-12-15 5:26 ` [PATCH 1/7] block: move existing elevator ops to union Jens Axboe
2016-12-15 5:26 ` [PATCH 2/7] blk-mq: make mq_ops a const pointer Jens Axboe
2016-12-15 16:23 ` Bart Van Assche
2016-12-15 5:26 ` [PATCH 3/7] block: move rq_ioc() to blk.h Jens Axboe
2016-12-15 5:26 ` [PATCH 4/7] blk-mq: export some helpers we need to the scheduling framework Jens Axboe
2016-12-15 5:26 ` [PATCH 5/7] blk-mq-sched: add framework for MQ capable IO schedulers Jens Axboe
2016-12-15 19:29 ` Omar Sandoval
2016-12-15 20:14 ` Jens Axboe
2016-12-15 21:44 ` Jens Axboe
2016-12-15 5:26 ` [PATCH 6/7] mq-deadline: add blk-mq adaptation of the deadline IO scheduler Jens Axboe
2016-12-15 5:26 ` [PATCH 7/7] blk-mq-sched: allow setting of default " Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1481779568-10642-1-git-send-email-axboe@fb.com \
--to=axboe@fb.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=osandov@fb.com \
--cc=paolo.valente@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome