Re: [PATCH v3 01/18] block: introduce duration-limits priority class

Bart Van Assche
2023-01-30T19:24:19Z

On 1/28/23 19:52, Damien Le Moal wrote:
> diff --git a/include/uapi/linux/ioprio.h b/include/uapi/linux/ioprio.h
> index f70f2596a6bf..1d90349a19c9 100644
> +/*
> + * The 13-bits of ioprio data for each class provide up to 8 QOS hints and
> + * up to 8 priority levels.
> + */
> +#define IOPRIO_PRIO_LEVEL_MASK (IOPRIO_NR_LEVELS - 1)
> +#define IOPRIO_QOS_HINT_SHIFT 10
> +#define IOPRIO_NR_QOS_HINTS 8
> +#define IOPRIO_QOS_HINT_MASK (IOPRIO_NR_QOS_HINTS - 1)
> +#define IOPRIO_PRIO_LEVEL(ioprio) ((ioprio) & IOPRIO_PRIO_LEVEL_MASK)
> +#define IOPRIO_QOS_HINT(ioprio) \
> + (((ioprio) >> IOPRIO_QOS_HINT_SHIFT) & IOPRIO_QOS_HINT_MASK)
> +

Hi Damien,

How about the following approach?
* Do not add QoS support to the ioprio_set() system cal since that
system call only affects foreground I/O.
* Configure QoS via the v2 cgroup mechanism such that QoS policies are
applied to both foreground and background I/O.

This approach allows to use another binary representation for I/O
priorities and QoS in the bio.bi_ioprio field than what is supported by
the ioprio_set() system call. This approach also allows to use names
(strings) for QoS settings instead of numbers in the interface between
user space and the kernel if that would be considered desirable.

Thanks,

Bart.