All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
To: linux-block@vger.kernel.org
Cc: axboe@kernel.dk
Subject: [RFC] blk-mq: complete request locallly if not in interrupt context
Date: Thu, 27 Jan 2022 17:21:43 +0800	[thread overview]
Message-ID: <20220127092143.1808-1-xiaoguang.wang@linux.alibaba.com> (raw)

For block devices that call blk_mq_complete_request() to end request
in process context, it's pointless to redirect the completion to be
done in block soft-irq, also blk_mq_raise_softirq() isnt't a very
light operation, which contains preempt and hard irq disable, wake
up ksoftirqd in non-interrupt context.

I found this issue while I use tcm_loop and tcmu(backstore is file)
to evaluate performance, tcm_loop end request in workqueue.
Without this patch: libaio engine, direct io, randwrite, io size 128k
job0: (groupid=0, jobs=1): err= 0: pid=20876: Thu Jan 27 15:33:45 2022
  write: IOPS=15.7k, BW=1966MiB/s (2062MB/s)(115GiB/60001msec); 0 zone resets
    slat (nsec): min=5675, max=83552, avg=8689.69, stdev=996.96
    clat (usec): min=231, max=99977, avg=498.89, stdev=501.69
     lat (usec): min=291, max=99986, avg=507.70, stdev=501.69

With this patch:
job0: (groupid=0, jobs=1): err= 0: pid=12813: Thu Jan 27 15:50:46 2022
  write: IOPS=16.8k, BW=2101MiB/s (2203MB/s)(123GiB/60001msec); 0 zone resets
    slat (usec): min=5, max=125, avg=14.12, stdev=10.31
    clat (usec): min=306, max=65380, avg=460.78, stdev=506.24
     lat (usec): min=341, max=65389, avg=475.04, stdev=505.27

Which improves throughput and reduces lat.

Signed-off-by: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
---
 block/blk-mq.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 8874a63ae952..9fdffc65d7ba 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -974,6 +974,9 @@ bool blk_mq_complete_request_remote(struct request *rq)
 		return true;
 	}
 
+	if (!in_interrupt())
+		return false;
+
 	if (rq->q->nr_hw_queues == 1) {
 		blk_mq_raise_softirq(rq);
 		return true;
-- 
2.14.4.44.g2045bb6


             reply	other threads:[~2022-01-27  9:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-27  9:21 Xiaoguang Wang [this message]
2022-01-27  9:54 ` [RFC] blk-mq: complete request locallly if not in interrupt context Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220127092143.1808-1-xiaoguang.wang@linux.alibaba.com \
    --to=xiaoguang.wang@linux.alibaba.com \
    --cc=axboe@kernel.dk \
    --cc=linux-block@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.