From: Ming Lei <ming.lei@redhat.com>
To: Bart Van Assche <Bart.VanAssche@wdc.com>
Cc: "hch@infradead.org" <hch@infradead.org>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"mgorman@techsingularity.net" <mgorman@techsingularity.net>,
"axboe@fb.com" <axboe@fb.com>,
"loberman@redhat.com" <loberman@redhat.com>,
"paolo.valente@linaro.org" <paolo.valente@linaro.org>
Subject: Re: [PATCH V3 06/14] blk-mq-sched: don't dequeue request until all in ->dispatch are flushed
Date: Fri, 1 Sep 2017 11:02:37 +0800 [thread overview]
Message-ID: <20170901030236.GC16525@ming.t460p> (raw)
In-Reply-To: <1504213218.31872.55.camel@wdc.com>
On Thu, Aug 31, 2017 at 09:00:19PM +0000, Bart Van Assche wrote:
> On Thu, 2017-08-31 at 12:01 +0800, Ming Lei wrote:
> > On Wed, Aug 30, 2017 at 05:11:00PM +0000, Bart Van Assche wrote:
> > > On Sun, 2017-08-27 at 00:33 +0800, Ming Lei wrote:
> > > [ ... ]
> > > Shouldn't blk_mq_sched_dispatch_requests() set BLK_MQ_S_DISPATCH_BUSY just after
> > > the following statement because this statement makes the dispatch list empty?
> >
> > Actually that is what I did in V1.
> >
> > I changed to this way because setting the BUSY flag here will increase
> > the race window a bit, for example, if one request is added to ->dispatch
> > just after it is flushed(), the check on the BUSY bit won't catch this
> > case. Then we can avoid to check both the bit and list_empty_careful(&hctx->dispatch)
> > in blk_mq_sched_dispatch_requests(), so code becomes simpler and more
> > readable if we set the flag simply from the beginning.
>
> Hello Ming,
>
> My understanding is that blk_mq_sched_dispatch_requests() will only work
> correctly if the code that sets the DISPATCH_BUSY flag does that after having
> inserted one or more elements in the dispatch list. Although x86 CPUs do not
> reorder store operations I think that the functions that set the DISPATCH_BUSY
> flag need a memory barrier these two store operations. I'm referring to the
> blk_mq_sched_bypass_insert(), blk_mq_dispatch_wait_add() and
> blk_mq_hctx_notify_dead() functions.
That is a good question, but it has been answered by the comment
before checking the DISPATCH_BUSY state in blk_mq_sched_dispatch_requests():
/*
* If DISPATCH_BUSY is set, that means hw queue is busy
* and requests in the list of hctx->dispatch need to
* be flushed first, so return early.
*
* Wherever DISPATCH_BUSY is set, blk_mq_run_hw_queue()
* will be run to try to make progress, so it is always
* safe to check the state here.
*/
Suppose the two writes are reordered, sooner or latter, the
list_empty_careful(&hctx->dispatch) will be observed, and
will dispatch request from this hw queue after '->dispatch'
is flushed.
Since now the setting of DISPATCH_BUSY requires to hold
hctx->lock, we should avoid to add barrier there.
>
> > > > + * too small, no need to worry about performance
> > >
> > > ^^^
> > > The word "too" seems extraneous to me in this sentence.
> >
> > Maybe 'extremely' is better, or just remove it?
>
> If the word "too" would be removed I think the comment is still clear.
OK.
--
Ming
next prev parent reply other threads:[~2017-09-01 3:02 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-26 16:33 [PATCH V3 00/14] blk-mq-sched: improve SCSI-MQ performance Ming Lei
2017-08-26 16:33 ` [PATCH V3 01/14] blk-mq-sched: fix scheduler bad performance Ming Lei
2017-08-26 16:33 ` [PATCH V3 02/14] sbitmap: introduce __sbitmap_for_each_set() Ming Lei
2017-08-30 15:55 ` Bart Van Assche
2017-08-31 3:33 ` Ming Lei
2017-08-26 16:33 ` [PATCH V3 03/14] blk-mq: introduce blk_mq_dispatch_rq_from_ctx() Ming Lei
2017-08-30 16:01 ` Bart Van Assche
2017-08-26 16:33 ` [PATCH V3 04/14] blk-mq-sched: move actual dispatching into one helper Ming Lei
2017-08-26 16:33 ` [PATCH V3 05/14] blk-mq-sched: improve dispatching from sw queue Ming Lei
2017-08-30 16:34 ` Bart Van Assche
2017-08-31 3:43 ` Ming Lei
2017-08-31 20:36 ` Bart Van Assche
2017-08-26 16:33 ` [PATCH V3 06/14] blk-mq-sched: don't dequeue request until all in ->dispatch are flushed Ming Lei
2017-08-30 17:11 ` Bart Van Assche
2017-08-31 4:01 ` Ming Lei
2017-08-31 21:00 ` Bart Van Assche
2017-09-01 3:02 ` Ming Lei [this message]
2017-09-01 18:19 ` Bart Van Assche
2017-08-26 16:33 ` [PATCH V3 07/14] blk-mq-sched: introduce blk_mq_sched_queue_depth() Ming Lei
2017-08-26 16:33 ` [PATCH V3 08/14] blk-mq-sched: use q->queue_depth as hint for q->nr_requests Ming Lei
2017-08-26 16:33 ` [PATCH V3 09/14] block: introduce rqhash helpers Ming Lei
2017-08-26 16:33 ` [PATCH V3 10/14] block: move actual bio merge code into __elv_merge Ming Lei
2017-08-26 16:33 ` [PATCH V3 11/14] block: add check on elevator for supporting bio merge via hashtable from blk-mq sw queue Ming Lei
2017-08-26 16:33 ` [PATCH V3 12/14] block: introduce .last_merge and .hash to blk_mq_ctx Ming Lei
2017-08-26 16:33 ` [PATCH V3 13/14] blk-mq-sched: refactor blk_mq_sched_try_merge() Ming Lei
2017-08-30 17:17 ` Bart Van Assche
2017-08-31 4:03 ` Ming Lei
2017-08-26 16:33 ` [PATCH V3 14/14] blk-mq: improve bio merge from blk-mq sw queue Ming Lei
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=20170901030236.GC16525@ming.t460p \
--to=ming.lei@redhat.com \
--cc=Bart.VanAssche@wdc.com \
--cc=axboe@fb.com \
--cc=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=loberman@redhat.com \
--cc=mgorman@techsingularity.net \
--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