From: Bart Van Assche <bvanassche@acm.org>
To: Ming Lei <ming.lei@redhat.com>,
"jianchao.wang" <jianchao.w.wang@oracle.com>
Cc: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org,
James Smart <james.smart@broadcom.com>,
Bart Van Assche <bart.vanassche@wdc.com>,
linux-scsi@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Christoph Hellwig <hch@lst.de>,
"James E . J . Bottomley" <jejb@linux.vnet.ibm.com>
Subject: Re: [PATCH 0/5] blk-mq: allow to run queue if queue refcount is held
Date: Tue, 02 Apr 2019 10:53:00 -0700 [thread overview]
Message-ID: <1554227580.118779.158.camel@acm.org> (raw)
In-Reply-To: <20190402110558.GA12221@ming.t460p>
On Tue, 2019-04-02 at 19:05 +0800, Ming Lei wrote:
> On Tue, Apr 02, 2019 at 04:07:04PM +0800, jianchao.wang wrote:
> > percpu_ref is born for fast path.
> > There are some drivers use it in completion path, such as scsi, does it really
> > matter for this kind of device ? If yes, I guess we should remove blk_mq_run_hw_queues
> > which is the really bulk and depend on hctx restart mechanism.
>
> Yes, it is designed for fast path, but it doesn't mean percpu_ref
> hasn't any cost. blk_mq_run_hw_queues() is called for all blk-mq devices,
> includes the fast NVMe.
I think the overhead of adding a percpu_ref_get/put pair is acceptable for
SCSI drivers. The NVMe driver doesn't call blk_mq_run_hw_queues() directly.
Additionally, I don't think that any of the blk_mq_run_hw_queues() calls from
the block layer matter for the fast path code in the NVMe driver. In other
words, adding a percpu_ref_get/put pair in blk_mq_run_hw_queues() shouldn't
affect the performance of the NVMe driver.
> Also:
>
> It may not be enough to just grab the percpu_ref for blk_mq_run_hw_queues
> only, given the idea is to use the percpu_ref to protect hctx's resources.
>
> There are lots of uses on 'hctx', such as other exported blk-mq APIs.
> If this approach were chosen, we may have to audit other blk-mq APIs,
> cause they might be called after queue is frozen too.
The only blk_mq_hw_ctx user I have found so far that needs additional
protection is the q->mq_ops->poll() call in blk_poll(). However, that is not
a new issue. Functions like nvme_poll() access data structures (NVMe
completion queue) that shouldn't be accessed while blk_cleanup_queue() is in
progress. If blk_poll() is modified such that it becomes safe to call that
function while blk_cleanup_queue() is in progress then blk_poll() won't
access any hardware queue that it shouldn't access.
Bart.
next prev parent reply other threads:[~2019-04-02 17:53 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-31 3:09 [PATCH 0/5] blk-mq: allow to run queue if queue refcount is held Ming Lei
2019-03-31 3:09 ` [PATCH 1/5] blk-mq: re-organize blk_mq_exit_hctx() into two parts Ming Lei
2019-04-01 1:40 ` Dongli Zhang
2019-04-01 2:06 ` Ming Lei
2019-03-31 3:09 ` [PATCH 2/5] blk-mq: re-organize blk_mq_exit_hw_queues() " Ming Lei
2019-03-31 3:09 ` [PATCH 3/5] blk-mq: free hw queues in queue's release handler Ming Lei
2019-03-31 3:09 ` [PATCH 4/5] block: don't drain in-progress dispatch in blk_cleanup_queue() Ming Lei
2019-04-01 1:50 ` Dongli Zhang
2019-04-01 2:08 ` Ming Lei
2019-03-31 3:09 ` [PATCH 5/5] SCSI: don't grab queue usage counter before run queue Ming Lei
2019-04-01 1:53 ` Dongli Zhang
2019-03-31 15:27 ` [PATCH 0/5] blk-mq: allow to run queue if queue refcount is held Bart Van Assche
2019-04-01 2:00 ` Ming Lei
2019-04-01 2:39 ` Bart Van Assche
2019-04-01 2:44 ` jianchao.wang
2019-04-02 18:07 ` Bart Van Assche
2019-04-01 2:52 ` Ming Lei
2019-04-01 3:25 ` jianchao.wang
2019-04-01 3:28 ` Ming Lei
2019-04-01 9:19 ` jianchao.wang
2019-04-01 10:03 ` Ming Lei
2019-04-02 2:02 ` jianchao.wang
2019-04-02 2:55 ` Ming Lei
2019-04-02 8:07 ` jianchao.wang
2019-04-02 11:05 ` Ming Lei
2019-04-02 17:53 ` Bart Van Assche [this message]
2019-04-03 3:20 ` Ming Lei
2019-04-03 8:29 ` Ming Lei
2019-04-03 8:43 ` Ming Lei
2019-04-02 18:11 ` Bart Van Assche
2019-04-03 3:24 ` Ming Lei
2019-04-01 5:05 ` Dongli Zhang
2019-04-01 5:16 ` Ming Lei
2019-04-01 5:30 ` Dongli Zhang
2019-04-01 7:15 ` Ming Lei
2019-04-02 2:10 ` Dongli Zhang
2019-04-02 2:20 ` Ming Lei
2019-04-01 3:27 ` Ming Lei
2019-04-01 3:32 ` jianchao.wang
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=1554227580.118779.158.camel@acm.org \
--to=bvanassche@acm.org \
--cc=axboe@kernel.dk \
--cc=bart.vanassche@wdc.com \
--cc=hch@lst.de \
--cc=james.smart@broadcom.com \
--cc=jejb@linux.vnet.ibm.com \
--cc=jianchao.w.wang@oracle.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=ming.lei@redhat.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 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.