]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
x86/apic: Reduce cache line misses in __x2apic_send_IPI_mask()
authorEric Dumazet <edumazet@google.com>
Thu, 7 Oct 2021 14:35:56 +0000 (07:35 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 29 Oct 2021 08:02:17 +0000 (10:02 +0200)
commitcc95a07fef06a2c7917acd827b3a8322772969eb
treed0909294b4cc76eaf9f9a9155b2bed203edf0c01
parent3906fe9bb7f1a2c8667ae54e967dc8690824f4ea
x86/apic: Reduce cache line misses in __x2apic_send_IPI_mask()

Using per-cpu storage for @x86_cpu_to_logical_apicid is not optimal.

Broadcast IPI will need at least one cache line per cpu to access this
field.

__x2apic_send_IPI_mask() is using standard bitmask operators.

By converting x86_cpu_to_logical_apicid to an array, we divide by 16x
number of needed cache lines, because we find 16 values per cache
line. CPU prefetcher can kick nicely.

Also move @cluster_masks to READ_MOSTLY section to avoid false sharing.

Tested on a dual socket host with 256 cpus, cost for a full broadcast
is now 11 usec instead of 33 usec.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20211007143556.574911-1-eric.dumazet@gmail.com
arch/x86/kernel/apic/x2apic_cluster.c