Eric Dumazet
645ca708f9
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 <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-10-29 01:41:45 -07:00
..
9p
9p: fix sparse warnings
2008-10-22 18:54:47 -05:00
bluetooth
include: replace __FUNCTION__ with __func__
2008-10-16 11:21:30 -07:00
irda
include: replace __FUNCTION__ with __func__
2008-10-16 11:21:30 -07:00
iucv
[AF_IUCV]: postpone receival of iucv-packets
2007-10-10 16:54:51 -07:00
netfilter
net: replace uses of NIP6_FMT with %p6
2008-10-28 23:02:31 -07:00
netns
net: implement emergency route cache rebulds when gc_elasticity is exceeded
2008-10-27 17:06:14 -07:00
phonet
Phonet: include generic link-layer header size in MAX_PHONET_HEADER
2008-10-26 23:06:31 -07:00
sctp
net: replace uses of NIP6_FMT with %p6
2008-10-28 23:02:31 -07:00
tc_act
pkt_action: add new action skbedit
2008-09-12 16:30:20 -07:00
tipc
tipc: Remove unneeded parameter to tipc_createport_raw()
2008-07-14 22:42:19 -07:00
act_api.h
[NET_SCHED]: act_api: use PTR_ERR in tcf_action_init/tcf_action_get
2008-01-28 15:11:17 -08:00
addrconf.h
netns: Add network namespace argument to rt6_fill_node() and ipv6_dev_get_saddr()
2008-08-14 15:33:21 -07:00
af_rxrpc.h
[AF_RXRPC]: Add an interface to the AF_RXRPC module for the AFS filesystem to use
2007-04-26 15:50:17 -07:00
af_unix.h
[PATCH] f_count may wrap around
2008-07-26 20:53:40 -04:00
ah.h
[IPSEC]: Get rid of ipv6_{auth,esp,comp}_hdr
2007-10-10 16:55:55 -07:00
arp.h
[NETFILTER]: ebtables: remove casts, use consts
2008-01-31 19:27:33 -08:00
atmclip.h
ax25.h
[AX25] ax25_ds_timer: use mod_timer instead of add_timer
2008-02-12 17:53:34 -08:00
ax88796.h
ax88796: add 93cx6 eeprom support
2007-10-10 16:53:56 -07:00
cfg80211.h
cfg80211: show interface type
2008-09-24 16:18:00 -04:00
checksum.h
[NET]: Move netfilter checksum helpers to net/core/utils.c
2008-01-28 14:55:14 -08:00
cipso_ipv4.h
cipso: Add support for native local labeling and fixup mapping names
2008-10-10 10:16:34 -04:00
compat.h
net: Use standard structures for generic socket address structures.
2008-07-19 22:35:47 -07:00
datalink.h
dn.h
[DECNET]: Another unnecessary net/tcp.h inclusion in net/dn.h
2007-07-10 23:02:12 -07:00
dn_dev.h
dn_fib.h
dn_neigh.h
dn_nsp.h
dn_route.h
[NET]: Wrap netdevice hardware header creation.
2007-10-10 16:52:50 -07:00
dsa.h
dsa: add support for Trailer tagging format
2008-10-08 17:24:16 -07:00
dsfield.h
[NET]: Constify include/net/dsfield.h
2008-01-28 14:55:58 -08:00
dst.h
net: reduce structures when XFRM=n
2008-10-28 13:24:06 -07:00
esp.h
[IPSEC]: Use crypto_aead and authenc in ESP
2008-01-31 19:27:02 -08:00
fib_rules.h
net: add fib_rules_ops to flush_cache method
2008-07-05 19:01:28 -07:00
flow.h
ipv4: Loosen source address check on IPv4 output
2008-10-01 07:28:28 -07:00
garp.h
vlan: Add GVRP support
2008-07-05 21:26:57 -07:00
gen_stats.h
[NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API
2008-01-28 15:11:10 -08:00
genetlink.h
netlink: Improve returned error codes
2008-06-03 16:36:54 -07:00
icmp.h
mib: put icmpmsg statistics on struct net
2008-07-18 04:04:22 -07:00
ieee80211.h
include: replace __FUNCTION__ with __func__
2008-10-16 11:21:30 -07:00
ieee80211_crypt.h
[PATCH] Update my email address from jkmaline@cc.hut.fi to j@w1.fi
2007-04-28 11:01:01 -04:00
ieee80211_radiotap.h
include: use get/put_unaligned_* helpers
2008-07-25 10:53:26 -07:00
if_inet6.h
ipv6: make struct ipv6_devconf static
2008-07-22 14:21:58 -07:00
inet6_connection_sock.h
inet6_hashtables.h
inet: Don't lookup the socket if there's a socket attached to the skb
2008-10-07 12:41:01 -07:00
inet_common.h
[NETNS]: Inet control socket should not hold a namespace.
2008-04-03 14:28:30 -07:00
inet_connection_sock.h
net: more #ifdef CONFIG_COMPAT
2008-08-28 02:53:51 -07:00
inet_ecn.h
[IPV6]: Use appropriate sock tclass setting for routing lookup.
2008-04-13 23:40:51 -07:00
inet_frag.h
[NET]: Rename inet_frag.h identifiers COMPLETE, FIRST_IN, LAST_IN to INET_FRAG_*
2008-03-28 16:35:27 -07:00
inet_hashtables.h
inet: Don't lookup the socket if there's a socket attached to the skb
2008-10-07 12:41:01 -07:00
inet_sock.h
tcp: Port redirection support for TCP
2008-10-01 07:46:49 -07:00
inet_timewait_sock.h
ipv4: Implement IP_TRANSPARENT socket option
2008-10-01 07:30:02 -07:00
inetpeer.h
net: remove CVS keywords
2008-06-11 21:00:38 -07:00
ip.h
sysctl: simplify ->strategy
2008-10-16 11:21:47 -07:00
ip6_checksum.h
ip6_fib.h
[NETNS][IPV6] rt6_info - move rt6_info structure inside the namespace
2008-03-04 13:48:30 -08:00
ip6_route.h
netns: Add network namespace argument to rt6_fill_node() and ipv6_dev_get_saddr()
2008-08-14 15:33:21 -07:00
ip6_tunnel.h
net: remove CVS keywords
2008-06-11 21:00:38 -07:00
ip_fib.h
[IPV4]: Fix compile error building without CONFIG_FS_PROC
2008-02-05 02:54:16 -08:00
ip_vs.h
net: replace uses of NIP6_FMT with %p6
2008-10-28 23:02:31 -07:00
ipcomp.h
ipsec: ipcomp - Merge IPComp implementations
2008-07-25 02:54:40 -07:00
ipconfig.h
net: remove CVS keywords
2008-06-11 21:00:38 -07:00
ipip.h
inet: Make tunnel RX/TX byte counters more consistent
2008-10-09 12:03:17 -07:00
ipv6.h
ipv6: making ip and icmp statistics per/namespace
2008-10-08 11:16:45 -07:00
ipx.h
iw_handler.h
wext: Emit event stream entries correctly when compat.
2008-06-16 18:50:49 -07:00
lapb.h
llc.h
[LLC]: station source mac address
2008-03-28 16:28:36 -07:00
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
[NET]: Make socket creation namespace safe.
2007-10-10 16:49:07 -07:00
llc_if.h
[LLC]: Kill static inline llc_addrany
2008-02-29 11:46:17 -08:00
llc_pdu.h
[LLC]: skb allocation size for responses
2008-03-31 21:02:47 -07:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
[LLC]: skb allocation size for responses
2008-03-31 21:02:47 -07:00
mac80211.h
mac80211: fixme for kernel-doc
2008-10-14 21:12:37 -04:00
mip6.h
[IPV6] MIP6: Use our standard definitions for paddings.
2008-04-12 13:43:22 +09:00
ndisc.h
sysctl: simplify ->strategy
2008-10-16 11:21:47 -07:00
neighbour.h
core: add stat to track unresolved discards in neighbor cache
2008-07-16 20:50:49 -07:00
net_namespace.h
netfilter: netns nf_conntrack: add netns boilerplate
2008-10-08 11:35:02 +02:00
netdma.h
netevent.h
[NET]: Remove unnecessary inclusion of dst.h
2008-01-28 14:53:38 -08:00
netlabel.h
netlabel: Add configuration support for local labeling
2008-10-10 10:16:34 -04:00
netlink.h
netlink: constify struct nlattr * arg to parsing functions
2008-10-28 11:59:11 -07:00
netrom.h
nexthop.h
p8022.h
pkt_cls.h
[PKT_SCHED]: Pass real namespace in net scheduler classifiers.
2008-03-27 16:53:37 -07:00
pkt_sched.h
pkt_sched: Remove the tx queue state check in qdisc_run()
2008-09-23 01:05:56 -07:00
protocol.h
[NETNS]: Drop packets in the non-initial namespace on the per/protocol basis.
2008-03-24 15:33:00 -07:00
psnap.h
raw.h
[RAW]: Add raw_hashinfo member on struct proto.
2008-03-22 16:56:51 -07:00
rawv6.h
[IPv6] RAW: Compact the API for the kernel
2008-01-28 14:54:29 -08:00
red.h
request_sock.h
tcp: Fix kernel panic when calling tcp_v(4/6)_md5_do_lookup
2008-08-06 23:50:04 -07:00
rose.h
rose: improving AX25 routing frames via ROSE network
2008-06-17 17:08:32 -07:00
route.h
ipv4: Conditionally enable transparent flow flag when connecting
2008-10-01 07:35:39 -07:00
rtnetlink.h
[RTNL]: Introduce the rtnl_kill_links helper.
2008-04-16 00:46:52 -07:00
sch_generic.h
pkt_sched: Fix handling of gso skbs on requeuing
2008-10-06 09:54:39 -07:00
scm.h
pid namespaces: changes to show virtual ids to user
2007-10-19 11:53:40 -07:00
slhc_vj.h
snmp.h
net: remove CVS keywords
2008-06-11 21:00:38 -07:00
sock.h
udp: introduce struct udp_table and multiple spinlocks
2008-10-29 01:41:45 -07:00
stp.h
net: Add STP demux layer
2008-07-05 21:25:39 -07:00
syncppp.h
Remove bogus variables from syncppp.[ch]
2008-07-23 23:00:31 +02:00
tcp.h
net: wrap sk->sk_backlog_rcv()
2008-10-07 14:18:42 -07:00
tcp_states.h
timewait_sock.h
transp_v6.h
net: change proto destroy method to return void
2008-06-14 17:04:49 -07:00
udp.h
udp: introduce struct udp_table and multiple spinlocks
2008-10-29 01:41:45 -07:00
udplite.h
udp: introduce struct udp_table and multiple spinlocks
2008-10-29 01:41:45 -07:00
wext.h
wext: Dispatch and handle compat ioctls entirely in net/wireless/wext.c
2008-06-16 18:32:46 -07:00
wireless.h
cfg80211: show interface type
2008-09-24 16:18:00 -04:00
x25.h
x25device.h
xfrm.h
net: reduce structures when XFRM=n
2008-10-28 13:24:06 -07:00