[dpdk-dev] [PATCH 14/40] net/virtio: pack virtio HW struct

Xia, Chenbo chenbo.xia at intel.com
Wed Dec 30 04:09:02 CET 2020


> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin at redhat.com>
> Sent: Monday, December 21, 2020 5:14 AM
> To: dev at dpdk.org; Xia, Chenbo <chenbo.xia at intel.com>; olivier.matz at 6wind.com;
> amorenoz at redhat.com; david.marchand at redhat.com
> Cc: Maxime Coquelin <maxime.coquelin at redhat.com>
> Subject: [PATCH 14/40] net/virtio: pack virtio HW struct
> 
> This patch improves the virtio_hw struct packing,
> going from 88 down to 80 bytes with a 6 bytes hole in
> the end of the first cacheline. Fields only used in the
> slow path are placed in the end, so that hot path only
> uses the first cacheline.
> 
> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
> ---
>  drivers/net/virtio/virtio_pci.h | 45 ++++++++++++++++-----------------
>  1 file changed, 22 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h
> index 5629b37050..15f68f141c 100644
> --- a/drivers/net/virtio/virtio_pci.h
> +++ b/drivers/net/virtio/virtio_pci.h
> @@ -246,26 +246,25 @@ struct virtio_pci_ops {
>  struct virtio_net_config;
> 
>  struct virtio_hw {
> -	struct virtnet_ctl *cvq;
> -	uint64_t    req_guest_features;
> -	uint64_t    guest_features;
> -	uint32_t    max_queue_pairs;
> -	bool        started;
> -	uint16_t	max_mtu;
> -	uint16_t    vtnet_hdr_size;
> -	uint8_t	    vlan_strip;
> -	uint8_t	    use_msix;
> -	uint8_t     use_vec_rx;
> -	uint8_t     use_vec_tx;
> -	uint8_t     use_inorder_rx;
> -	uint8_t     use_inorder_tx;
> -	uint8_t     weak_barriers;
> -	bool        has_tx_offload;
> -	bool        has_rx_offload;
> -	uint16_t    port_id;
> -	uint8_t     mac_addr[RTE_ETHER_ADDR_LEN];
> -	uint32_t    speed;  /* link speed in MB */
> -	uint8_t     duplex;
> +	struct virtqueue **vqs;
> +	uint64_t guest_features;
> +	uint16_t vtnet_hdr_size;
> +	uint8_t started;
> +	uint8_t weak_barriers;
> +	uint8_t vlan_strip;
> +	uint8_t has_tx_offload;
> +	uint8_t has_rx_offload;
> +	uint8_t use_vec_rx;
> +	uint8_t use_vec_tx;
> +	uint8_t use_inorder_rx;
> +	uint8_t use_inorder_tx;
> +	uint8_t opened;
> +	uint16_t port_id;
> +	uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
> +	uint32_t speed;  /* link speed in MB */
> +	uint8_t duplex;
> +	uint8_t use_msix;
> +	uint16_t max_mtu;
>  	/*
>  	 * App management thread and virtio interrupt handler thread
>  	 * both can change device state, this lock is meant to avoid
> @@ -273,9 +272,9 @@ struct virtio_hw {
>  	 */
>  	rte_spinlock_t state_lock;
>  	struct rte_mbuf **inject_pkts;
> -	bool        opened;
> -
> -	struct virtqueue **vqs;
> +	uint16_t max_queue_pairs;
> +	uint64_t req_guest_features;
> +	struct virtnet_ctl *cvq;
>  };
> 
>  struct virtio_pci_dev {
> --
> 2.29.2

Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>


More information about the dev mailing list