• Feng Liu's avatar
    virtio_pci: Optimize virtio_pci_device structure size · 4f0fc225
    Feng Liu authored
    Improve the size of the virtio_pci_device structure, which is commonly
    used to represent a virtio PCI device. A given virtio PCI device can
    either of legacy type or modern type, with the
    struct virtio_pci_legacy_device occupying 32 bytes and the
    struct virtio_pci_modern_device occupying 88 bytes. Make them a union,
    thereby save 32 bytes of memory as shown by the pahole tool. This
    improvement is particularly beneficial when dealing with numerous
    devices, as it helps conserve memory resources.
    
    Before the modification, pahole tool reported the following:
    struct virtio_pci_device {
    [...]
            struct virtio_pci_legacy_device ldev;            /*   824    32 */
            /* --- cacheline 13 boundary (832 bytes) was 24 bytes ago --- */
            struct virtio_pci_modern_device mdev;            /*   856    88 */
    
            /* XXX last struct has 4 bytes of padding */
    [...]
            /* size: 1056, cachelines: 17, members: 19 */
    [...]
    };
    
    After the modification, pahole tool reported the following:
    struct virtio_pci_device {
    [...]
            union {
                    struct virtio_pci_legacy_device ldev;    /*   824    32 */
                    struct virtio_pci_modern_device mdev;    /*   824    88 */
            };                                               /*   824    88 */
    [...]
    	/* size: 1024, cachelines: 16, members: 18 */
    [...]
    };
    Signed-off-by: default avatarFeng Liu <feliu@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Message-Id: <20230516135446.16266-1-feliu@nvidia.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
    Acked-by: default avatarJason Wang <jasowang@redhat.com>
    4f0fc225
virtio_pci_common.h 4.14 KB