diff mbox series

[RFC,PATCHv2] block: set bdi congested when no tag available

Message ID 1655382631-3037-1-git-send-email-zhaoyang.huang@unisoc.com (mailing list archive)
State New, archived
Headers show
Series [RFC,PATCHv2] block: set bdi congested when no tag available | expand

Commit Message

zhaoyang.huang June 16, 2022, 12:30 p.m. UTC
From: Zhaoyang Huang <zhaoyang.huang@unisoc.com>

In previous version, block layer will set bdi to be congested when
get_request fail, which may throttle direct_reclaim. Move them back
under current blk-mq design.

Signed-off-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
---
v2: simplify the code
---
---
 block/blk-mq-tag.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Jens Axboe June 16, 2022, 3:27 p.m. UTC | #1
On 6/16/22 6:30 AM, zhaoyang.huang wrote:
> From: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> 
> In previous version, block layer will set bdi to be congested when
> get_request fail, which may throttle direct_reclaim. Move them back
> under current blk-mq design.

bdi congestion doesn't exist anymore, not sure what this patch is
against?
zhaoyang.huang June 17, 2022, 6:45 a.m. UTC | #2
On 6/16/22 6:30 AM, zhaoyang.huang wrote:
> From: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
>
> In previous version, block layer will set bdi to be congested when
> get_request fail, which may throttle direct_reclaim. Move them back
> under current blk-mq design.

bdi congestion doesn't exist anymore, not sure what this patch is
against?

ok. What i am trying to solve is introducing reclaim throttle when excessive number of IOs consume all tags on hwctx. It is could be introduced by page thrashing or access of mapped lib files. 
--
Jens Axboe
diff mbox series

Patch

diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 995336a..0cbc445 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -11,6 +11,7 @@ 
 
 #include <linux/blk-mq.h>
 #include <linux/delay.h>
+#include <linux/backing-dev.h>
 #include "blk.h"
 #include "blk-mq.h"
 #include "blk-mq-sched.h"
@@ -126,6 +127,8 @@  unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
 	if (tag != BLK_MQ_NO_TAG)
 		goto found_tag;
 
+	set_bdi_congested(data->q->disk->bdi,BLK_RW_SYNC);
+	set_bdi_congested(data->q->disk->bdi,BLK_RW_ASYNC);
 	if (data->flags & BLK_MQ_REQ_NOWAIT)
 		return BLK_MQ_NO_TAG;
 
@@ -190,6 +193,8 @@  unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
 		blk_mq_put_tag(tags, data->ctx, tag + tag_offset);
 		return BLK_MQ_NO_TAG;
 	}
+	clear_bdi_congested(data->q->disk->bdi,BLK_RW_SYNC);
+	clear_bdi_congested(data->q->disk->bdi,BLK_RW_ASYNC);
 	return tag + tag_offset;
 }