linux/net/ipv6
Eric Dumazet fc66f95c68 net dst: use a percpu_counter to track entries
struct dst_ops tracks number of allocated dst in an atomic_t field,
subject to high cache line contention in stress workload.

Switch to a percpu_counter, to reduce number of time we need to dirty a
central location. Place it on a separate cache line to avoid dirtying
read only fields.

Stress test :

(Sending 160.000.000 UDP frames,
IP route cache disabled, dual E5540 @2.53GHz,
32bit kernel, FIB_TRIE, SLUB/NUMA)

Before:

real    0m51.179s
user    0m15.329s
sys     10m15.942s

After:

real	0m45.570s
user	0m15.525s
sys	9m56.669s

With a small reordering of struct neighbour fields, subject of a
following patch, (to separate refcnt from other read mostly fields)

real	0m41.841s
user	0m15.261s
sys	8m45.949s

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-10-11 13:06:53 -07:00
..
netfilter net: return operator cleanup 2010-09-23 14:33:39 -07:00
Kconfig
Makefile
addrconf.c ipv6: make __ipv6_isatap_ifid static 2010-10-05 00:47:39 -07:00
addrconf_core.c
addrlabel.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-09-27 01:03:03 -07:00
af_inet6.c net: return operator cleanup 2010-09-23 14:33:39 -07:00
ah6.c
anycast.c
datagram.c udp: add rehash on connect() 2010-09-08 21:45:01 -07:00
esp6.c
exthdrs.c
exthdrs_core.c net: return operator cleanup 2010-09-23 14:33:39 -07:00
fib6_rules.c
icmp.c
inet6_connection_sock.c
inet6_hashtables.c
ip6_fib.c
ip6_flowlabel.c
ip6_input.c
ip6_output.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-09-27 01:03:03 -07:00
ip6_tunnel.c net: add a core netdev->rx_dropped counter 2010-10-05 14:47:55 -07:00
ip6mr.c net: add a core netdev->rx_dropped counter 2010-10-05 14:47:55 -07:00
ipcomp6.c
ipv6_sockglue.c
mcast.c
mip6.c
ndisc.c net neigh: RCU conversion of neigh hash table 2010-10-05 14:54:36 -07:00
netfilter.c
proc.c
protocol.c net: inet_add_protocol() can use cmpxchg() 2010-09-08 21:31:35 -07:00
raw.c net: return operator cleanup 2010-09-23 14:33:39 -07:00
reassembly.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-09-09 22:27:33 -07:00
route.c net dst: use a percpu_counter to track entries 2010-10-11 13:06:53 -07:00
sit.c net: add a core netdev->rx_dropped counter 2010-10-05 14:47:55 -07:00
syncookies.c
sysctl_net_ipv6.c
tcp_ipv6.c net: return operator cleanup 2010-09-23 14:33:39 -07:00
tunnel6.c tunnels: missing rcu_assign_pointer() 2010-09-09 15:02:39 -07:00
udp.c udp: add rehash on connect() 2010-09-08 21:45:01 -07:00
udp_impl.h
udplite.c
xfrm6_input.c
xfrm6_mode_beet.c
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
xfrm6_output.c
xfrm6_policy.c net dst: use a percpu_counter to track entries 2010-10-11 13:06:53 -07:00
xfrm6_state.c xfrm: Allow different selector family in temporary state 2010-09-20 11:11:38 -07:00
xfrm6_tunnel.c ipv6: struct xfrm6_tunnel in read_mostly section 2010-08-30 13:50:46 -07:00