From: Niklas Cassel <Niklas.Cassel@wdc.com>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: "fio@vger.kernel.org" <fio@vger.kernel.org>,
Vincent Fu <vincentfu@gmail.com>, Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH 4/4] stats: Add hint information to per priority level stats
Date: Tue, 18 Jul 2023 15:45:26 +0000 [thread overview]
Message-ID: <ZLazkxGhtZkCDPZz@x1-carbon> (raw)
In-Reply-To: <20230705221302.430678-5-dlemoal@kernel.org>
On Thu, Jul 06, 2023 at 07:13:02AM +0900, Damien Le Moal wrote:
> From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
>
> Introduce the OS dependent ioprio_hint() macro to extract an IO
> priority hint from an ioprio value. This macro defaults to always
> returning 0 for OSes that do not support IO priority hints.
>
> The json and standard output stats are modified to display the hint
> value together with the priority class and level.
>
> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
> ---
> os/os-linux.h | 4 ++++
> os/os.h | 3 +++
> stat.c | 10 +++++++---
> 3 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/os/os-linux.h b/os/os-linux.h
> index 6f241d09..b9c07891 100644
> --- a/os/os-linux.h
> +++ b/os/os-linux.h
> @@ -150,6 +150,10 @@ static inline int ioprio_value(int ioprio_class, int ioprio, int ioprio_hint)
> ioprio;
> }
>
> +#define ioprio_class(ioprio) ((ioprio) >> IOPRIO_CLASS_SHIFT)
> +#define ioprio_hint(ioprio) (((ioprio) >> IOPRIO_HINT_SHIFT) & 0x3ff)
> +#define ioprio(ioprio) ((ioprio) & 7)
1)
ioprio_class() and ioprio() are already defined in os/os-linux.h,
so if you add these again, we will have duplicates in os/os-linux.h.
You probably only want to add ioprio_hint(), after the existing defines.
2)
Perhaps you can also change:
#define ioprio(ioprio) ((ioprio) & 7)
to
#define ioprio(ioprio) ((ioprio) & IOPRIO_MAX_PRIO)
and
#define ioprio_hint(ioprio) (((ioprio) >> IOPRIO_HINT_SHIFT) & 0x3ff)
to
#define ioprio_hint(ioprio) (((ioprio) >> IOPRIO_HINT_SHIFT) & IOPRIO_MAX_PRIO_HINT)
so we avoid magic numbers.
> +
> static inline bool ioprio_value_is_class_rt(unsigned int priority)
> {
> return (priority >> IOPRIO_CLASS_SHIFT) == IOPRIO_CLASS_RT;
> diff --git a/os/os.h b/os/os.h
> index 2217d5f8..0f182324 100644
> --- a/os/os.h
> +++ b/os/os.h
> @@ -120,6 +120,9 @@ extern int fio_cpus_split(os_cpu_mask_t *mask, unsigned int cpu);
> #define ioprio_value_is_class_rt(prio) (false)
> #define IOPRIO_MIN_PRIO_CLASS 0
> #define IOPRIO_MAX_PRIO_CLASS 0
> +#define ioprio_hint(prio) 0
> +#define IOPRIO_MIN_PRIO_HINT 0
> +#define IOPRIO_MAX_PRIO_HINT 0
3)
The MIN_ and MAX_ define should probably go to patch 1/4,
which added the same for os/os-linux.h.
> #endif
> #ifndef FIO_HAVE_IOPRIO
> #define ioprio_value(prioclass, prio, priohint) (0)
> diff --git a/stat.c b/stat.c
> index 015b8e28..4f943602 100644
> --- a/stat.c
> +++ b/stat.c
> @@ -597,10 +597,11 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
> continue;
>
> snprintf(buf, sizeof(buf),
> - "%s prio %u/%u",
> + "%s prio %u/%u/%u",
> clat_type,
> ioprio_class(ts->clat_prio[ddir][i].ioprio),
> - ioprio(ts->clat_prio[ddir][i].ioprio));
> + ioprio(ts->clat_prio[ddir][i].ioprio),
> + ioprio_hint(ts->clat_prio[ddir][i].ioprio));
> display_lat(buf, min, max, mean, dev, out);
> }
> }
> @@ -640,10 +641,11 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
> continue;
>
> snprintf(prio_name, sizeof(prio_name),
> - "%s prio %u/%u (%.2f%% of IOs)",
> + "%s prio %u/%u/%u (%.2f%% of IOs)",
> clat_type,
> ioprio_class(ts->clat_prio[ddir][i].ioprio),
> ioprio(ts->clat_prio[ddir][i].ioprio),
> + ioprio_hint(ts->clat_prio[ddir][i].ioprio),
> 100. * (double) prio_samples / (double) samples);
> show_clat_percentiles(ts->clat_prio[ddir][i].io_u_plat,
> prio_samples, ts->percentile_list,
> @@ -1522,6 +1524,8 @@ static void add_ddir_status_json(struct thread_stat *ts,
> ioprio_class(ts->clat_prio[ddir][i].ioprio));
> json_object_add_value_int(obj, "prio",
> ioprio(ts->clat_prio[ddir][i].ioprio));
> + json_object_add_value_int(obj, "priohint",
> + ioprio_hint(ts->clat_prio[ddir][i].ioprio));
>
> tmp_object = add_ddir_lat_json(ts,
> ts->clat_percentiles | ts->lat_percentiles,
> --
> 2.41.0
>
With the three nits fixed:
Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com>
next prev parent reply other threads:[~2023-07-18 15:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-05 22:12 [PATCH 0/4] Add support for IO priority hints Damien Le Moal
2023-07-05 22:12 ` [PATCH 1/4] os-linux: add initial " Damien Le Moal
2023-07-18 15:44 ` Niklas Cassel
2023-07-05 22:13 ` [PATCH 2/4] options: add priohint option Damien Le Moal
2023-07-18 15:44 ` Niklas Cassel
2023-07-18 15:55 ` Niklas Cassel
2023-07-05 22:13 ` [PATCH 3/4] cmdprio: Add support for per I/O priority hint Damien Le Moal
2023-07-18 15:45 ` Niklas Cassel
2023-07-05 22:13 ` [PATCH 4/4] stats: Add hint information to per priority level stats Damien Le Moal
2023-07-18 15:45 ` Niklas Cassel [this message]
2023-07-06 8:43 ` [PATCH 0/4] Add support for IO priority hints Avri Altman
2023-07-06 8:57 ` Damien Le Moal
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=ZLazkxGhtZkCDPZz@x1-carbon \
--to=niklas.cassel@wdc.com \
--cc=axboe@kernel.dk \
--cc=dlemoal@kernel.org \
--cc=fio@vger.kernel.org \
--cc=vincentfu@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 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.