Thread (54 messages) 54 messages, 17 authors, 2018-10-06

Re: [PATCH] block: BFQ default for single queue devices

From: Paolo Valente <hidden>
Date: 2018-10-03 15:51:38
Also in: linux-mmc

Il giorno 02 ott 2018, alle ore 14:43, Linus Walleij =
[off-list ref] ha scritto:
=20
This sets BFQ as the default scheduler for single queue
block devices (nr_hw_queues =3D=3D 1) if it is available. This
affects notably MMC/SD-cards but notably also UBI and
the loopback device.
=20
I have been running it for a while without any negative
effects on my pet systems and I want some wider testing
so let's throw it out there and see what people say.
Admittedly my use cases are limited.
=20
I talked to Pavel a bit back and it turns out he has a
usecase for BFQ as well and I bet he also would like it
as default scheduler for that system (Pavel tell us more,
I don't remember what it was!)
=20
Intuitively I could understand that maybe we want to
leave the loop device
Actually, I've tested loop devices too.  And, also with these virtual
devices, switching to bfq radically improves figures of merits as
responsiveness and latency for soft real-time applications.

Thanks,
Paolo

quoted hunk ↗ jump to hunk
(possibly others? nbd? rbd?) as
"none", as it is probably relying on a scheduler on the
device below it, so I'm open to passing in a scheduler hint
from the respective subsystem in say struct blk_mq_tag_set.
However that makes for a bit of syntactic dissonance
with the struct member ".nr_hw_queues" (I wonder how
the loop device can have 1 "hardware queue"?) so
maybe we should in that case also rename that struct
member to ".nr_queues" fair and square before we start
making adjustments for treating queues differently whether
they are in hardware or actually not.
=20
Cc: Pavel Machek <redacted>
Cc: Paolo Valente <redacted>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Ulf Hansson <redacted>
Cc: Richard Weinberger <richard@nod.at>
Cc: Artem Bityutskiy <dedekind1@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Linus Walleij <redacted>
---
block/elevator.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
=20
diff --git a/block/elevator.c b/block/elevator.c
index e18ac68626e3..e5a2c39eee7b 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -948,13 +948,15 @@ int elevator_switch_mq(struct request_queue *q,
}
=20
/*
- * For blk-mq devices, we default to using mq-deadline, if available, =
for single
- * queue devices.  If deadline isn't available OR we have multiple =
queues,
quoted hunk ↗ jump to hunk
- * default to "none".
+ * For blk-mq devices, we default to using:
+ * - "none" for multiqueue devices (nr_hw_queues !=3D 1)
+ * - "bfq", if available, for single queue devices
+ * - "mq-deadline" if "bfq" is not available for single queue devices
+ * - "none" for single queue devices as well as last resort
 */
int elevator_init_mq(struct request_queue *q)
{
-	struct elevator_type *e;
+	struct elevator_type *e =3D NULL;
	int err =3D 0;
=20
	if (q->nr_hw_queues !=3D 1)
@@ -968,9 +970,14 @@ int elevator_init_mq(struct request_queue *q)
	if (unlikely(q->elevator))
		goto out_unlock;
=20
-	e =3D elevator_get(q, "mq-deadline", false);
-	if (!e)
-		goto out_unlock;
+	if (IS_ENABLED(CONFIG_IOSCHED_BFQ))
+		e =3D elevator_get(q, "bfq", false);
+
+	if (!e) {
+		e =3D elevator_get(q, "mq-deadline", false);
+		if (!e)
+			goto out_unlock;
+	}
=20
	err =3D blk_mq_init_sched(q, e);
	if (err)
--=20
2.17.1
=20
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help