Tim Chen
0856a30409
Scm: Remove unnecessary pid & credential references in Unix socket's send and receive path
...
Patch series 109f6e39..7361c36c back in 2.6.36 added functionality to
allow credentials to work across pid namespaces for packets sent via
UNIX sockets. However, the atomic reference counts on pid and
credentials caused plenty of cache bouncing when there are numerous
threads of the same pid sharing a UNIX socket. This patch mitigates the
problem by eliminating extraneous reference counts on pid and
credentials on both send and receive path of UNIX sockets. I found a 2x
improvement in hackbench's threaded case.
On the receive path in unix_dgram_recvmsg, currently there is an
increment of reference count on pid and credentials in scm_set_cred.
Then there are two decrement of the reference counts. Once in scm_recv
and once when skb_free_datagram call skb->destructor function
unix_destruct_scm. One pair of increment and decrement of ref count on
pid and credentials can be eliminated from the receive path. Until we
destroy the skb, we already set a reference when we created the skb on
the send side.
On the send path, there are two increments of ref count on pid and
credentials, once in scm_send and once in unix_scm_to_skb. Then there
is a decrement of the reference counts in scm_destroy's call to
scm_destroy_cred at the end of unix_dgram_sendmsg functions. One pair
of increment and decrement of the reference counts can be removed so we
only need to increment the ref counts once.
By incorporating these changes, for hackbench running on a 4 socket
NHM-EX machine with 40 cores, the execution of hackbench on
50 groups of 20 threads sped up by factor of 2.
Hackbench command used for testing:
./hackbench 50 thread 2000
Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-08-24 19:41:13 -07:00
..
9p
fs/9p: add 9P2000.L unlinkat operation
2011-07-23 09:32:52 -05:00
bluetooth
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
2011-07-15 10:05:24 -04:00
caif
caif: Add CAIF HSI Link layer driver
2011-06-01 21:15:38 -07:00
irda
Fix common misspellings
2011-03-31 11:26:23 -03:00
iucv
af_iucv: add HiperSockets transport
2011-08-13 01:10:16 -07:00
netfilter
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
netns
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
phonet
net: dont hold rtnl mutex during netlink dump callbacks
2011-05-02 15:26:28 -07:00
sctp
sctp: Bundle HEAERTBEAT into ASCONF_ACK
2011-08-24 19:41:13 -07:00
tc_act
net/sched: add ACT_CSUM action to update packets checksums
2010-08-20 01:42:59 -07:00
act_api.h
net: sched: constify tcf_proto and tc_action
2011-07-06 02:52:16 -07:00
addrconf.h
ipv6: updates to privacy addresses per RFC 4941.
2011-08-01 18:05:00 -07:00
af_ieee802154.h
af_rxrpc.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
af_unix.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
ah.h
ipsec: update MAX_AH_AUTH_LEN to support sha512
2011-01-13 21:48:25 -08:00
arp.h
net: Add ->neigh_lookup() operation to dst_ops
2011-07-18 00:40:17 -07:00
atmclip.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
ax25.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
ax88796.h
cfg80211-wext.h
cfg80211: remove unused wext handler exports
2011-08-08 14:26:29 -04:00
cfg80211.h
nl80211/cfg80211: Add extra IE configuration to AP mode setup
2011-08-12 13:45:04 -04:00
checksum.h
cipso_ipv4.h
doc: Update the email address for Paul Moore in various source files
2011-08-01 17:58:33 -07:00
cls_cgroup.h
Merge commit 'v2.6.36-rc7' into core/rcu
2010-10-07 09:43:45 +02:00
compat.h
net: Add sendmmsg socket system call
2011-05-05 11:10:14 -07:00
datalink.h
dcbevent.h
net_dcb: add application notifiers
2010-12-31 10:47:46 -08:00
dcbnl.h
dcbnl: Add CEE notification
2011-07-05 23:42:17 -07:00
dn.h
decnet: Convert to use flowidn where applicable.
2011-03-12 15:08:55 -08:00
dn_dev.h
decnet: RCU conversion and get rid of dev_base_lock
2010-11-08 13:50:08 -08:00
dn_fib.h
decnet: Convert to use flowidn where applicable.
2011-03-12 15:08:55 -08:00
dn_neigh.h
dn_nsp.h
dn_route.h
decnet: Convert to use flowidn where applicable.
2011-03-12 15:08:55 -08:00
dsa.h
dsfield.h
dst.h
rps: Add flag to skb to indicate rxhash is based on L4 tuple
2011-08-17 20:06:03 -07:00
dst_ops.h
net: Add ->neigh_lookup() operation to dst_ops
2011-07-18 00:40:17 -07:00
esp.h
ethoc.h
fib_rules.h
fib_rules: __rcu annotates ctarget
2010-10-27 11:37:32 -07:00
flow.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
garp.h
garp: remove last synchronize_rcu() call
2011-05-12 17:46:56 -04:00
gen_stats.h
Fix common misspellings
2011-03-31 11:26:23 -03:00
genetlink.h
netlink: advertise incomplete dumps
2011-06-22 16:09:45 -04:00
gre.h
PPTP: PPP over IPv4 (Point-to-Point Tunneling Protocol)
2010-08-21 23:05:39 -07:00
icmp.h
inetpeer: Move ICMP rate limiting state into inet_peer entries.
2011-02-04 15:59:53 -08:00
ieee80211_radiotap.h
mac80211: add MCS information to radiotap
2011-01-28 15:44:29 -05:00
ieee802154.h
ieee802154_netdev.h
if_inet6.h
ipv6: updates to privacy addresses per RFC 4941.
2011-08-01 18:05:00 -07:00
inet6_connection_sock.h
inet: Pass flowi to ->queue_xmit().
2011-05-08 15:28:28 -07:00
inet6_hashtables.h
inet_common.h
inet_connection_sock.h
ipv4: Make caller provide flowi4 key to inet_csk_route_req().
2011-05-18 18:32:03 -04:00
inet_ecn.h
ipv6: restore correct ECN handling on TCP xmit
2011-05-12 18:52:14 -04:00
inet_frag.h
inet_hashtables.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
inet_sock.h
ipv4: route non-local sources for raw socket
2011-08-07 22:52:32 -07:00
inet_timewait_sock.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
inetpeer.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
ip.h
ipv4: Add ip_defrag() agent IP_DEFRAG_AF_PACKET.
2011-07-05 22:34:52 -07:00
ip6_checksum.h
ip6_fib.h
ipv6: Get rid of rt6i_nexthop macro.
2011-07-17 23:11:35 -07:00
ip6_route.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
ip6_tunnel.h
tunnels: add _rcu annotations
2010-10-25 13:09:45 -07:00
ip_fib.h
ipv4: Call fib_select_default() only when actually necessary.
2011-04-14 15:05:22 -07:00
ip_vs.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
ipcomp.h
ipconfig.h
ipip.h
tunnels: add __rcu annotations
2010-10-27 11:37:32 -07:00
ipv6.h
ipv6: make fragment identifications less predictable
2011-07-21 21:25:58 -07:00
ipx.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
iw_handler.h
Fix common misspellings
2011-03-31 11:26:23 -03:00
lapb.h
lib80211.h
lib80211: remove exports for functions not called by other modules
2011-08-09 15:42:36 -04:00
llc.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h
bonding,llc: Fix structure sizeof incompatibility for some PDUs
2011-05-13 15:13:24 -04:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mac80211.h
mac80211: remove offchannel_tx API
2011-08-08 16:04:05 -04:00
mip6.h
mld.h
ndisc.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
neighbour.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
net_namespace.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
net_ratelimit.h
net: Kill ratelimit.h dependency in linux/net.h
2011-05-27 13:41:33 -04:00
netdma.h
netevent.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
netlabel.h
doc: Update the email address for Paul Moore in various source files
2011-08-01 17:58:33 -07:00
netlink.h
netlink: advertise incomplete dumps
2011-06-22 16:09:45 -04:00
netrom.h
nexthop.h
nfc.h
NFC: add nfc generic netlink interface
2011-07-05 15:26:57 -04:00
nl802154.h
p8022.h
ping.h
net: ping: fix build failure
2011-05-17 14:16:58 -04:00
pkt_cls.h
net: Fix range checks in tcf_valid_offset().
2010-12-21 12:43:16 -08:00
pkt_sched.h
net: sched: constify tcf_proto and tc_action
2011-07-06 02:52:16 -07:00
protocol.h
net: change netdev->features to u32
2011-01-24 15:32:47 -08:00
psnap.h
raw.h
include/net/raw.h: Convert raw_seq_private macro to inline
2010-09-08 13:42:22 -07:00
rawv6.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
red.h
sched: remove unused backlog in RED stats
2011-01-12 19:00:39 -08:00
regulatory.h
cfg80211: Fix regulatory bug with multiple cards and delays
2010-11-22 15:48:51 -05:00
request_sock.h
rose.h
rose: Add length checks to CALL_REQUEST parsing
2011-03-27 17:59:04 -07:00
route.h
ipv4: Pass explicit destination address to rt_bind_peer().
2011-05-18 18:42:43 -04:00
rtnetlink.h
rtnetlink: Compute and store minimum ifinfo dump size
2011-06-09 20:38:07 -07:00
sch_generic.h
net: sched: constify tcf_proto and tc_action
2011-07-06 02:52:16 -07:00
scm.h
Scm: Remove unnecessary pid & credential references in Unix socket's send and receive path
2011-08-24 19:41:13 -07:00
secure_seq.h
net: Compute protocol sequence numbers and fragment IDs using MD5.
2011-08-06 18:33:19 -07:00
slhc_vj.h
snmp.h
snmp: reduce percpu needs by 50%
2011-06-11 16:23:59 -07:00
sock.h
rps: Add flag to skb to indicate rxhash is based on L4 tuple
2011-08-17 20:06:03 -07:00
stp.h
tcp.h
tcp: RFC2988bis + taking RTT sample from 3WHS for the passive open side
2011-06-08 17:05:30 -07:00
tcp_states.h
timewait_sock.h
timewait_sock: Create and use getpeer op.
2010-12-01 18:09:13 -08:00
transp_v6.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
udp.h
udp: Switch to ip_finish_skb
2011-03-01 12:35:03 -08:00
udplite.h
udp: Switch to ip_finish_skb
2011-03-01 12:35:03 -08:00
wext.h
wimax.h
net: wimax: Remove of unused 'rfkill_input' pointer
2011-06-24 17:50:44 -07:00
wpan-phy.h
Fix common misspellings
2011-03-31 11:26:23 -03:00
x25.h
X25 remove bkl in subscription ioctls
2010-11-28 11:12:20 -08:00
x25device.h
xfrm.h
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-3.6
2011-05-11 14:26:58 -04:00