Craig Gallek
e32ea7e747
soreuseport: fast reuseport UDP socket selection
...
Include a struct sock_reuseport instance when a UDP socket binds to
a specific address for the first time with the reuseport flag set.
When selecting a socket for an incoming UDP packet, use the information
available in sock_reuseport if present.
This required adding an additional field to the UDP source address
equality function to differentiate between exact and wildcard matches.
The original use case allowed wildcard matches when checking for
existing port uses during bind. The new use case of adding a socket
to a reuseport group requires exact address matching.
Performance test (using a machine with 2 CPU sockets and a total of
48 cores): Create reuseport groups of varying size. Use one socket
from this group per user thread (pinning each thread to a different
core) calling recvmmsg in a tight loop. Record number of messages
received per second while saturating a 10G link.
10 sockets: 18% increase (~2.8M -> 3.3M pkts/s)
20 sockets: 14% increase (~2.9M -> 3.3M pkts/s)
40 sockets: 13% increase (~3.0M -> 3.4M pkts/s)
This work is based off a similar implementation written by
Ying Cai <ycai@google.com> for implementing policy-based reuseport
selection.
Signed-off-by: Craig Gallek <kraig@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-01-04 22:49:58 -05:00
..
9p
9p: switch p9_client_read() to passing struct iov_iter *
2015-04-11 22:28:27 -04:00
bluetooth
Bluetooth: Remove unnecessary HCI_ADVERTISING_INSTANCE flag
2015-12-10 00:51:49 +01:00
caif
caif: fix a signedness bug in cfpkt_iterate()
2015-02-20 17:35:14 -05:00
irda
iucv
s390/iucv: do not use arrays as argument
2015-09-21 16:03:04 -07:00
netfilter
netfilter: cttimeout: add netns support
2015-12-14 12:48:58 +01:00
netns
net: Allow accepted sockets to be bound to l3mdev domain
2015-12-18 14:43:38 -05:00
nfc
nfc: netlink: HCI event connectivity implementation
2015-12-29 19:06:20 +01:00
phonet
sctp
sctp: start t5 timer only when peer rwnd is 0 and local state is SHUTDOWN_PENDING
2015-12-06 22:31:51 -05:00
tc_act
act_connmark: Remember the struct net instead of guessing it.
2015-09-18 21:59:31 +02:00
6lowpan.h
6lowpan: add debugfs support
2015-12-10 01:25:25 +01:00
act_api.h
net_sched: make tcf_hash_destroy() static
2015-08-26 11:01:44 -07:00
addrconf.h
soreuseport: fast reuseport UDP socket selection
2016-01-04 22:49:58 -05:00
af_ieee802154.h
ieee802154: af_ieee802154: fix typo in comment.
2015-09-17 13:20:05 +02:00
af_rxrpc.h
af_unix.h
unix: avoid use-after-free in ep_remove_wait_queue
2015-11-23 12:29:58 -05:00
af_vsock.h
Revert "Merge branch 'vsock-virtio'"
2015-12-08 21:55:49 -05:00
ah.h
arp.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
atmclip.h
ax25.h
ax25: Stop using sock->sk_protinfo.
2015-06-28 16:55:44 -07:00
ax88796.h
bond_3ad.h
bonding: simplify / unify event handling code for 3ad mode.
2015-11-02 22:52:24 -05:00
bond_alb.h
bond_options.h
bonding: convert num_grat_arp to the new bonding option API
2015-07-27 01:05:24 -07:00
bonding.h
bonding: implement lower state change propagation
2015-12-03 11:49:27 -05:00
busy_poll.h
net: un-inline sk_busy_loop()
2015-11-18 16:17:38 -05:00
cfg80211-wext.h
cfg80211.h
cfg80211: Add support for aborting an ongoing scan
2015-12-04 14:43:32 +01:00
cfg802154.h
nl802154: add support for security layer
2015-09-30 13:16:44 +02:00
checksum.h
rco: Clean up casting errors
2015-12-13 23:57:45 -05:00
cipso_ipv4.h
cipso: don't use IPCB() to locate the CIPSO IP option
2015-02-11 14:46:37 -05:00
cls_cgroup.h
net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
2015-12-08 22:02:33 -05:00
codel.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-05-13 14:31:43 -04:00
compat.h
net: switch importing msghdr from userland to {compat_,}import_iovec()
2015-04-09 00:02:26 -04:00
datalink.h
dcbevent.h
dcbnl.h
net/dcb: Add IEEE QCN attribute
2015-03-06 21:50:02 -05:00
dn.h
dn_dev.h
dn_fib.h
dn_neigh.h
netfilter: Pass net into okfn
2015-09-17 17:18:37 -07:00
dn_nsp.h
dn_route.h
dsa.h
net: dsa: remove DSA link polling
2015-12-07 16:35:49 -05:00
dsfield.h
dst.h
net: fix IP early demux races
2015-12-14 23:52:00 -05:00
dst_metadata.h
tun_dst: Fix potential NULL dereference
2015-11-04 21:59:22 -05:00
dst_ops.h
ipv4, ipv6: Pass net into __ip_local_out and __ip6_local_out
2015-10-08 04:27:02 -07:00
esp.h
ethoc.h
net/ethoc: support big-endian register layout
2015-09-23 15:33:15 -07:00
fib_rules.h
net: ipv6: use common fib_default_rule_pref
2015-09-09 14:19:50 -07:00
firewire.h
flow.h
net: Rename FLOWI_FLAG_VRFSRC to FLOWI_FLAG_L3MDEV_SRC
2015-10-07 04:27:42 -07:00
flow_dissector.h
flow_dissector: Don't use bit fields.
2015-09-01 16:46:08 -07:00
flowcache.h
fou.h
garp.h
gen_stats.h
genetlink.h
netlink: add a start callback for starting a netlink dump
2015-12-15 23:25:20 -05:00
geneve.h
geneve: Add geneve_get_rx_port support
2015-12-16 10:58:56 -05:00
gre.h
gre: Remove support for sharing GRE protocol hook.
2015-08-10 14:03:54 -07:00
gro_cells.h
gro_cells: remove spinlock protecting receive queues
2015-08-31 15:17:17 -07:00
gue.h
icmp.h
ieee80211_radiotap.h
ieee802154_netdev.h
nl802154: add support for security layer
2015-09-30 13:16:44 +02:00
if_inet6.h
ipv6: do retries on stable privacy addresses
2015-03-23 22:12:09 -04:00
ila.h
ila: Add generic ILA translation facility
2015-12-15 23:25:20 -05:00
inet6_connection_sock.h
ipv6: remove obsolete inet6 functions
2015-10-03 04:32:42 -07:00
inet6_hashtables.h
ipv6: get rid of __inet6_hash()
2015-03-18 22:00:35 -04:00
inet_common.h
net: avoid NULL deref in inet_ctl_sock_destroy()
2015-11-02 22:46:09 -05:00
inet_connection_sock.h
tcp/dccp: fix hashdance race for passive sessions
2015-10-23 05:42:21 -07:00
inet_ecn.h
inet_frag.h
net: fix percpu memory leaks
2015-11-02 22:47:14 -05:00
inet_hashtables.h
tcp/dccp: fix hashdance race for passive sessions
2015-10-23 05:42:21 -07:00
inet_sock.h
net: Allow accepted sockets to be bound to l3mdev domain
2015-12-18 14:43:38 -05:00
inet_timewait_sock.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-10-20 06:08:27 -07:00
inetpeer.h
inet: tcp: fix inetpeer_set_addr_v4()
2015-12-16 00:14:12 -05:00
ip.h
ipv4: Pass struct net into ip_defrag and ip_check_defrag
2015-10-12 19:44:16 -07:00
ip6_checksum.h
ip6_fib.h
ipv6: Check rt->dst.from for the DST_NOCACHE route
2015-11-15 17:12:37 -05:00
ip6_route.h
ipv6: kill sk_dst_lock
2015-12-03 11:32:06 -05:00
ip6_tunnel.h
net: make ip6tunnel_xmit definition conditional
2016-01-04 21:50:51 -05:00
ip_fib.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-11-03 13:41:45 -05:00
ip_tunnels.h
ip_tunnel: Move stats update to iptunnel_xmit()
2015-12-25 23:32:23 -05:00
ip_vs.h
ipvs: Remove skb_sknet
2015-09-24 09:34:43 +09:00
ipcomp.h
ipconfig.h
ipv6.h
ipv6: add ipv6_addr_prefix_copy
2015-12-10 12:55:28 +01:00
ipx.h
iw_handler.h
wext: add checked wrappers for adding events/points to streams
2015-02-28 21:31:12 +01:00
l3mdev.h
net: l3mdev: Add master device lookup by index
2015-12-18 14:43:38 -05:00
lapb.h
lib80211.h
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
lwtunnel.h
dst: Pass net into dst->output
2015-10-08 04:27:03 -07:00
mac80211.h
mac80211: add new IEEE80211_VIF_GET_NOA_UPDATE flag
2015-12-04 14:43:32 +01:00
mac802154.h
6lowpan: cleanup lowpan_header_decompress
2015-10-21 00:49:24 +02:00
mip6.h
mld.h
mpls.h
mpls_iptunnel.h
mpls: multipath route support
2015-10-23 06:26:42 -07:00
mrp.h
ndisc.h
Revert "ipv6: ndisc: inherit metadata dst when creating ndisc requests"
2015-12-01 15:07:59 -05:00
neighbour.h
net: add explicit logging and stat for neighbour table overflow
2015-08-10 13:46:21 -07:00
net_namespace.h
netfilter: cttimeout: add netns support
2015-12-14 12:48:58 +01:00
net_ratelimit.h
netevent.h
netlabel.h
netlink.h
netlink: add nla_get for le32 and le64
2015-09-30 13:16:44 +02:00
netprio_cgroup.h
net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
2015-12-08 22:02:33 -05:00
netrom.h
nexthop.h
nl802154.h
nl802154: add support for security layer
2015-09-30 13:16:44 +02:00
p8022.h
ping.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
pkt_cls.h
pkt_sched.h
net: sched: consolidate tc_classify{,_compat}
2015-08-27 14:18:48 -07:00
protocol.h
psnap.h
raw.h
rawv6.h
red.h
regulatory.h
request_sock.h
net: add inet_sk_transparent() helper
2015-12-22 17:03:05 -05:00
rose.h
route.h
net: Add source address lookup op for VRF
2015-10-07 04:27:44 -07:00
rtnetlink.h
netlink: Rightsize IFLA_AF_SPEC size calculation
2015-10-21 19:15:20 -07:00
sch_generic.h
net_sched: fix qdisc_tree_decrease_qlen() races
2015-12-03 14:59:05 -05:00
scm.h
secure_seq.h
slhc_vj.h
snmp.h
sock.h
soreuseport: define reuseport groups
2016-01-04 22:49:58 -05:00
sock_reuseport.h
soreuseport: define reuseport groups
2016-01-04 22:49:58 -05:00
Space.h
stp.h
switchdev.h
switchdev: Pass original device to port netdev driver
2015-12-15 11:58:20 -05:00
tcp.h
net: add inet_sk_transparent() helper
2015-12-22 17:03:05 -05:00
tcp_memcontrol.h
tcp_states.h
inet: add TCP_NEW_SYN_RECV state
2015-03-12 22:58:12 -04:00
timewait_sock.h
inet: remove BUG_ON() in twsk_destructor()
2015-07-09 15:12:20 -07:00
transp_v6.h
tso.h
net: tso: add support for IPv6
2015-10-26 22:24:22 -07:00
udp.h
soreuseport: fast reuseport UDP socket selection
2016-01-04 22:49:58 -05:00
udp_tunnel.h
ip_tunnel: Move stats update to iptunnel_xmit()
2015-12-25 23:32:23 -05:00
udplite.h
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
2015-02-04 01:34:15 -05:00
vsock_addr.h
vxlan.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-12-17 22:08:28 -05:00
wext.h
wimax.h
x25.h
x25device.h
xfrm.h
xfrm: add rcu protection to sk->sk_policy[]
2015-12-11 19:22:06 -05:00