summaryrefslogtreecommitdiff
path: root/include/net/udp.h
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2025-04-08 18:19:45 -0700
committerJakub Kicinski <kuba@kernel.org>2025-04-08 18:19:45 -0700
commit6a0f72c5e208c5980fe4bb7d0c2ecc31714207c4 (patch)
tree42374557872d888984158a19d5abbb2f408129d3 /include/net/udp.h
parent5ac40e6b5b0bac3f72020a48d01ada23e8450d0c (diff)
parent5d7f5b2f6b935517ee5fd8058dc32342a5cba3e1 (diff)
downloadlinux-next-6a0f72c5e208c5980fe4bb7d0c2ecc31714207c4.tar.gz
linux-next-6a0f72c5e208c5980fe4bb7d0c2ecc31714207c4.zip
Merge branch 'udp_tunnel-gro-optimizations'
Paolo Abeni says: ==================== udp_tunnel: GRO optimizations The UDP tunnel GRO stage is source of measurable overhead for workload based on UDP-encapsulated traffic: each incoming packets requires a full UDP socket lookup and an indirect call. In the most common setups a single UDP tunnel device is used. In such case we can optimize both the lookup and the indirect call. Patch 1 tracks per netns the active UDP tunnels and replaces the socket lookup with a single destination port comparison when possible. Patch 2 tracks the different types of UDP tunnels and replaces the indirect call with a static one when there is a single UDP tunnel type active. I measure ~10% performance improvement in TCP over UDP tunnel stream tests on top of this series. v4: https://lore.kernel.org/cover.1741718157.git.pabeni@redhat.com v3: https://lore.kernel.org/cover.1741632298.git.pabeni@redhat.com v2: https://lore.kernel.org/cover.1741338765.git.pabeni@redhat.com v1: https://lore.kernel.org/cover.1741275846.git.pabeni@redhat.com ==================== Link: https://patch.msgid.link/cover.1744040675.git.pabeni@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/net/udp.h')
-rw-r--r--include/net/udp.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/udp.h b/include/net/udp.h
index 6e89520e100d..a772510b2aa5 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -290,6 +290,7 @@ static inline void udp_lib_init_sock(struct sock *sk)
struct udp_sock *up = udp_sk(sk);
skb_queue_head_init(&up->reader_queue);
+ INIT_HLIST_NODE(&up->tunnel_list);
up->forward_threshold = sk->sk_rcvbuf >> 2;
set_bit(SOCK_CUSTOM_SOCKOPT, &sk->sk_socket->flags);
}