Thread (9 messages) 9 messages, 2 authors, 2026-01-20

Re: [PATCH v2 net-next 0/3] gro: inline tcp6_gro_{receive,complete}

From: Eric Dumazet <edumazet@google.com>
Date: 2026-01-20 15:45:04

On Tue, Jan 20, 2026 at 4:41 PM Eric Dumazet [off-list ref] wrote:
On Tue, Jan 20, 2026 at 4:30 PM Jakub Kicinski [off-list ref] wrote:
quoted
On Sun, 18 Jan 2026 17:52:12 +0000 Eric Dumazet wrote:
quoted
On some platforms, GRO stack is too deep and causes cpu stalls.

Decreasing call depths by one shows a 1.5 % gain on Zen2 cpus.
(32 RX queues, 100Gbit NIC, RFS enabled, tcp_rr with 128 threads and 10,000 flows)

We can go further by inlining ipv6_gro_{receive,complete}
and take care of IPv4 if there is interest.

Note: two temporary __always_inline will be replaced with
      inline_for_performance when available.

v2: dealt with udp6_gro_receive()/udp6_gro_complete()
    missing declarations (kernel test robot [off-list ref])
    for CONFIG_MITIGATION_RETPOLINE=n
Still not good?

net/ipv6/udp_offload.c:136:17: error: static declaration of ‘udp6_gro_receive’ follows non-static declaration
  136 | struct sk_buff *udp6_gro_receive(struct list_head *head, struct sk_buff *skb)
      |                 ^~~~~~~~~~~~~~~~
In file included from net/ipv6/udp_offload.c:16:
./include/net/gro.h:408:17: note: previous declaration of ‘udp6_gro_receive’ with type ‘struct sk_buff *(struct list_head *, struct sk_buff *)’
  408 | struct sk_buff *udp6_gro_receive(struct list_head *, struct sk_buff *);
      |                 ^~~~~~~~~~~~~~~~
net/ipv6/udp_offload.c:168:29: error: static declaration of ‘udp6_gro_complete’ follows non-static declaration
  168 | INDIRECT_CALLABLE_SCOPE int udp6_gro_complete(struct sk_buff *skb, int nhoff)
      |                             ^~~~~~~~~~~~~~~~~
./include/net/gro.h:409:5: note: previous declaration of ‘udp6_gro_complete’ with type ‘int(struct sk_buff *, int)’
  409 | int udp6_gro_complete(struct sk_buff *, int);
      |     ^~~~~~~~~~~~~~~~~
Oh well, I thought I tested this stuff.
Interesting... clang (our default compiler for kernel) does not complain at all.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help