linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] blk-mq: determine in advance whether batch alloc can be performed
@ 2022-08-26  1:26 Liu Song
  2022-08-26 13:33 ` Jens Axboe
  0 siblings, 1 reply; 3+ messages in thread
From: Liu Song @ 2022-08-26  1:26 UTC (permalink / raw)
  To: axboe; +Cc: linux-block, linux-kernel

From: Liu Song <liusong@linux.alibaba.com>

Some conditions for judging whether batch alloc can be performed are
included in "blk_mq_get_tags", and this function is only used by
"__blk_mq_alloc_requests_batch".

This patch introduced a helper "can_do_batch_alloc" to prepend the
judgment condition and avoid unnecessary function calls.

Signed-off-by: Liu Song <liusong@linux.alibaba.com>
---
 block/blk-mq-tag.c |  3 ---
 block/blk-mq.c     | 11 ++++++++++-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 8e3b36d..cda3987 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -115,9 +115,6 @@ unsigned long blk_mq_get_tags(struct blk_mq_alloc_data *data, int nr_tags,
 	struct sbitmap_queue *bt = &tags->bitmap_tags;
 	unsigned long ret;
 
-	if (data->shallow_depth ||data->flags & BLK_MQ_REQ_RESERVED ||
-	    data->hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)
-		return 0;
 	ret = __sbitmap_queue_get_batch(bt, nr_tags, offset);
 	*offset += tags->nr_reserved_tags;
 	return ret;
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 3c1e6b6..330c618 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -437,6 +437,15 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
 	return rq_list_pop(data->cached_rq);
 }
 
+static inline bool can_do_batch_alloc(struct blk_mq_alloc_data *data)
+{
+	if (data->nr_tags > 1 && !(data->shallow_depth ||
+		data->flags & BLK_MQ_REQ_RESERVED ||
+		data->hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED))
+		return true;
+	return false;
+}
+
 static struct request *__blk_mq_alloc_requests(struct blk_mq_alloc_data *data)
 {
 	struct request_queue *q = data->q;
@@ -480,7 +489,7 @@ static struct request *__blk_mq_alloc_requests(struct blk_mq_alloc_data *data)
 	/*
 	 * Try batched alloc if we want more than 1 tag.
 	 */
-	if (data->nr_tags > 1) {
+	if (can_do_batch_alloc(data)) {
 		rq = __blk_mq_alloc_requests_batch(data, alloc_time_ns);
 		if (rq)
 			return rq;
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] blk-mq: determine in advance whether batch alloc can be performed
  2022-08-26  1:26 [PATCH] blk-mq: determine in advance whether batch alloc can be performed Liu Song
@ 2022-08-26 13:33 ` Jens Axboe
  2022-08-27 13:10   ` Liu Song
  0 siblings, 1 reply; 3+ messages in thread
From: Jens Axboe @ 2022-08-26 13:33 UTC (permalink / raw)
  To: Liu Song; +Cc: linux-block, linux-kernel

On 8/25/22 7:26 PM, Liu Song wrote:
> From: Liu Song <liusong@linux.alibaba.com>
> 
> Some conditions for judging whether batch alloc can be performed are
> included in "blk_mq_get_tags", and this function is only used by
> "__blk_mq_alloc_requests_batch".
> 
> This patch introduced a helper "can_do_batch_alloc" to prepend the
> judgment condition and avoid unnecessary function calls.

Curious if you saw any differences from this? Or do you just consider
it a cleanup?

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] blk-mq: determine in advance whether batch alloc can be performed
  2022-08-26 13:33 ` Jens Axboe
@ 2022-08-27 13:10   ` Liu Song
  0 siblings, 0 replies; 3+ messages in thread
From: Liu Song @ 2022-08-27 13:10 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-block, linux-kernel


On 2022/8/26 21:33, Jens Axboe wrote:
> On 8/25/22 7:26 PM, Liu Song wrote:
>> From: Liu Song <liusong@linux.alibaba.com>
>>
>> Some conditions for judging whether batch alloc can be performed are
>> included in "blk_mq_get_tags", and this function is only used by
>> "__blk_mq_alloc_requests_batch".
>>
>> This patch introduced a helper "can_do_batch_alloc" to prepend the
>> judgment condition and avoid unnecessary function calls.
> Curious if you saw any differences from this? Or do you just consider
> it a cleanup?
>
Hi

This patch aggregates the judgment conditions for whether batch alloc 
can be used,
which can be considered as clean up.

If it can be determined at the first judgment that batch alloc cannot be 
used, the
overhead of calling "blk_mq_get_tags" once will be reduced, are some 
differences.


Thanks


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-08-27 13:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-26  1:26 [PATCH] blk-mq: determine in advance whether batch alloc can be performed Liu Song
2022-08-26 13:33 ` Jens Axboe
2022-08-27 13:10   ` Liu Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).