From: Ming Lei <ming.lei@redhat.com>
To: John Garry <john.garry@huawei.com>
Cc: Jens Axboe <axboe@kernel.dk>, linux-block@vger.kernel.org
Subject: Re: [PATCH V11 00/12] blk-mq: improvement CPU hotplug
Date: Wed, 13 May 2020 18:37:43 +0800 [thread overview]
Message-ID: <20200513103743.GC2038938@T590> (raw)
In-Reply-To: <2b4b0a75-c9c0-27de-77e8-85ada602b18f@huawei.com>
On Wed, May 13, 2020 at 08:34:01AM +0100, John Garry wrote:
> On 13/05/2020 04:47, Ming Lei wrote:
> > Hi,
> >
> > Thomas mentioned:
> > "
> > That was the constraint of managed interrupts from the very beginning:
> > The driver/subsystem has to quiesce the interrupt line and the associated
> > queue _before_ it gets shutdown in CPU unplug and not fiddle with it
> > until it's restarted by the core when the CPU is plugged in again.
> > "
> >
> > But no drivers or blk-mq do that before one hctx becomes inactive(all
> > CPUs for one hctx are offline), and even it is worse, blk-mq stills tries
> > to run hw queue after hctx is dead, see blk_mq_hctx_notify_dead().
> >
> > This patchset tries to address the issue by two stages:
> >
> > 1) add one new cpuhp state of CPUHP_AP_BLK_MQ_ONLINE
> >
> > - mark the hctx as internal stopped, and drain all in-flight requests
> > if the hctx is going to be dead.
> >
> > 2) re-submit IO in the state of CPUHP_BLK_MQ_DEAD after the hctx becomes dead
> >
> > - steal bios from the request, and resubmit them via generic_make_request(),
> > then these IO will be mapped to other live hctx for dispatch
> >
> > Thanks John Garry for running lots of tests on arm64 with this patchset
> > and co-working on investigating all kinds of issues.
> >
> > Thanks Christoph's review on V7 & V8.
> >
> > Please consider it for v5.8.
> >
> > https://github.com/ming1/linux/commits/v5.7-rc-blk-mq-improve-cpu-hotplug
> >
> > V11:
> > - drop new callback from blk_mq_all_tag_busy_iter, add new helper
> > of blk_mq_all_tag_iter (5/12), as suggested by Bart
> > - fix request allocation hang in case of queue freeze(11/12), as
> > reported by Bart
> >
> > V10:
> > - fix double bio complete in request resubmission(10/11)
> > - add tested-by tag
> >
> > V9:
> > - add Reviewed-by tag
> > - document more on memory barrier usage between getting driver tag
> > and handling cpu offline(7/11)
> > - small code cleanup as suggested by Chritoph(7/11)
> > - rebase against for-5.8/block(1/11, 2/11)
> > V8:
> > - add patches to share code with blk_rq_prep_clone
> > - code re-organization as suggested by Christoph, most of them are
> > in 04/11, 10/11
> > - add reviewed-by tag
> >
> > V7:
> > - fix updating .nr_active in get_driver_tag
> > - add hctx->cpumask check in cpuhp handler
> > - only drain requests which tag is >= 0
> > - pass more aggressive cpuhotplug&io test
> >
> > V6:
> > - simplify getting driver tag, so that we can drain in-flight
> > requests correctly without using synchronize_rcu()
> > - handle re-submission of flush & passthrough request correctly
> >
> > V5:
> > - rename BLK_MQ_S_INTERNAL_STOPPED as BLK_MQ_S_INACTIVE
> > - re-factor code for re-submit requests in cpu dead hotplug handler
> > - address requeue corner case
> >
> > V4:
> > - resubmit IOs in dispatch list in case that this hctx is dead
> >
> > V3:
> > - re-organize patch 2 & 3 a bit for addressing Hannes's comment
> > - fix patch 4 for avoiding potential deadlock, as found by Hannes
> >
> > V2:
> > - patch4 & patch 5 in V1 have been merged to block tree, so remove
> > them
> > - address comments from John Garry and Minwoo
> >
> >
> > *** BLURB HERE ***
>
> :)
>
> So my tested-by tags have been dropped. I'll test again, since the changes
> are non-trivial.
>
> Tip commit of
> https://github.com/ming1/linux/commits/v5.7-rc-blk-mq-improve-cpu-hotplug at
> this moment is b55e97a4
Hi John,
I just sent out V12 of patch 10/12, which can kill the warning on BLK_MQ_REQ_FORCE,
and the warning is harmless actually. And the above git branch has been
updated too.
Please retest and update with us.
Thanks,
Ming
next prev parent reply other threads:[~2020-05-13 10:38 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-13 3:47 [PATCH V11 00/12] blk-mq: improvement CPU hotplug Ming Lei
2020-05-13 3:47 ` [PATCH V11 01/12] block: clone nr_integrity_segments and write_hint in blk_rq_prep_clone Ming Lei
2020-05-13 3:47 ` [PATCH V11 02/12] block: add helper for copying request Ming Lei
2020-05-13 3:47 ` [PATCH V11 03/12] blk-mq: mark blk_mq_get_driver_tag as static Ming Lei
2020-05-13 3:47 ` [PATCH V11 04/12] blk-mq: assign rq->tag in blk_mq_get_driver_tag Ming Lei
2020-05-13 3:47 ` [PATCH V11 05/12] blk-mq: add blk_mq_all_tag_iter Ming Lei
2020-05-13 11:56 ` Christoph Hellwig
2020-05-13 3:47 ` [PATCH V11 06/12] blk-mq: prepare for draining IO when hctx's all CPUs are offline Ming Lei
2020-05-13 6:35 ` Hannes Reinecke
2020-05-13 11:58 ` Christoph Hellwig
2020-05-14 0:33 ` Ming Lei
2020-05-13 3:47 ` [PATCH V11 07/12] blk-mq: stop to handle IO and drain IO before hctx becomes inactive Ming Lei
2020-05-13 11:59 ` Christoph Hellwig
2020-05-14 0:36 ` Ming Lei
2020-05-14 1:12 ` Bart Van Assche
2020-05-14 3:10 ` Ming Lei
2020-05-13 3:47 ` [PATCH V11 08/12] block: add blk_end_flush_machinery Ming Lei
2020-05-13 12:00 ` Christoph Hellwig
2020-05-13 3:48 ` [PATCH V11 09/12] blk-mq: add blk_mq_hctx_handle_dead_cpu for handling cpu dead Ming Lei
2020-05-13 12:06 ` Christoph Hellwig
2020-05-13 3:48 ` [PATCH V11 10/12] block: add request allocation flag of BLK_MQ_REQ_FORCE Ming Lei
2020-05-13 10:34 ` [PATCH V12 " Ming Lei
2020-05-13 3:48 ` [PATCH V11 11/12] blk-mq: re-submit IO in case that hctx is inactive Ming Lei
2020-05-13 9:21 ` John Garry
2020-05-13 12:21 ` Christoph Hellwig
2020-05-13 15:03 ` Bart Van Assche
2020-05-14 0:45 ` Ming Lei
2020-05-14 0:40 ` Ming Lei
2020-05-13 3:48 ` [PATCH V11 12/12] block: deactivate hctx when the hctx is actually inactive Ming Lei
2020-05-13 7:34 ` [PATCH V11 00/12] blk-mq: improvement CPU hotplug John Garry
2020-05-13 10:37 ` Ming Lei [this message]
2020-05-13 11:33 ` John Garry
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=20200513103743.GC2038938@T590 \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=john.garry@huawei.com \
--cc=linux-block@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).