All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
To: Jens Axboe <axboe@kernel.dk>
Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	linux-block@vger.kernel.org
Subject: [PATCH] blk-mq: Reorder fields in 'struct blk_mq_tag_set'
Date: Fri, 17 Feb 2023 10:29:10 +0100	[thread overview]
Message-ID: <6f249f9b02a3490283ef0278096556de41aa0cf0.1676626130.git.christophe.jaillet@wanadoo.fr> (raw)

Group some variables based on their sizes to reduce hole and avoid padding.
On x86_64, this shrinks the size of 'struct blk_mq_tag_set'
from 304 to 296 bytes.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
Using pahole

Before:
======
struct blk_mq_tag_set {
	struct blk_mq_queue_map    map[3];               /*     0    48 */
	unsigned int               nr_maps;              /*    48     4 */

	/* XXX 4 bytes hole, try to pack */

	const struct blk_mq_ops  * ops;                  /*    56     8 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	unsigned int               nr_hw_queues;         /*    64     4 */
	unsigned int               queue_depth;          /*    68     4 */
	unsigned int               reserved_tags;        /*    72     4 */
	unsigned int               cmd_size;             /*    76     4 */
	int                        numa_node;            /*    80     4 */
	unsigned int               timeout;              /*    84     4 */
	unsigned int               flags;                /*    88     4 */

	/* XXX 4 bytes hole, try to pack */

	void *                     driver_data;          /*    96     8 */
	struct blk_mq_tags * *     tags;                 /*   104     8 */
	struct blk_mq_tags *       shared_tags;          /*   112     8 */
	struct mutex               tag_list_lock;        /*   120   160 */
	/* --- cacheline 4 boundary (256 bytes) was 24 bytes ago --- */
	struct list_head           tag_list;             /*   280    16 */
	struct srcu_struct *       srcu;                 /*   296     8 */

	/* size: 304, cachelines: 5, members: 16 */
	/* sum members: 296, holes: 2, sum holes: 8 */
	/* last cacheline: 48 bytes */
};

After:
=====
struct blk_mq_tag_set {
	const struct blk_mq_ops  * ops;                  /*     0     8 */
	struct blk_mq_queue_map    map[3];               /*     8    48 */
	unsigned int               nr_maps;              /*    56     4 */
	unsigned int               nr_hw_queues;         /*    60     4 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	unsigned int               queue_depth;          /*    64     4 */
	unsigned int               reserved_tags;        /*    68     4 */
	unsigned int               cmd_size;             /*    72     4 */
	int                        numa_node;            /*    76     4 */
	unsigned int               timeout;              /*    80     4 */
	unsigned int               flags;                /*    84     4 */
	void *                     driver_data;          /*    88     8 */
	struct blk_mq_tags * *     tags;                 /*    96     8 */
	struct blk_mq_tags *       shared_tags;          /*   104     8 */
	struct mutex               tag_list_lock;        /*   112   160 */
	/* --- cacheline 4 boundary (256 bytes) was 16 bytes ago --- */
	struct list_head           tag_list;             /*   272    16 */
	struct srcu_struct *       srcu;                 /*   288     8 */

	/* size: 296, cachelines: 5, members: 16 */
	/* last cacheline: 40 bytes */
};
---
 include/linux/blk-mq.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 779fba613bd0..dd5ce1137f04 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -473,6 +473,7 @@ enum hctx_type {
 
 /**
  * struct blk_mq_tag_set - tag set that can be shared between request queues
+ * @ops:	   Pointers to functions that implement block driver behavior.
  * @map:	   One or more ctx -> hctx mappings. One map exists for each
  *		   hardware queue type (enum hctx_type) that the driver wishes
  *		   to support. There are no restrictions on maps being of the
@@ -480,7 +481,6 @@ enum hctx_type {
  *		   types.
  * @nr_maps:	   Number of elements in the @map array. A number in the range
  *		   [1, HCTX_MAX_TYPES].
- * @ops:	   Pointers to functions that implement block driver behavior.
  * @nr_hw_queues:  Number of hardware queues supported by the block driver that
  *		   owns this data structure.
  * @queue_depth:   Number of tags per hardware queue, reserved tags included.
@@ -505,9 +505,9 @@ enum hctx_type {
  *		   (BLK_MQ_F_BLOCKING).
  */
 struct blk_mq_tag_set {
+	const struct blk_mq_ops	*ops;
 	struct blk_mq_queue_map	map[HCTX_MAX_TYPES];
 	unsigned int		nr_maps;
-	const struct blk_mq_ops	*ops;
 	unsigned int		nr_hw_queues;
 	unsigned int		queue_depth;
 	unsigned int		reserved_tags;
-- 
2.34.1


             reply	other threads:[~2023-02-17  9:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-17  9:29 Christophe JAILLET [this message]
2023-02-17 20:38 ` [PATCH] blk-mq: Reorder fields in 'struct blk_mq_tag_set' Jens Axboe

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=6f249f9b02a3490283ef0278096556de41aa0cf0.1676626130.git.christophe.jaillet@wanadoo.fr \
    --to=christophe.jaillet@wanadoo.fr \
    --cc=axboe@kernel.dk \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@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.