All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@fb.com>
Cc: Bart Van Assche <Bart.VanAssche@sandisk.com>,
	"hch@infradead.org" <hch@infradead.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>
Subject: Re: [PATCH 0/7] blk-mq: fix queue quiescing
Date: Fri, 26 May 2017 08:44:28 +0800	[thread overview]
Message-ID: <20170526004422.GA22365@ming.t460p> (raw)
In-Reply-To: <cdfae246-d65e-fc49-69ec-dffe63832605@fb.com>

On Thu, May 25, 2017 at 11:42:59AM -0600, Jens Axboe wrote:
> On 05/25/2017 11:24 AM, Bart Van Assche wrote:
> > 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.
> >>
> >> 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>
> > ---
> >  block/blk-mq.c         | 13 ++++++++++++-
> >  include/linux/blk-mq.h |  5 +++--
> >  2 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_mq_tag_set *set)
> >  }
> >  EXPORT_SYMBOL(blk_mq_init_queue);
> >  
> > +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) !=
> > +		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);
> > +}
> > +
> >  static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
> >  						struct request_queue *q)
> >  {
> > @@ -2247,7 +2258,7 @@ static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
> >  			continue;
> >  
> >  		node = blk_mq_hw_queue_to_node(q->mq_map, i);
> > -		hctxs[i] = kzalloc_node(sizeof(struct blk_mq_hw_ctx),
> > +		hctxs[i] = kzalloc_node(blk_mq_hw_ctx_size(q),
> >  					GFP_KERNEL, node);
> >  		if (!hctxs[i])
> >  			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 {
> >  	struct blk_mq_tags	*tags;
> >  	struct blk_mq_tags	*sched_tags;
> >  
> > -	struct srcu_struct	queue_rq_srcu;
> > -
> >  	unsigned long		queued;
> >  	unsigned long		run;
> >  #define BLK_MQ_MAX_DISPATCH_ORDER	7
> > @@ -62,6 +60,9 @@ struct blk_mq_hw_ctx {
> >  	struct dentry		*debugfs_dir;
> >  	struct dentry		*sched_debugfs_dir;
> >  #endif
> > +
> > +	/* Must be the last member - see also blk_mq_hw_ctx_size(). */
> > +	struct srcu_struct	queue_rq_srcu;
> >  };
> 
> Why not make it
> 
> 	/* Must be the last member - see also blk_mq_hw_ctx_size(). */
> 	struct srcu_struct	queue_rq_srcu[0];

Yeah, actually that was what I did yesterday in my local tree, will
posted out today with the blk_mq_quiesce_queue() fix.


Thanks,
Ming

      parent reply	other threads:[~2017-05-26  0:44 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
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 [this message]

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=20170526004422.GA22365@ming.t460p \
    --to=ming.lei@redhat.com \
    --cc=Bart.VanAssche@sandisk.com \
    --cc=axboe@fb.com \
    --cc=hch@infradead.org \
    --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.