From: Christoph Hellwig <hch@lst.de>
To: Keith Busch <kbusch@meta.com>
Cc: linux-block@vger.kernel.org, axboe@kernel.dk, hch@lst.de,
Keith Busch <kbusch@kernel.org>
Subject: Re: [PATCHv2] block: enable passthrough command statistics
Date: Fri, 4 Oct 2024 07:38:28 +0200 [thread overview]
Message-ID: <20241004053828.GA14377@lst.de> (raw)
In-Reply-To: <20241003153036.411721-1-kbusch@meta.com>
On Thu, Oct 03, 2024 at 08:30:36AM -0700, Keith Busch wrote:
> +What: /sys/block/<disk>/queue/iostats_passthrough
> +Date: October 2024
> +Contact: linux-block@vger.kernel.org
> +Description:
> + [RW] This file is used to control (on/off) the iostats
> + accounting of the disk for passthrough commands.
> +
>
> What: /sys/block/<disk>/queue/logical_block_size
> Date: May 2009
> diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
> index 5463697a84428..d9d7fd441297e 100644
> --- a/block/blk-mq-debugfs.c
> +++ b/block/blk-mq-debugfs.c
> @@ -93,6 +93,7 @@ static const char *const blk_queue_flag_name[] = {
> QUEUE_FLAG_NAME(RQ_ALLOC_TIME),
> QUEUE_FLAG_NAME(HCTX_ACTIVE),
> QUEUE_FLAG_NAME(SQ_SCHED),
> + QUEUE_FLAG_NAME(IOSTATS_PASSTHROUGH),
> };
> #undef QUEUE_FLAG_NAME
>
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 8e75e3471ea58..cf309b39bac04 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -993,13 +993,38 @@ static inline void blk_account_io_done(struct request *req, u64 now)
> }
> }
>
> +static inline bool blk_rq_passthrough_stats(struct request *req)
> +{
> + struct bio *bio = req->bio;
> +
> + if (!blk_queue_passthrough_stat(req->q))
> + return false;
> +
> + /*
> + * Stats are accumulated in the bdev part, so must have one attached to
> + * a bio to do this
> + */
> + if (!bio)
> + return false;
> + if (!bio->bi_bdev)
> + return false;
Missing. At the end of the sentence. But even then this doesn't
explain why not accouting these requests is fine.
- requests without a bio are all those that don't transfer data
- requests with a bio but not bdev are almost all passthrough requests
as far as I can tell, with the only exception of nvme I/O command
passthrough.
I.e. what we have here is a special casing for nvme I/O commands. Maybe
that's fine, but the comments and commit log should leave a clearly
visible trace of that and not confuse the hell out of people trying to
understand the logic later.
> + /*
> + * Ensuring the size is aligned to the block size prevents observing an
> + * invalid sectors stat.
> + */
> + if (blk_rq_bytes(req) & (bdev_logical_block_size(bio->bi_bdev) - 1))
> + return false;
Now this probably won't trigger anyway for the usual workload (although
it might for odd NVMe command sets like KV and the SLM), but I'd expect the
size to be rounded (probably up?) and not entirely dropped.
> + ret = queue_var_store(&ios, page, count);
> + if (ret < 0)
> + return ret;
> +
> + if (ios)
> + blk_queue_flag_set(QUEUE_FLAG_IOSTATS_PASSTHROUGH,
> + disk->queue);
> + else
> + blk_queue_flag_clear(QUEUE_FLAG_IOSTATS_PASSTHROUGH,
> + disk->queue);
Why is this using queue flags now? This isn't really blk-mq internal,
so it should be using queue_limits->flag as pointed out last round.
next prev parent reply other threads:[~2024-10-04 5:38 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-03 15:30 [PATCHv2] block: enable passthrough command statistics Keith Busch
2024-10-03 15:40 ` Jens Axboe
2024-10-03 18:09 ` Jens Axboe
2024-10-04 5:38 ` Christoph Hellwig [this message]
2024-10-04 15:04 ` Keith Busch
2024-10-07 5:56 ` Christoph Hellwig
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=20241004053828.GA14377@lst.de \
--to=hch@lst.de \
--cc=axboe@kernel.dk \
--cc=kbusch@kernel.org \
--cc=kbusch@meta.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