* [PATCH] net/af_packet: cache align Rx/Tx structs
[not found] <20240423090813.94110-1-mattias.ronnblom@ericsson.com>
@ 2024-04-26 7:38 ` Mattias Rönnblom
2024-04-26 8:27 ` Ferruh Yigit
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
0 siblings, 2 replies; 8+ messages in thread
From: Mattias Rönnblom @ 2024-04-26 7:38 UTC (permalink / raw)
To: dev
Cc: hofors, Morten Brørup, Stephen Hemminger, Thomas Monjalon,
John W . Linville, Ferruh Yigit, Mattias Rönnblom, stable
Cache align Rx and Tx queue struct to avoid false sharing.
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.
TX struct is 56 bytes on x86_64.
Both structs keep counters, and in the RX case they are updated even
for empty polls.
Fixes: 364e08f2bbc0 ("af_packet: add PMD for AF_PACKET-based virtual devices")
Cc: stable@dpdk.org
Signed-off-by: Mattias Rönnblom <mattias.ronnblom@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..28aeb7d08e 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>
@@ -53,7 +54,7 @@ struct pkt_rx_queue {
volatile unsigned long rx_pkts;
volatile unsigned long rx_bytes;
-};
+} __rte_cache_aligned;
struct pkt_tx_queue {
int sockfd;
@@ -67,7 +68,7 @@ struct pkt_tx_queue {
volatile unsigned long tx_pkts;
volatile unsigned long err_pkts;
volatile unsigned long tx_bytes;
-};
+} __rte_cache_aligned;
struct pmd_internals {
unsigned nb_queues;
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] net/af_packet: cache align Rx/Tx structs
2024-04-26 7:38 ` [PATCH] net/af_packet: cache align Rx/Tx structs Mattias Rönnblom
@ 2024-04-26 8:27 ` Ferruh Yigit
2024-04-26 10:20 ` Mattias Rönnblom
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
1 sibling, 1 reply; 8+ messages in thread
From: Ferruh Yigit @ 2024-04-26 8:27 UTC (permalink / raw)
To: Mattias Rönnblom, dev
Cc: hofors, Morten Brørup, Stephen Hemminger, Thomas Monjalon,
John W . Linville, stable
On 4/26/2024 8:38 AM, Mattias Rönnblom wrote:
> Cache align Rx and Tx queue struct to avoid false sharing.
>
> 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.
>
> TX struct is 56 bytes on x86_64.
>
> Both structs keep counters, and in the RX case they are updated even
> for empty polls.
>
> Fixes: 364e08f2bbc0 ("af_packet: add PMD for AF_PACKET-based virtual devices")
> Cc: stable@dpdk.org
>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@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..28aeb7d08e 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>
> @@ -53,7 +54,7 @@ struct pkt_rx_queue {
>
> volatile unsigned long rx_pkts;
> volatile unsigned long rx_bytes;
> -};
> +} __rte_cache_aligned;
>
> struct pkt_tx_queue {
> int sockfd;
> @@ -67,7 +68,7 @@ struct pkt_tx_queue {
> volatile unsigned long tx_pkts;
> volatile unsigned long err_pkts;
> volatile unsigned long tx_bytes;
> -};
> +} __rte_cache_aligned;
>
> struct pmd_internals {
> unsigned nb_queues;
Hi Mattias,
I guess my comment missed, location of '__rte_cache_aligned' tag changed
for MSVC support, it should be like:
```
struct __rte_cache_aligned pkt_rx_queue {
...
};
```
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3] net/af_packet: cache align Rx/Tx structs
2024-04-26 7:38 ` [PATCH] net/af_packet: cache align Rx/Tx structs Mattias Rönnblom
2024-04-26 8:27 ` Ferruh Yigit
@ 2024-04-26 9:05 ` Mattias Rönnblom
2024-04-26 9:22 ` Morten Brørup
` (2 more replies)
1 sibling, 3 replies; 8+ messages in thread
From: Mattias Rönnblom @ 2024-04-26 9:05 UTC (permalink / raw)
To: dev
Cc: hofors, Morten Brørup, Stephen Hemminger, Thomas Monjalon,
John W . Linville, Ferruh Yigit, Mattias Rönnblom, stable
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: stable@dpdk.org
Signed-off-by: Mattias Rönnblom <mattias.ronnblom@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
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v3] net/af_packet: cache align Rx/Tx structs
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
@ 2024-04-26 9:22 ` Morten Brørup
2024-04-26 15:10 ` Stephen Hemminger
2024-04-26 15:41 ` Tyler Retzlaff
2 siblings, 0 replies; 8+ messages in thread
From: Morten Brørup @ 2024-04-26 9:22 UTC (permalink / raw)
To: Mattias Rönnblom, dev
Cc: hofors, Stephen Hemminger, Thomas Monjalon, John W . Linville,
Ferruh Yigit, stable
> From: Mattias Rönnblom [mailto:mattias.ronnblom@ericsson.com]
> Sent: Friday, 26 April 2024 11.05
>
> Cache align Rx and Tx queue struct to avoid false sharing.
Should an RTE_CACHE_GUARD be added at the end of these two structs?
If not,
Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] net/af_packet: cache align Rx/Tx structs
2024-04-26 8:27 ` Ferruh Yigit
@ 2024-04-26 10:20 ` Mattias Rönnblom
0 siblings, 0 replies; 8+ messages in thread
From: Mattias Rönnblom @ 2024-04-26 10:20 UTC (permalink / raw)
To: Ferruh Yigit, Mattias Rönnblom, dev
Cc: Morten Brørup, Stephen Hemminger, Thomas Monjalon,
John W . Linville, stable
On 2024-04-26 10:27, Ferruh Yigit wrote:
> On 4/26/2024 8:38 AM, Mattias Rönnblom wrote:
>> Cache align Rx and Tx queue struct to avoid false sharing.
>>
>> 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.
>>
>> TX struct is 56 bytes on x86_64.
>>
>> Both structs keep counters, and in the RX case they are updated even
>> for empty polls.
>>
>> Fixes: 364e08f2bbc0 ("af_packet: add PMD for AF_PACKET-based virtual devices")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@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..28aeb7d08e 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>
>> @@ -53,7 +54,7 @@ struct pkt_rx_queue {
>>
>> volatile unsigned long rx_pkts;
>> volatile unsigned long rx_bytes;
>> -};
>> +} __rte_cache_aligned;
>>
>> struct pkt_tx_queue {
>> int sockfd;
>> @@ -67,7 +68,7 @@ struct pkt_tx_queue {
>> volatile unsigned long tx_pkts;
>> volatile unsigned long err_pkts;
>> volatile unsigned long tx_bytes;
>> -};
>> +} __rte_cache_aligned;
>>
>> struct pmd_internals {
>> unsigned nb_queues;
>
> Hi Mattias,
>
> I guess my comment missed, location of '__rte_cache_aligned' tag changed
> for MSVC support, it should be like:
> ```
> struct __rte_cache_aligned pkt_rx_queue {
> ...
> };
> ```
Right. Sorry, forgot about that.
I've made a v3 (which is actually marked v3).
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] net/af_packet: cache align Rx/Tx structs
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
2024-04-26 9:22 ` Morten Brørup
@ 2024-04-26 15:10 ` Stephen Hemminger
2024-04-26 15:41 ` Tyler Retzlaff
2 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2024-04-26 15:10 UTC (permalink / raw)
To: Mattias Rönnblom
Cc: dev, hofors, Morten Brørup, Thomas Monjalon,
John W . Linville, Ferruh Yigit, stable
On Fri, 26 Apr 2024 11:05:02 +0200
Mattias Rönnblom <mattias.ronnblom@ericsson.com> wrote:
> 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: stable@dpdk.org
>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
Looks good.
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
If you want to go further with this:
- could rx and tx rings be next to each other so that any of the lookahead
in cpu helps, not hurts?
- what about secondary process support
- would sendmmsg() and recvmmsg() help for bursting.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] net/af_packet: cache align Rx/Tx structs
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
2024-04-26 9:22 ` Morten Brørup
2024-04-26 15:10 ` Stephen Hemminger
@ 2024-04-26 15:41 ` Tyler Retzlaff
2024-04-29 8:46 ` Ferruh Yigit
2 siblings, 1 reply; 8+ messages in thread
From: Tyler Retzlaff @ 2024-04-26 15:41 UTC (permalink / raw)
To: Mattias Rönnblom
Cc: dev, hofors, Morten Brørup, Stephen Hemminger,
Thomas Monjalon, John W . Linville, Ferruh Yigit, stable
On Fri, Apr 26, 2024 at 11:05:02AM +0200, Mattias Rönnblom wrote:
> 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: stable@dpdk.org
>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
> ---
Acked-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] net/af_packet: cache align Rx/Tx structs
2024-04-26 15:41 ` Tyler Retzlaff
@ 2024-04-29 8:46 ` Ferruh Yigit
0 siblings, 0 replies; 8+ messages in thread
From: Ferruh Yigit @ 2024-04-29 8:46 UTC (permalink / raw)
To: Tyler Retzlaff, Mattias Rönnblom
Cc: dev, hofors, Morten Brørup, Stephen Hemminger,
Thomas Monjalon, John W . Linville, stable
On 4/26/2024 4:41 PM, Tyler Retzlaff wrote:
> On Fri, Apr 26, 2024 at 11:05:02AM +0200, Mattias Rönnblom wrote:
>> 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: stable@dpdk.org
>>
>> Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
>> ---
>
> Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> Acked-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
>
Applied to dpdk-next-net/main, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-04-29 8:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20240423090813.94110-1-mattias.ronnblom@ericsson.com>
2024-04-26 7:38 ` [PATCH] net/af_packet: cache align Rx/Tx structs Mattias Rönnblom
2024-04-26 8:27 ` Ferruh Yigit
2024-04-26 10:20 ` Mattias Rönnblom
2024-04-26 9:05 ` [PATCH v3] " Mattias Rönnblom
2024-04-26 9:22 ` Morten Brørup
2024-04-26 15:10 ` Stephen Hemminger
2024-04-26 15:41 ` Tyler Retzlaff
2024-04-29 8:46 ` Ferruh Yigit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).