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

zhaoyang.huang posted 1 patch 3 years, 10 months ago
block/blk-mq-tag.c | 5 +++++
1 file changed, 5 insertions(+)
[RFC PATCHv2] block: set bdi congested when no tag available
Posted by zhaoyang.huang 3 years, 10 months ago
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(+)

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;
 }
 
-- 
1.9.1
Re: [RFC PATCHv2] block: set bdi congested when no tag available
Posted by Jens Axboe 3 years, 10 months ago
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?

-- 
Jens Axboe
答复: [RFC PATCHv2] block: set bdi congested when no tag available
Posted by 黄朝阳 (Zhaoyang Huang) 3 years, 10 months ago

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