netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
@ 2024-11-07 11:41 Guillaume Nault
  2024-11-08 20:29 ` Simon Horman
  2024-11-12 10:53 ` Paolo Abeni
  0 siblings, 2 replies; 6+ messages in thread
From: Guillaume Nault @ 2024-11-07 11:41 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet
  Cc: netdev, Simon Horman, Andrew Lunn

Use the core_stats rx_dropped counter to avoid the cost of atomic
increments.

Signed-off-by: Guillaume Nault <gnault@redhat.com>
---
 drivers/net/geneve.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 2f29b1386b1c..671ca5260e92 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -235,7 +235,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
 					 vni_to_tunnel_id(gnvh->vni),
 					 gnvh->opt_len * 4);
 		if (!tun_dst) {
-			DEV_STATS_INC(geneve->dev, rx_dropped);
+			dev_core_stats_rx_dropped_inc(geneve->dev);
 			goto drop;
 		}
 		/* Update tunnel dst according to Geneve options. */
@@ -387,14 +387,14 @@ static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
 
 	if (unlikely((!geneve->cfg.inner_proto_inherit &&
 		      inner_proto != htons(ETH_P_TEB)))) {
-		DEV_STATS_INC(geneve->dev, rx_dropped);
+		dev_core_stats_rx_dropped_inc(geneve->dev);
 		goto drop;
 	}
 
 	opts_len = geneveh->opt_len * 4;
 	if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len, inner_proto,
 				 !net_eq(geneve->net, dev_net(geneve->dev)))) {
-		DEV_STATS_INC(geneve->dev, rx_dropped);
+		dev_core_stats_rx_dropped_inc(geneve->dev);
 		goto drop;
 	}
 
@@ -1023,7 +1023,7 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
 		if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) {
 			netdev_dbg(dev, "no tunnel metadata\n");
 			dev_kfree_skb(skb);
-			DEV_STATS_INC(dev, tx_dropped);
+			dev_core_stats_tx_dropped_inc(dev);
 			return NETDEV_TX_OK;
 		}
 	} else {
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
  2024-11-07 11:41 [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter Guillaume Nault
@ 2024-11-08 20:29 ` Simon Horman
  2024-11-12 10:53 ` Paolo Abeni
  1 sibling, 0 replies; 6+ messages in thread
From: Simon Horman @ 2024-11-08 20:29 UTC (permalink / raw)
  To: Guillaume Nault
  Cc: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet, netdev,
	Andrew Lunn

On Thu, Nov 07, 2024 at 12:41:44PM +0100, Guillaume Nault wrote:
> Use the core_stats rx_dropped counter to avoid the cost of atomic
> increments.
> 
> Signed-off-by: Guillaume Nault <gnault@redhat.com>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
  2024-11-07 11:41 [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter Guillaume Nault
  2024-11-08 20:29 ` Simon Horman
@ 2024-11-12 10:53 ` Paolo Abeni
  2024-11-12 16:53   ` Paolo Abeni
  1 sibling, 1 reply; 6+ messages in thread
From: Paolo Abeni @ 2024-11-12 10:53 UTC (permalink / raw)
  To: Guillaume Nault, David Miller, Jakub Kicinski, Eric Dumazet
  Cc: netdev, Simon Horman, Andrew Lunn

On 11/7/24 12:41, Guillaume Nault wrote:
> Use the core_stats rx_dropped counter to avoid the cost of atomic
> increments.
> 
> Signed-off-by: Guillaume Nault <gnault@redhat.com>

It looks like other UDP tunnels devices could benefit from a similar
change (vxlan, bareudp). Would you mind to also touch them, to keep such
implementations aligned?

> ---
>  drivers/net/geneve.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
> index 2f29b1386b1c..671ca5260e92 100644
> --- a/drivers/net/geneve.c
> +++ b/drivers/net/geneve.c
> @@ -235,7 +235,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
>  					 vni_to_tunnel_id(gnvh->vni),
>  					 gnvh->opt_len * 4);
>  		if (!tun_dst) {
> -			DEV_STATS_INC(geneve->dev, rx_dropped);
> +			dev_core_stats_rx_dropped_inc(geneve->dev);

How about switching to NETDEV_PCPU_STAT_DSTATS instead, so there is a
single percpu struct allocated x device (geneve already uses
NETDEV_PCPU_STAT_TSTATS): stats fetching will be faster, and possibly
memory usage lower.

/P


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
  2024-11-12 10:53 ` Paolo Abeni
@ 2024-11-12 16:53   ` Paolo Abeni
  2024-11-13  2:15     ` Jakub Kicinski
  0 siblings, 1 reply; 6+ messages in thread
From: Paolo Abeni @ 2024-11-12 16:53 UTC (permalink / raw)
  To: Guillaume Nault, David Miller, Jakub Kicinski, Eric Dumazet
  Cc: netdev, Simon Horman, Andrew Lunn



On 11/12/24 11:53, Paolo Abeni wrote:
> On 11/7/24 12:41, Guillaume Nault wrote:
>> Use the core_stats rx_dropped counter to avoid the cost of atomic
>> increments.
>>
>> Signed-off-by: Guillaume Nault <gnault@redhat.com>
> 
> It looks like other UDP tunnels devices could benefit from a similar
> change (vxlan, bareudp). Would you mind to also touch them, to keep such
> implementations aligned?
> 
>> ---
>>  drivers/net/geneve.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
>> index 2f29b1386b1c..671ca5260e92 100644
>> --- a/drivers/net/geneve.c
>> +++ b/drivers/net/geneve.c
>> @@ -235,7 +235,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
>>  					 vni_to_tunnel_id(gnvh->vni),
>>  					 gnvh->opt_len * 4);
>>  		if (!tun_dst) {
>> -			DEV_STATS_INC(geneve->dev, rx_dropped);
>> +			dev_core_stats_rx_dropped_inc(geneve->dev);
> 
> How about switching to NETDEV_PCPU_STAT_DSTATS instead, so there is a
> single percpu struct allocated x device (geneve already uses
> NETDEV_PCPU_STAT_TSTATS): stats fetching will be faster, and possibly
> memory usage lower.

I was not aware of the previous discussion on this same topic:

https://lore.kernel.org/netdev/20240903113402.41d19129@kernel.org/

and I missed the previous change on bareudp.c

I still think that avoiding the double per-cpu traversal when fetching
the stats could be useful, especially on large multi-numa nodes systems.

I guess it's better to be consistent and keep geneve and bareudp
aligned. We can eventually consolidate the stats later.

/P


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
  2024-11-12 16:53   ` Paolo Abeni
@ 2024-11-13  2:15     ` Jakub Kicinski
  2024-11-13 14:22       ` Guillaume Nault
  0 siblings, 1 reply; 6+ messages in thread
From: Jakub Kicinski @ 2024-11-13  2:15 UTC (permalink / raw)
  To: Paolo Abeni
  Cc: Guillaume Nault, David Miller, Eric Dumazet, netdev, Simon Horman,
	Andrew Lunn

On Tue, 12 Nov 2024 17:53:36 +0100 Paolo Abeni wrote:
> > How about switching to NETDEV_PCPU_STAT_DSTATS instead, so there is a
> > single percpu struct allocated x device (geneve already uses
> > NETDEV_PCPU_STAT_TSTATS): stats fetching will be faster, and possibly
> > memory usage lower.  
> 
> I was not aware of the previous discussion on this same topic:
> 
> https://lore.kernel.org/netdev/20240903113402.41d19129@kernel.org/
> 
> and I missed the previous change on bareudp.c
> 
> I still think that avoiding the double per-cpu traversal when fetching
> the stats could be useful, especially on large multi-numa nodes systems.
> 
> I guess it's better to be consistent and keep geneve and bareudp
> aligned. We can eventually consolidate the stats later.

We merged the bareudp changes... begrudgingly. You're the third
maintainer in a row to make a similar suggestion, which is pretty
strong signal that it's a better direction.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter.
  2024-11-13  2:15     ` Jakub Kicinski
@ 2024-11-13 14:22       ` Guillaume Nault
  0 siblings, 0 replies; 6+ messages in thread
From: Guillaume Nault @ 2024-11-13 14:22 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: Paolo Abeni, David Miller, Eric Dumazet, netdev, Simon Horman,
	Andrew Lunn

On Tue, Nov 12, 2024 at 06:15:18PM -0800, Jakub Kicinski wrote:
> On Tue, 12 Nov 2024 17:53:36 +0100 Paolo Abeni wrote:
> > > How about switching to NETDEV_PCPU_STAT_DSTATS instead, so there is a
> > > single percpu struct allocated x device (geneve already uses
> > > NETDEV_PCPU_STAT_TSTATS): stats fetching will be faster, and possibly
> > > memory usage lower.  
> > 
> > I was not aware of the previous discussion on this same topic:
> > 
> > https://lore.kernel.org/netdev/20240903113402.41d19129@kernel.org/
> > 
> > and I missed the previous change on bareudp.c
> > 
> > I still think that avoiding the double per-cpu traversal when fetching
> > the stats could be useful, especially on large multi-numa nodes systems.
> > 
> > I guess it's better to be consistent and keep geneve and bareudp
> > aligned. We can eventually consolidate the stats later.
> 
> We merged the bareudp changes... begrudgingly. You're the third
> maintainer in a row to make a similar suggestion, which is pretty
> strong signal that it's a better direction.

No problem, I can work on DSTAT conversion.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-11-13 14:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-07 11:41 [PATCH net-next] geneve: Use pcpu stats to update rx_dropped counter Guillaume Nault
2024-11-08 20:29 ` Simon Horman
2024-11-12 10:53 ` Paolo Abeni
2024-11-12 16:53   ` Paolo Abeni
2024-11-13  2:15     ` Jakub Kicinski
2024-11-13 14:22       ` Guillaume Nault

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).