Cache align Rx and Tx queue struct to avoid false sharing. The RX struct happens to be 64 bytes on x86_64 already, so cache alignment has no effect there, but it does on 32-bit ISAs.
The TX struct is 56 bytes on x86_64. Both structs keep counters, and in the RX case they are updated even for empty polls. v3: Move __rte_cache_aligned directive to a MSVC-compatible location. Fixes: 364e08f2bbc0 ("af_packet: add PMD for AF_PACKET-based virtual devices") Cc: sta...@dpdk.org Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com> --- drivers/net/af_packet/rte_eth_af_packet.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c index 397a32db58..6b7b16f348 100644 --- a/drivers/net/af_packet/rte_eth_af_packet.c +++ b/drivers/net/af_packet/rte_eth_af_packet.c @@ -6,6 +6,7 @@ * All rights reserved. */ +#include <rte_common.h> #include <rte_string_fns.h> #include <rte_mbuf.h> #include <ethdev_driver.h> @@ -39,7 +40,7 @@ #define DFLT_FRAME_SIZE (1 << 11) #define DFLT_FRAME_COUNT (1 << 9) -struct pkt_rx_queue { +struct __rte_cache_aligned pkt_rx_queue { int sockfd; struct iovec *rd; @@ -55,7 +56,7 @@ struct pkt_rx_queue { volatile unsigned long rx_bytes; }; -struct pkt_tx_queue { +struct __rte_cache_aligned pkt_tx_queue { int sockfd; unsigned int frame_data_size; -- 2.34.1