Re: [PATCH 2/2] udp: RCU handling for Unicast packets.
From: Eric Dumazet <hidden>
Date: 2008-10-29 08:27:45
David Miller a écrit :
From: Eric Dumazet <redacted> Date: Tue, 28 Oct 2008 23:45:15 +0100quoted
I will submit a new patch serie tomorrow, with : Patch 1 : spinlocks instead of rwlocks, and bug spotted by Christian Bell Patch 2 : splited on two parts (2 & 3) , one for IPV4, one for IPV6,I very much look forward to this :-) I like these changes and can't wait to add them to net-next-2.6
Thanks David, please find first updated patch 1 Thanks to Christian Bell and Stephen for their usefull review. [PATCH] udp: introduce struct udp_table and multiple spinlocks UDP sockets are hashed in a 128 slots hash table. This hash table is protected by *one* rwlock. This rwlock is readlocked each time an incoming UDP message is handled. This rwlock is writelocked each time a socket must be inserted in hash table (bind time), or deleted from this table (close time) This is not scalable on SMP machines : 1) Even in read mode, lock() and unlock() are atomic operations and must dirty a contended cache line, shared by all cpus. 2) A writer might be starved if many readers are 'in flight'. This can happen on a machine with some NIC receiving many UDP messages. User process can be delayed a long time at socket creation/dismantle time. This patch prepares RCU migration, by introducing 'struct udp_table and struct udp_hslot', and using one spinlock per chain, to reduce contention on central rwlock. Introducing one spinlock per chain reduces latencies, for port randomization on heavily loaded UDP servers. This also speedup bindings to specific ports. udp_lib_unhash() was uninlined, becoming to big. Some cleanups were done to ease review of following patch (RCUification of UDP Unicast lookups) Signed-off-by: Eric Dumazet <redacted> --- include/net/sock.h | 2 include/net/udp.h | 25 ++-- include/net/udplite.h | 2 net/ipv4/udp.c | 209 +++++++++++++++++++++++----------------- net/ipv4/udp_impl.h | 4 net/ipv4/udplite.c | 13 +- net/ipv6/udp.c | 112 +++++++++++---------- net/ipv6/udp_impl.h | 4 net/ipv6/udplite.c | 8 - 9 files changed, 215 insertions(+), 164 deletions(-)
Attachments
- patch_udp_cleanup1.patch [text/plain] 24849 bytes · preview