All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "ming.lei@redhat.com" <ming.lei@redhat.com>
Cc: "hch@infradead.org" <hch@infradead.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"axboe@fb.com" <axboe@fb.com>
Subject: Re: [PATCH 0/7] blk-mq: fix queue quiescing
Date: Thu, 25 May 2017 17:24:08 +0000	[thread overview]
Message-ID: <1495733047.2615.1.camel@sandisk.com> (raw)
In-Reply-To: <20170525090917.GB15737@ming.t460p>

On Thu, 2017-05-25 at 17:09 +0800, Ming Lei wrote:
> Another big issue is that 'srcu_struct' is very big, which shouldn't
> be embedded into hctx, since we only have one real user of
> BLK_MQ_F_BLOCKING.
>=20
> So I will fix that too.

Hello Ming,

Is something like the (untested) patch below perhaps what you had in mind?

Subject: [PATCH] blk-mq: Reduce blk_mq_hw_ctx size

Since the srcu structure is rather large (184 bytes on an x86-64
system), only allocate it if needed.

Reported-by: Ming Lei <ming.lei@redhat.com>
---
=A0block/blk-mq.c=A0=A0=A0=A0=A0=A0=A0=A0=A0| 13 ++++++++++++-
=A0include/linux/blk-mq.h |=A0=A05 +++--
=A02 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 1e330de4e3c5..15b7d4077638 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2233,6 +2233,17 @@ struct request_queue *blk_mq_init_queue(struct blk_m=
q_tag_set *set)
=A0}
=A0EXPORT_SYMBOL(blk_mq_init_queue);
=A0
+static int blk_mq_hw_ctx_size(struct request_queue *q)
+{
+	BUILD_BUG_ON(ALIGN(offsetof(struct blk_mq_hw_ctx, queue_rq_srcu) +
+		sizeof(((struct blk_mq_hw_ctx *)NULL)->queue_rq_srcu), 64) !=3D
+		sizeof(struct blk_mq_hw_ctx));
+
+	return q->tag_set->flags & BLK_MQ_F_BLOCKING ?
+		sizeof(struct blk_mq_hw_ctx) :
+		offsetof(struct blk_mq_hw_ctx, queue_rq_srcu);
+}
+
=A0static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
=A0						struct request_queue *q)
=A0{
@@ -2247,7 +2258,7 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_=
set *set,
=A0			continue;
=A0
=A0		node =3D blk_mq_hw_queue_to_node(q->mq_map, i);
-		hctxs[i] =3D kzalloc_node(sizeof(struct blk_mq_hw_ctx),
+		hctxs[i] =3D kzalloc_node(blk_mq_hw_ctx_size(q),
=A0					GFP_KERNEL, node);
=A0		if (!hctxs[i])
=A0			break;
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index c0d59330b5e0..8467e1f83524 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -39,8 +39,6 @@ struct blk_mq_hw_ctx {
=A0	struct blk_mq_tags	*tags;
=A0	struct blk_mq_tags	*sched_tags;
=A0
-	struct srcu_struct	queue_rq_srcu;
-
=A0	unsigned long		queued;
=A0	unsigned long		run;
=A0#define BLK_MQ_MAX_DISPATCH_ORDER	7
@@ -62,6 +60,9 @@ struct blk_mq_hw_ctx {
=A0	struct dentry		*debugfs_dir;
=A0	struct dentry		*sched_debugfs_dir;
=A0#endif
+
+	/* Must be the last member - see also blk_mq_hw_ctx_size(). */
+	struct srcu_struct	queue_rq_srcu;
=A0};
=A0
=A0struct blk_mq_tag_set {
--=A0
2.12.2

  reply	other threads:[~2017-05-25 17:24 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-25  4:21 [PATCH 0/7] blk-mq: fix queue quiescing Ming Lei
2017-05-25  4:21 ` [PATCH 1/7] blk-mq: introduce blk_mq_unquiesce_queue Ming Lei
2017-05-25  4:21 ` [PATCH 2/7] block: introduce flag of QUEUE_FLAG_QUIESCED Ming Lei
2017-05-25  4:21 ` [PATCH 3/7] dm: use the introduced blk_mq_unquiesce_queue() Ming Lei
2017-05-25  4:21 ` [PATCH 4/7] nvme: " Ming Lei
2017-05-25  4:21 ` [PATCH 5/7] scsi: " Ming Lei
2017-05-25  4:21 ` [PATCH 6/7] blk-mq: quiesce queue via percpu_ref Ming Lei
2017-05-25  4:21 ` [PATCH 7/7] blk-mq: update comments on blk_mq_quiesce_queue() Ming Lei
2017-05-25  5:24 ` [PATCH 0/7] blk-mq: fix queue quiescing Bart Van Assche
2017-05-25  9:09   ` Ming Lei
2017-05-25 17:24     ` Bart Van Assche [this message]
2017-05-25 17:31       ` Jens Axboe
2017-05-25 17:42       ` Jens Axboe
2017-05-25 17:59         ` Bart Van Assche
2017-05-26  0:44         ` Ming Lei

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=1495733047.2615.1.camel@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=axboe@fb.com \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=ming.lei@redhat.com \
    /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.