From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: Jens Axboe <axboe@kernel.dk>,
Bart Van Assche <bvanassche@acm.org>,
"Martin K . Petersen" <martin.petersen@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>, Hannes Reinecke <hare@suse.de>,
linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org,
linux-block@vger.kernel.org,
Niklas Cassel <niklas.cassel@wdc.com>
Subject: Re: [PATCH v4 02/19] block: introduce ioprio hints
Date: Thu, 16 Mar 2023 11:00:30 +0900 [thread overview]
Message-ID: <c91be70e-14a9-7ad6-ba7c-975a640a34d3@opensource.wdc.com> (raw)
In-Reply-To: <20230309215516.3800571-3-niklas.cassel@wdc.com>
On 2023/03/10 6:54, Niklas Cassel wrote:
> From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
>
> IO priorities currently only use 6-bits of the 16-bits ioprio value: the
> 3-upper bits are used to define up to 8 priority classes (4 of which are
> valid) and the 3 lower bits of the value are used to define a priority
> level for the real-time and best-effort class.
>
> The remaining 10-bits between the IO priority class and level are
> unused, and in fact, cannot be used by the user as doing so would
> either result in the value being completely ignored, or in an error
> returned by ioprio_check_cap().
>
> Use these 10-bits of an ioprio value to allow a user to specify IO
> hints. An IO hint is defined as a 10-bits value, allowing up to 1023
> different hints to be specified, with the value 0 being reserved as the
> "no hint" case. An IO hint can apply to any IO that specifies a valid
> priority class other than NONE, regardless of the IO priority level
> specified.
>
> To do so, the macros IOPRIO_PRIO_HINT() and IOPRIO_PRIO_VALUE_HINT() are
> introduced in include/uapi/linux/ioprio.h to respectively allow a user
> to get and set a hint in an ioprio value.
>
> To support the ATA and SCSI command duration limits feature, 7 hints
> are defined: IOPRIO_HINT_DEV_DURATION_LIMIT_1 to
> IOPRIO_HINT_DEV_DURATION_LIMIT_7, allowing a user to specify which
> command duration limit descriptor should be applied to the commands
> serving an IO. Specifying these hints has for now no effect whatsoever
> if the target block devices do not support the command duration limits
> feature. However, in the future, block IO schedulers can be modified to
> optimize IO issuing order based on these hints, even for devices that
> do not support the command duration limits feature.
>
> Given that the 7 duration limits hints defined have no effect on any
> block layer component, the actual definition of the duration limits
> implied by these hints remains at the device level.
>
> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
> Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Jens, Martin,
Any thoughts on this new interface ?
Bart,
I would like to hear your opinion as well.
> ---
> include/uapi/linux/ioprio.h | 49 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/include/uapi/linux/ioprio.h b/include/uapi/linux/ioprio.h
> index 4444b4e4fdad..607c7617b9d2 100644
> --- a/include/uapi/linux/ioprio.h
> +++ b/include/uapi/linux/ioprio.h
> @@ -58,4 +58,53 @@ enum {
> #define IOPRIO_NORM 4
> #define IOPRIO_BE_NORM IOPRIO_NORM
>
> +/*
> + * The 10-bits between the priority class and the priority level are used to
> + * optionally define IO hints for any combination of IO priority class and
> + * level. Depending on the kernel configuration, IO scheduler being used and
> + * the target IO device being used, hints can influence how IOs are processed
> + * without affecting the IO scheduling ordering defined by the IO priority
> + * class and level.
> + */
> +#define IOPRIO_HINT_SHIFT IOPRIO_LEVEL_NR_BITS
> +#define IOPRIO_HINT_NR_BITS 10
> +#define IOPRIO_NR_HINTS (1 << IOPRIO_HINT_NR_BITS)
> +#define IOPRIO_HINT_MASK (IOPRIO_NR_HINTS - 1)
> +#define IOPRIO_PRIO_HINT(ioprio) \
> + (((ioprio) >> IOPRIO_HINT_SHIFT) & IOPRIO_HINT_MASK)
> +
> +/*
> + * Alternate macro for IOPRIO_PRIO_VALUE() to define an IO priority with
> + * a class, level and hint.
> + */
> +#define IOPRIO_PRIO_VALUE_HINT(class, level, hint) \
> + ((((class) & IOPRIO_CLASS_MASK) << IOPRIO_CLASS_SHIFT) | \
> + (((hint) & IOPRIO_HINT_MASK) << IOPRIO_HINT_SHIFT) | \
> + ((level) & IOPRIO_LEVEL_MASK))
> +
> +/*
> + * IO hints.
> + */
> +enum {
> + /* No hint */
> + IOPRIO_HINT_NONE = 0,
> +
> + /*
> + * Device command duration limits: indicate to the device a desired
> + * duration limit for the commands that will be used to process an IO.
> + * These will currently only be effective for SCSI and ATA devices that
> + * support the command duration limits feature. If this feature is
> + * enabled, then the commands issued to the device to process an IO with
> + * one of these hints set will have the duration limit index (dld field)
> + * set to the value of the hint.
> + */
> + IOPRIO_HINT_DEV_DURATION_LIMIT_1 = 1,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_2 = 2,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_3 = 3,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_4 = 4,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_5 = 5,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_6 = 6,
> + IOPRIO_HINT_DEV_DURATION_LIMIT_7 = 7,
> +};
> +
> #endif /* _UAPI_LINUX_IOPRIO_H */
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2023-03-16 2:00 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-09 21:54 [PATCH v4 00/19] Add Command Duration Limits support Niklas Cassel
2023-03-09 21:54 ` [PATCH v4 01/19] ioprio: cleanup interface definition Niklas Cassel
2023-03-16 17:58 ` Bart Van Assche
2023-03-16 18:09 ` Bart Van Assche
2023-03-09 21:54 ` [PATCH v4 02/19] block: introduce ioprio hints Niklas Cassel
2023-03-16 2:00 ` Damien Le Moal [this message]
2023-03-16 18:41 ` Bart Van Assche
2023-03-17 9:23 ` Niklas Cassel
2023-03-17 16:56 ` Bart Van Assche
2023-03-09 21:54 ` [PATCH v4 03/19] block: introduce BLK_STS_DURATION_LIMIT Niklas Cassel
2023-03-09 21:54 ` [PATCH v4 04/19] scsi: core: allow libata to complete successful commands via EH Niklas Cassel
2023-03-09 21:54 ` [PATCH v4 05/19] scsi: rename and move get_scsi_ml_byte() Niklas Cassel
2023-03-09 21:54 ` [PATCH v4 06/19] scsi: support retrieving sub-pages of mode pages Niklas Cassel
2023-03-09 21:54 ` [PATCH v4 07/19] scsi: support service action in scsi_report_opcode() Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 08/19] scsi: detect support for command duration limits Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 09/19] scsi: allow enabling and disabling " Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 10/19] scsi: sd: set read/write commands CDL index Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 11/19] scsi: sd: handle read/write CDL timeout failures Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 12/19] ata: libata-scsi: remove unnecessary !cmd checks Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 13/19] ata: libata: change ata_eh_request_sense() to not set CHECK_CONDITION Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 14/19] ata: libata: detect support for command duration limits Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 15/19] ata: libata-scsi: handle CDL bits in ata_scsiop_maint_in() Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 16/19] ata: libata-scsi: add support for CDL pages mode sense Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 17/19] ata: libata: add ATA feature control sub-page translation Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 18/19] ata: libata: set read/write commands CDL index Niklas Cassel
2023-03-09 21:55 ` [PATCH v4 19/19] ata: libata: handle completion of CDL commands using policy 0xD Niklas Cassel
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=c91be70e-14a9-7ad6-ba7c-975a640a34d3@opensource.wdc.com \
--to=damien.lemoal@opensource.wdc.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=niklas.cassel@wdc.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).