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
next prev parent 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.