mbox series

[v2,net-next,0/4] inetpeer: reduce false sharing and atomic operations

Message ID 20241215175629.1248773-1-edumazet@google.com (mailing list archive)
Headers show
Series inetpeer: reduce false sharing and atomic operations | expand

Message

Eric Dumazet Dec. 15, 2024, 5:56 p.m. UTC
After commit 8c2bd38b95f7 ("icmp: change the order of rate limits"),
there is a risk that a host receiving packets from an unique
source targeting closed ports is using a common inet_peer structure
from many cpus.

All these cpus have to acquire/release a refcount and update
the inet_peer timestamp (p->dtime)

Switch to pure RCU to avoid changing the refcount, and update
p->dtime only once per jiffy.

Tested:
  DUT : 128 cores, 32 hw rx queues.
  receiving 8,400,000 UDP packets per second, targeting closed ports.

Before the series:
- napi poll can not keep up, NIC drops 1,200,000 packets
  per second. 
- We use 20 % of cpu cycles

After this series:
- All packets are received (no more hw drops)
- We use 12 % of cpu cycles.

v2: addded Simon and Ido feedback from v1
v1: https://lore.kernel.org/netdev/20241213130212.1783302-1-edumazet@google.com/T/#mc6b32422714235f8608580a7dbf464c203300578

Eric Dumazet (4):
  inetpeer: remove create argument of inet_getpeer_v[46]()
  inetpeer: remove create argument of inet_getpeer()
  inetpeer: update inetpeer timestamp in inet_getpeer()
  inetpeer: do not get a refcount in inet_getpeer()

 include/net/inetpeer.h | 12 +++++-------
 net/ipv4/icmp.c        |  9 ++++-----
 net/ipv4/inetpeer.c    | 31 ++++++++-----------------------
 net/ipv4/ip_fragment.c | 15 ++++++++++-----
 net/ipv4/route.c       | 17 +++++++++--------
 net/ipv6/icmp.c        |  6 +++---
 net/ipv6/ip6_output.c  |  6 +++---
 net/ipv6/ndisc.c       |  8 +++++---
 8 files changed, 47 insertions(+), 57 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Dec. 18, 2024, 3:50 a.m. UTC | #1
Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Sun, 15 Dec 2024 17:56:25 +0000 you wrote:
> After commit 8c2bd38b95f7 ("icmp: change the order of rate limits"),
> there is a risk that a host receiving packets from an unique
> source targeting closed ports is using a common inet_peer structure
> from many cpus.
> 
> All these cpus have to acquire/release a refcount and update
> the inet_peer timestamp (p->dtime)
> 
> [...]

Here is the summary with links:
  - [v2,net-next,1/4] inetpeer: remove create argument of inet_getpeer_v[46]()
    https://git.kernel.org/netdev/net-next/c/661cd8fc8e90
  - [v2,net-next,2/4] inetpeer: remove create argument of inet_getpeer()
    https://git.kernel.org/netdev/net-next/c/7a596a50c4a4
  - [v2,net-next,3/4] inetpeer: update inetpeer timestamp in inet_getpeer()
    https://git.kernel.org/netdev/net-next/c/50b362f21d6c
  - [v2,net-next,4/4] inetpeer: do not get a refcount in inet_getpeer()
    https://git.kernel.org/netdev/net-next/c/a853c609504e

You are awesome, thank you!