include/linux/virtio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Group some variables based on their sizes to reduce hole and avoid padding.
On x86_64, this shrinks the size of 'struct virtqueue'
from 72 to 68 bytes.
It saves a few bytes of memory.
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
Using pahole
Before:
======
struct virtqueue {
struct list_head list; /* 0 16 */
void (*callback)(struct virtqueue *); /* 16 8 */
const char * name; /* 24 8 */
struct virtio_device * vdev; /* 32 8 */
unsigned int index; /* 40 4 */
unsigned int num_free; /* 44 4 */
unsigned int num_max; /* 48 4 */
/* XXX 4 bytes hole, try to pack */
void * priv; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
bool reset; /* 64 1 */
/* size: 72, cachelines: 2, members: 9 */
/* sum members: 61, holes: 1, sum holes: 4 */
/* padding: 7 */
/* last cacheline: 8 bytes */
};
After:
=====
struct virtqueue {
struct list_head list; /* 0 16 */
void (*callback)(struct virtqueue *); /* 16 8 */
const char * name; /* 24 8 */
struct virtio_device * vdev; /* 32 8 */
unsigned int index; /* 40 4 */
unsigned int num_free; /* 44 4 */
unsigned int num_max; /* 48 4 */
bool reset; /* 52 1 */
/* XXX 3 bytes hole, try to pack */
void * priv; /* 56 8 */
/* size: 64, cachelines: 1, members: 9 */
/* sum members: 61, holes: 1, sum holes: 3 */
};
---
include/linux/virtio.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 6ac2655500dc..9439ae898310 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -35,8 +35,8 @@ struct virtqueue {
unsigned int index;
unsigned int num_free;
unsigned int num_max;
- void *priv;
bool reset;
+ void *priv;
};
int virtqueue_add_outbuf(struct virtqueue *vq,
--
2.34.1
On Sat, Feb 18, 2023 at 09:10:31AM +0100, Christophe JAILLET wrote: >Group some variables based on their sizes to reduce hole and avoid padding. >On x86_64, this shrinks the size of 'struct virtqueue' >from 72 to 68 bytes. > >It saves a few bytes of memory. > >Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> >--- LGTM! Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> >Using pahole > >Before: >====== >struct virtqueue { > struct list_head list; /* 0 16 */ > void (*callback)(struct virtqueue *); /* 16 8 */ > const char * name; /* 24 8 */ > struct virtio_device * vdev; /* 32 8 */ > unsigned int index; /* 40 4 */ > unsigned int num_free; /* 44 4 */ > unsigned int num_max; /* 48 4 */ > > /* XXX 4 bytes hole, try to pack */ > > void * priv; /* 56 8 */ > /* --- cacheline 1 boundary (64 bytes) --- */ > bool reset; /* 64 1 */ > > /* size: 72, cachelines: 2, members: 9 */ > /* sum members: 61, holes: 1, sum holes: 4 */ > /* padding: 7 */ > /* last cacheline: 8 bytes */ >}; > >After: >===== >struct virtqueue { > struct list_head list; /* 0 16 */ > void (*callback)(struct virtqueue *); /* 16 8 */ > const char * name; /* 24 8 */ > struct virtio_device * vdev; /* 32 8 */ > unsigned int index; /* 40 4 */ > unsigned int num_free; /* 44 4 */ > unsigned int num_max; /* 48 4 */ > bool reset; /* 52 1 */ > > /* XXX 3 bytes hole, try to pack */ > > void * priv; /* 56 8 */ > > /* size: 64, cachelines: 1, members: 9 */ > /* sum members: 61, holes: 1, sum holes: 3 */ >}; >--- > include/linux/virtio.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/include/linux/virtio.h b/include/linux/virtio.h >index 6ac2655500dc..9439ae898310 100644 >--- a/include/linux/virtio.h >+++ b/include/linux/virtio.h >@@ -35,8 +35,8 @@ struct virtqueue { > unsigned int index; > unsigned int num_free; > unsigned int num_max; >- void *priv; > bool reset; >+ void *priv; > }; > > int virtqueue_add_outbuf(struct virtqueue *vq, >-- >2.34.1 >
On Saturday, February 18th, 2023 at 03:10, Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote: > > > Group some variables based on their sizes to reduce hole and avoid padding. > On x86_64, this shrinks the size of 'struct virtqueue' > from 72 to 68 bytes. > > It saves a few bytes of memory. > > Signed-off-by: Christophe JAILLET christophe.jaillet@wanadoo.fr > > --- > Using pahole > > Before: > ====== > struct virtqueue { > struct list_head list; /* 0 16 */ > void (*callback)(struct virtqueue ); / 16 8 / > const char * name; / 24 8 / > struct virtio_device * vdev; / 32 8 / > unsigned int index; / 40 4 / > unsigned int num_free; / 44 4 / > unsigned int num_max; / 48 4 / > > / XXX 4 bytes hole, try to pack / > > void * priv; / 56 8 / > / --- cacheline 1 boundary (64 bytes) --- / > bool reset; / 64 1 / > > / size: 72, cachelines: 2, members: 9 / > / sum members: 61, holes: 1, sum holes: 4 / > / padding: 7 / > / last cacheline: 8 bytes / > }; > > After: > ===== > struct virtqueue { > struct list_head list; / 0 16 */ > void (*callback)(struct virtqueue ); / 16 8 / > const char * name; / 24 8 / > struct virtio_device * vdev; / 32 8 / > unsigned int index; / 40 4 / > unsigned int num_free; / 44 4 / > unsigned int num_max; / 48 4 / > bool reset; / 52 1 / > > / XXX 3 bytes hole, try to pack / > > void * priv; / 56 8 / > > / size: 64, cachelines: 1, members: 9 / > / sum members: 61, holes: 1, sum holes: 3 */ > }; > --- > include/linux/virtio.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/virtio.h b/include/linux/virtio.h > index 6ac2655500dc..9439ae898310 100644 > --- a/include/linux/virtio.h > +++ b/include/linux/virtio.h > @@ -35,8 +35,8 @@ struct virtqueue { > unsigned int index; > unsigned int num_free; > unsigned int num_max; > - void *priv; > bool reset; > + void *priv; > }; > > int virtqueue_add_outbuf(struct virtqueue *vq, > -- > 2.34.1 This will shrink the struct size on 32 bit archs too. Acked-by: Peter Lafreniere <peter@n8pjl.ca> - Peter
© 2016 - 2025 Red Hat, Inc.