OSDN Git Service

bfq: Log waker detections
authorJan Kara <jack@suse.cz>
Thu, 25 Nov 2021 13:36:40 +0000 (14:36 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 29 Nov 2021 13:39:31 +0000 (06:39 -0700)
Waker - wakee relationships are important in deciding whether one queue
can preempt the other one. Print information about detected waker-wakee
relationships so that scheduling decisions can be better understood from
block traces.

Acked-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20211125133645.27483-7-jack@suse.cz
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bfq-iosched.c

index 83a2225..6914400 100644 (file)
@@ -2127,6 +2127,8 @@ static void bfq_update_io_intensity(struct bfq_queue *bfqq, u64 now_ns)
 static void bfq_check_waker(struct bfq_data *bfqd, struct bfq_queue *bfqq,
                            u64 now_ns)
 {
+       char waker_name[MAX_BFQQ_NAME_LENGTH];
+
        if (!bfqd->last_completed_rq_bfqq ||
            bfqd->last_completed_rq_bfqq == bfqq ||
            bfq_bfqq_has_short_ttime(bfqq) ||
@@ -2154,12 +2156,18 @@ static void bfq_check_waker(struct bfq_data *bfqd, struct bfq_queue *bfqq,
                        bfqd->last_completed_rq_bfqq;
                bfqq->num_waker_detections = 1;
                bfqq->waker_detection_started = now_ns;
+               bfq_bfqq_name(bfqq->tentative_waker_bfqq, waker_name,
+                             MAX_BFQQ_NAME_LENGTH);
+               bfq_log_bfqq(bfqd, bfqq, "set tenative waker %s", waker_name);
        } else /* Same tentative waker queue detected again */
                bfqq->num_waker_detections++;
 
        if (bfqq->num_waker_detections == 3) {
                bfqq->waker_bfqq = bfqd->last_completed_rq_bfqq;
                bfqq->tentative_waker_bfqq = NULL;
+               bfq_bfqq_name(bfqq->waker_bfqq, waker_name,
+                             MAX_BFQQ_NAME_LENGTH);
+               bfq_log_bfqq(bfqd, bfqq, "set waker %s", waker_name);
 
                /*
                 * If the waker queue disappears, then