linux/arch
Eric Dumazet 2c8c56e15d net: introduce SO_INCOMING_CPU
Alternative to RPS/RFS is to use hardware support for multiple
queues.

Then split a set of million of sockets into worker threads, each
one using epoll() to manage events on its own socket pool.

Ideally, we want one thread per RX/TX queue/cpu, but we have no way to
know after accept() or connect() on which queue/cpu a socket is managed.

We normally use one cpu per RX queue (IRQ smp_affinity being properly
set), so remembering on socket structure which cpu delivered last packet
is enough to solve the problem.

After accept(), connect(), or even file descriptor passing around
processes, applications can use :

 int cpu;
 socklen_t len = sizeof(cpu);

 getsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu, &len);

And use this information to put the socket into the right silo
for optimal performance, as all networking stack should run
on the appropriate cpu, without need to send IPI (RPS/RFS).

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-11-11 13:00:06 -05:00
..
alpha net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
arc The "weak" attribute is commonly used for the default version of a 2014-10-23 15:04:27 -07:00
arm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-11-01 14:53:27 -04:00
arm64 dtb: xgene: fix: Backward compatibility with older firmware 2014-11-04 17:08:42 -05:00
avr32 net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
blackfin Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
c6x irq_work: Introduce arch_irq_work_has_interrupt() 2014-09-13 18:38:07 +02:00
cris net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
frv net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
hexagon Merge branch 'locking-arch-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-10-13 15:48:00 +02:00
ia64 net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
m32r net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
m68k Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2014-10-14 03:51:22 +02:00
metag Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
microblaze microblaze: Wire up bpf syscall 2014-10-27 09:25:34 +01:00
mips net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
mn10300 net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
openrisc Merge git://git.infradead.org/users/eparis/audit 2014-10-19 16:25:56 -07:00
parisc net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
powerpc net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
s390 net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
score score: use Kbuild logic to include <asm-generic/sections.h> 2014-10-09 22:25:46 -04:00
sh sh: fix sh770x SCIF memory regions 2014-10-29 16:33:15 -07:00
sparc net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
tile Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
um Merge git://git.infradead.org/users/eparis/audit 2014-10-19 16:25:56 -07:00
unicore32 nosave: consolidate __nosave_{begin,end} in <asm/sections.h> 2014-10-09 22:26:04 -04:00
x86 fast_hash: avoid indirect function calls 2014-11-05 22:01:21 -05:00
xtensa net: introduce SO_INCOMING_CPU 2014-11-11 13:00:06 -05:00
.gitignore
Kconfig seccomp: Document two-phase seccomp and arch-provided seccomp_data 2014-09-03 14:58:17 -07:00