From 168493dab1e2ba2f21731ec6d73a3985867b6ebb Mon Sep 17 00:00:00 2001 From: Piotr Gorski Date: Thu, 2 Jul 2020 19:16:43 +0200 Subject: [PATCH 1/4] block, Kconfig.iosched: set default value of IOSCHED_BFQ to yes Signed-off-by: Piotr Gorski --- block/Kconfig.iosched | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched index 2f2158e05..e58b2953a 100644 --- a/block/Kconfig.iosched +++ b/block/Kconfig.iosched @@ -5,13 +5,11 @@ menu "IO Schedulers" config MQ_IOSCHED_DEADLINE tristate "MQ deadline I/O scheduler" - default y help MQ version of the deadline IO scheduler. config MQ_IOSCHED_KYBER tristate "Kyber I/O scheduler" - default y help The Kyber I/O scheduler is a low-overhead scheduler suitable for multiqueue and other fast devices. Given target latencies for reads and @@ -20,6 +18,7 @@ config MQ_IOSCHED_KYBER config IOSCHED_BFQ tristate "BFQ I/O scheduler" + default y help BFQ I/O scheduler for BLK-MQ. BFQ distributes the bandwidth of of the device among all processes according to their weights, -- 2.33.1.711.g9d530dc002 From 72149cdad986c95ccd1356bee1385084791cea95 Mon Sep 17 00:00:00 2001 From: Piotr Gorski Date: Thu, 2 Jul 2020 19:26:24 +0200 Subject: [PATCH 2/4] block: Fix depends for BLK_DEV_ZONED Signed-off-by: Piotr Gorski --- block/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/Kconfig b/block/Kconfig index 8e28ae771..6ba62b6c7 100644 --- a/block/Kconfig +++ b/block/Kconfig @@ -63,7 +63,7 @@ config BLK_DEV_INTEGRITY_T10 config BLK_DEV_ZONED bool "Zoned block device support" - select MQ_IOSCHED_DEADLINE + select IOSCHED_BFQ help Block layer zoned block device support. This option enables support for ZAC/ZBC/ZNS host-managed and host-aware zoned block -- 2.33.1.711.g9d530dc002 From 75005ecce73f8718880f266f88c8f21f9cdb3f9a Mon Sep 17 00:00:00 2001 From: Piotr Gorski Date: Thu, 22 Oct 2020 23:54:33 +0200 Subject: [PATCH 3/4] block: set rq_affinity = 2 for full multithreading I/O Signed-off-by: Piotr Gorski --- include/linux/blkdev.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 12b9dbcc9..52f8fff7e 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -589,6 +589,7 @@ struct request_queue { #define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ (1 << QUEUE_FLAG_SAME_COMP) | \ + (1 << QUEUE_FLAG_SAME_FORCE) | \ (1 << QUEUE_FLAG_NOWAIT)) void blk_queue_flag_set(unsigned int flag, struct request_queue *q); -- 2.33.1.711.g9d530dc002 From d7010ca833be91c3cd2735e24d66bcd0bcb31c68 Mon Sep 17 00:00:00 2001 From: Piotr Gorski Date: Mon, 28 Jun 2021 13:12:54 +0200 Subject: [PATCH 4/4] block: Add CONFIG to rename the mq-deadline scheduler Signed-off-by: Piotr Gorski --- block/Kconfig.iosched | 9 +++++++++ block/elevator.c | 4 ++++ block/mq-deadline.c | 9 +++++++++ include/linux/elevator.h | 2 +- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched index e58b2953a..9e5a3c5c6 100644 --- a/block/Kconfig.iosched +++ b/block/Kconfig.iosched @@ -8,6 +8,15 @@ config MQ_IOSCHED_DEADLINE help MQ version of the deadline IO scheduler. +config MQ_IOSCHED_DEADLINE_NODEFAULT + bool "Rename mq-deadline scheduler to mq-deadline-nodefault" + depends on MQ_IOSCHED_DEADLINE + default n + help + This renames the mq-deadline scheduler to "mq-deadline-nodefault" and + also drops its alias of "deadline". This can prevent existing + userspace from forcing this scheduler over the kernel's choice. + config MQ_IOSCHED_KYBER tristate "Kyber I/O scheduler" help diff --git a/block/elevator.c b/block/elevator.c index ff45d8388..2ce4b7884 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -640,7 +640,11 @@ static struct elevator_type *elevator_get_default(struct request_queue *q) !blk_mq_is_sbitmap_shared(q->tag_set->flags)) return NULL; +#if defined(CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT) + return elevator_get(q, "mq-deadline-nodefault", false); +#else return elevator_get(q, "mq-deadline", false); +#endif } /* diff --git a/block/mq-deadline.c b/block/mq-deadline.c index 7f3c3932b..64bf0e8bb 100644 --- a/block/mq-deadline.c +++ b/block/mq-deadline.c @@ -1081,12 +1081,21 @@ static struct elevator_type mq_deadline = { .queue_debugfs_attrs = deadline_queue_debugfs_attrs, #endif .elevator_attrs = deadline_attrs, +#ifdef CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT + .elevator_name = "mq-deadline-nodefault", + .elevator_alias = "deadline-nodefault", +#else .elevator_name = "mq-deadline", .elevator_alias = "deadline", +#endif .elevator_features = ELEVATOR_F_ZBD_SEQ_WRITE, .elevator_owner = THIS_MODULE, }; +#ifdef CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT +MODULE_ALIAS("mq-deadline-nodefault-iosched"); +#else MODULE_ALIAS("mq-deadline-iosched"); +#endif static int __init deadline_init(void) { diff --git a/include/linux/elevator.h b/include/linux/elevator.h index ef9ceead3..b6c59500c 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h @@ -52,7 +52,7 @@ struct elevator_mq_ops { void (*exit_icq)(struct io_cq *); }; -#define ELV_NAME_MAX (16) +#define ELV_NAME_MAX (24) struct elv_fs_entry { struct attribute attr; -- 2.33.1.711.g9d530dc002