Added matching of CPU to a socket CPU mask. This is useful for TCP listeners and unconnected UDP. This works with SO_REUSPORT to steer packets to listener sockets based on CPU affinity. These patches allow steering packets to listeners based on numa locality. This is only useful for passive connections.
v2: - Add cache alignment for fields used in socket lookup in sock_common - Added UDP test results Tested: 200 TCP_RR with --r 512,512 streams ran against an echo server with that sets both SO_REUSEPORT and SO_INCOMING_CPU_MASK. In the test case used taskset to pin an instance to a set of CPUs corresponding to a numa node and set SO_INCOMING_CPU_MASK to the same set of CPUS. CPU utilization is reported from the echo server side. IPv4 No INCOMING_CPU_MASK 83.48% CPU utilization 1627173 tps 106/185/382 50/90/99% latencies With INCOMING_CPU_MASK 77.61% CPU utilization 1669853 tps 103/181/378 50/90/99% latencies IPv6 No INCOMING_CPU_MASK 84.82% CPU utilization 1551730 tps 111/195/392 50/90/99% latencies With INCOMING_CPU_MASK 79.25% CPU utilization 1571911 tps 110/191/381 50/90/99% latencies Tested: 200 UDP_RR with --r 512,512 streams ran against an echo server with that sets both SO_REUSEPORT and SO_INCOMING_CPU_MASK. In the test case used taskset to pin an instance to a set of CPUs corresponding to a numa node and set SO_INCOMING_CPU_MASK to the same set of CPUS. IPv4 No INCOMING_CPU_MASK 54.76% CPU utilization 1603752.3 tps 95/217/753 50/90/99% latencies With INCOMING_CPU_MASK 53.25% CPU utilization 1717618 tps 117/221/502 50/90/99% latencies IPv6 No INCOMING_CPU_MASK 61.62% CPU utilization 1276757 tps 125/279/629 50/90/99% latencies With INCOMING_CPU_MASK 66.63% CPU utilization 1314527 tps 149/318/564 50/90/99% latencies *** BLURB HERE *** Tom Herbert (3): net: Add cache alignment in sock_common for socket lookup fields kernel: Make compat bitmap functions externally visible net: Add incoming CPU mask to sockets arch/alpha/include/uapi/asm/socket.h | 2 + arch/avr32/include/uapi/asm/socket.h | 2 + arch/cris/include/uapi/asm/socket.h | 2 + arch/frv/include/uapi/asm/socket.h | 2 + arch/ia64/include/uapi/asm/socket.h | 2 + arch/m32r/include/uapi/asm/socket.h | 2 + arch/mips/include/uapi/asm/socket.h | 2 + arch/mn10300/include/uapi/asm/socket.h | 2 + arch/parisc/include/uapi/asm/socket.h | 2 + arch/powerpc/include/uapi/asm/socket.h | 2 + arch/s390/include/uapi/asm/socket.h | 2 + arch/sparc/include/uapi/asm/socket.h | 2 + arch/xtensa/include/uapi/asm/socket.h | 2 + include/linux/compat.h | 2 + include/net/sock.h | 39 ++++++++++++++++- include/uapi/asm-generic/socket.h | 2 + kernel/compat.c | 7 ++- net/compat.c | 56 ++++++++++++++++++++++++ net/core/sock.c | 80 ++++++++++++++++++++++++++++++++++ net/ipv4/inet_hashtables.c | 3 ++ net/ipv4/udp.c | 6 +++ net/ipv6/inet6_hashtables.c | 3 ++ net/ipv6/udp.c | 3 ++ 23 files changed, 224 insertions(+), 3 deletions(-) -- 1.8.1 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html