Hi Jens, A feature that is missing from the Linux kernel for storage devices that support I/O priorities is to set the I/O priority in requests involving page cache writeback. Since the identity of the process that triggers page cache writeback is not known in the writeback code, the priority set by ioprio_set() is ignored. However, an I/O cgroup is associated with writeback requests by certain filesystems. Hence this patch series that implements the following changes: * Add an rq-qos policy that makes the I/O priority configurable per I/O cgroup and also that changes the I/O priority of requests to the lower of (request I/O priority, cgroup I/O priority). * Introduce one queue per I/O priority in the mq-deadline scheduler. * Dispatch the highest priority requests first. Please consider this patch series for kernel v5.14. Thanks, Bart. Changes compared to v2: - For the blk-ioprio rq-qos policy, switched from numeric to textual policy names. - Moved rq_qos_id_to_name() into debugfs code. - Moved the mq-deadline I/O statistics into io.stat. - Introduced the dd_per_prio data structure. - Switched from a single sort list to one sort list per I/O priority. - Removed the WARN_ON_ONCE(blkcg == NULL) statements. Changes compared to v1: - Moved the code for assigning an I/O priority into a new rq-qos policy. - Dropped patch "block/mq-deadline: Reduce the read expiry time for non-rotational media". - Made sure that dd->async_depth >= 1. - Implemented an aging mechanism such that lower priority requests are not postponed forever. Bart Van Assche (16): block/Kconfig: Make the BLK_WBT and BLK_WBT_MQ entries consecutive block/blk-cgroup: Swap the blk_throtl_init() and blk_iolatency_init() calls block/blk-rq-qos: Move a function from a header file into a C file block: Introduce the ioprio rq-qos policy block/mq-deadline: Add several comments block/mq-deadline: Add two lockdep_assert_held() statements block/mq-deadline: Remove two local variables block/mq-deadline: Rename dd_init_queue() and dd_exit_queue() block/mq-deadline: Improve compile-time argument checking block/mq-deadline: Improve the sysfs show and store macros block/mq-deadline: Reserve 25% of scheduler tags for synchronous requests block/mq-deadline: Micro-optimize the batching algorithm block/mq-deadline: Add I/O priority support block/mq-deadline: Track I/O statistics block/mq-deadline: Add cgroup support block/mq-deadline: Prioritize high-priority requests Documentation/admin-guide/cgroup-v2.rst | 55 ++ block/Kconfig | 19 +- block/Kconfig.iosched | 6 + block/Makefile | 3 + block/blk-cgroup.c | 14 +- block/blk-ioprio.c | 262 +++++ block/blk-ioprio.h | 19 + block/blk-mq-debugfs.c | 15 + block/blk-rq-qos.h | 14 +- block/mq-deadline-cgroup.c | 126 +++ block/mq-deadline-cgroup.h | 114 +++ block/mq-deadline-main.c | 1173 +++++++++++++++++++++++ block/mq-deadline.c | 815 ---------------- 13 files changed, 1797 insertions(+), 838 deletions(-) create mode 100644 block/blk-ioprio.c create mode 100644 block/blk-ioprio.h create mode 100644 block/mq-deadline-cgroup.c create mode 100644 block/mq-deadline-cgroup.h create mode 100644 block/mq-deadline-main.c delete mode 100644 block/mq-deadline.c