From: Mike Snitzer <snitzer@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Ming Lei <tom.leiming@gmail.com>,
hch@lst.de, dm-devel@redhat.com, linux-block@vger.kernel.org
Subject: Re: [for-4.16 PATCH v4-mike 2/2] blk-mq: issue request directly for blk_insert_cloned_request
Date: Tue, 16 Jan 2018 13:16:18 -0500 [thread overview]
Message-ID: <20180116181618.GA31767@redhat.com> (raw)
In-Reply-To: <4ba90f92-82db-07de-59b8-f9d7d113d4dc@kernel.dk>
On Tue, Jan 16 2018 at 12:41pm -0500,
Jens Axboe <axboe@kernel.dk> wrote:
> On 1/16/18 10:38 AM, Mike Snitzer wrote:
> > On Tue, Jan 16 2018 at 12:20pm -0500,
> > Jens Axboe <axboe@kernel.dk> wrote:
> >
> >> On 1/16/18 8:01 AM, Mike Snitzer wrote:
> >>> From: Ming Lei <ming.lei@redhat.com>
> >>>
> >>> blk_insert_cloned_request() is called in fast path of dm-rq driver, and
> >>> in this function we append request to hctx->dispatch_list of the underlying
> >>> queue directly.
> >>>
> >>> 1) This way isn't efficient enough because hctx lock is always required
> >>>
> >>> 2) With blk_insert_cloned_request(), we bypass underlying queue's IO
> >>> scheduler totally, and depend on DM rq driver to do IO schedule
> >>> completely. But DM rq driver can't get underlying queue's dispatch
> >>> feedback at all, and this information is extreamly useful for IO merge.
> >>> Without that IO merge can't be done basically by blk-mq, which causes
> >>> very bad sequential IO performance.
> >>>
> >>> Fix this by having blk_insert_cloned_request() make use of
> >>> blk_mq_try_issue_directly() via blk_mq_request_direct_issue().
> >>> blk_mq_request_direct_issue() allows a request to be dispatched to be
> >>> issue directly to the underlying queue and provides dispatch result to
> >>> dm-rq and blk-mq.
> >>>
> >>> With this, the DM's blk-mq sequential IO performance is vastly
> >>> improved (as much as 3X in mpath/virtio-scsi testing).
> >>
> >> This still feels pretty hacky...
> >>
> >>> diff --git a/block/blk-mq.c b/block/blk-mq.c
> >>> index 55f3a27fb2e6..3168a13cb012 100644
> >>> --- a/block/blk-mq.c
> >>> +++ b/block/blk-mq.c
> >>> @@ -1706,6 +1706,12 @@ static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
> >>> blk_qc_t new_cookie;
> >>> blk_status_t ret = BLK_STS_OK;
> >>> bool run_queue = true;
> >>> + /*
> >>> + * If @cookie is NULL do not insert the request, this mode is used
> >>> + * by blk_insert_cloned_request() via blk_mq_request_direct_issue()
> >>> + */
> >>> + bool dispatch_only = !cookie;
> >>> + bool need_insert = false;
> >>
> >> Overloading 'cookie' to also mean this isn't very future proof or solid.
> >
> > It enables the existing interface to be used without needing to prop up
> > something else that extends out to the edge (blk_insert_cloned_request).
>
> Doesn't really matter if the end result is too ugly/fragile to live.
Agreed.
> >> And now __blk_mq_try_issue_directly() is pretty much a mess. Feels like
> >> it should be split in two, where the other half would do the actual
> >> insert. Then let the caller do it, if we could not issue directly. That
> >> would be a lot more solid and easier to read.
> >
> > That is effectively what Ming's variant did (by splitting out the issue
> > to a helper).
> >
> > BUT I'll see what I can come up with...
>
> Maybe I missed that version, there were many rapid fire versions posted.
> Please just take your time and get it right, that's much more important.
No trying to rush, going over it carefully now.
Think I have a cleaner way forward.
Thanks,
Mike
prev parent reply other threads:[~2018-01-16 18:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-15 16:58 [PATCH V4 0/3] blk-mq: issue request directly for blk_insert_cloned_request Ming Lei
2018-01-15 16:58 ` [PATCH V4 1/3] blk-mq: move actual issue into one helper Ming Lei
2018-01-15 17:15 ` Mike Snitzer
2018-01-16 1:36 ` Ming Lei
2018-01-15 17:29 ` Jens Axboe
2018-01-15 19:41 ` Mike Snitzer
2018-01-16 1:43 ` Ming Lei
2018-01-16 1:45 ` Mike Snitzer
2018-01-16 1:40 ` Ming Lei
2018-01-16 4:05 ` Ming Lei
2018-01-15 16:58 ` [PATCH V4 2/3] blk-mq: return dispatch result to caller in blk_mq_try_issue_directly Ming Lei
2018-01-15 16:58 ` [PATCH V4 3/3] blk-mq: issue request directly for blk_insert_cloned_request Ming Lei
2018-01-16 1:34 ` Mike Snitzer
2018-01-15 17:43 ` [PATCH V4 0/3] " Mike Snitzer
2018-01-16 1:57 ` Ming Lei
2018-01-16 15:01 ` [for-4.16 PATCH v4-mike 1/2] blk-mq: return dispatch result from blk_mq_try_issue_directly Mike Snitzer
2018-01-16 15:01 ` [for-4.16 PATCH v4-mike 2/2] blk-mq: issue request directly for blk_insert_cloned_request Mike Snitzer
2018-01-16 16:41 ` Mike Snitzer
2018-01-16 17:20 ` Jens Axboe
2018-01-16 17:38 ` Mike Snitzer
2018-01-16 17:41 ` Jens Axboe
2018-01-16 18:16 ` Mike Snitzer [this message]
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=20180116181618.GA31767@redhat.com \
--to=snitzer@redhat.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@redhat.com \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=tom.leiming@gmail.com \
/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).