diff options
author | Paolo Valente <paolo.valente@linaro.org> | 2021-01-25 20:02:48 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-01-25 14:18:37 -0700 |
commit | 71217df39dc67a0aeed83352b0d712b7892036a2 (patch) | |
tree | 665b6a543e3f5818649e406badf6a4f57cd84d97 /block/bfq-iosched.h | |
parent | 5a5436b98d5cd2714feaaa579cec49dd7f7057bb (diff) | |
download | linux-stable-71217df39dc67a0aeed83352b0d712b7892036a2.tar.gz linux-stable-71217df39dc67a0aeed83352b0d712b7892036a2.tar.bz2 linux-stable-71217df39dc67a0aeed83352b0d712b7892036a2.zip |
block, bfq: make waker-queue detection more robust
In the presence of many parallel I/O flows, the detection of waker
bfq_queues suffers from false positives. This commits addresses this
issue by making the filtering of actual wakers more selective. In more
detail, a candidate waker must be found to meet waker requirements
three times before being promoted to actual waker.
Tested-by: Jan Kara <jack@suse.cz>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/bfq-iosched.h')
-rw-r--r-- | block/bfq-iosched.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h index 3f350fa3c5fd..b8e793c34ff1 100644 --- a/block/bfq-iosched.h +++ b/block/bfq-iosched.h @@ -376,6 +376,11 @@ struct bfq_queue { * bfq_select_queue(). */ struct bfq_queue *waker_bfqq; + /* pointer to the curr. tentative waker queue, see bfq_check_waker() */ + struct bfq_queue *tentative_waker_bfqq; + /* number of times the same tentative waker has been detected */ + unsigned int num_waker_detections; + /* node for woken_list, see below */ struct hlist_node woken_list_node; /* @@ -776,7 +781,6 @@ enum bfqq_state_flags { */ BFQQF_coop, /* bfqq is shared */ BFQQF_split_coop, /* shared bfqq will be split */ - BFQQF_has_waker /* bfqq has a waker queue */ }; #define BFQ_BFQQ_FNS(name) \ @@ -796,7 +800,6 @@ BFQ_BFQQ_FNS(in_large_burst); BFQ_BFQQ_FNS(coop); BFQ_BFQQ_FNS(split_coop); BFQ_BFQQ_FNS(softrt_update); -BFQ_BFQQ_FNS(has_waker); #undef BFQ_BFQQ_FNS /* Expiration reasons. */ |