The traditional LL/SC atomics perform poorly on modern arm64 systems with
authorkettenis <kettenis@openbsd.org>
Tue, 2 Jul 2024 10:25:16 +0000 (10:25 +0000)
committerkettenis <kettenis@openbsd.org>
Tue, 2 Jul 2024 10:25:16 +0000 (10:25 +0000)
commitdca69f4c0deda3c9277bed027b2481f69268289d
tree6915da34a60f23c69221399ae5a72159f1374b9a
parent26a40d9e37747a58e21e4c9ff3865c199d9d9c6f
The traditional LL/SC atomics perform poorly on modern arm64 systems with
many CPU cores.  With the recent conversion of the sched lock to a mutex
some systems appear to hang if the sched lock is contended.  ARMv8.1
introduced an LSE feature that provides atomic instructions such as CAS
that perform much better.  Unfortunately these can't be used on older
ARMv8.0 systems.  Use -moutline-atomics to make the compiler generate
function calls for atomic operations and provide an implementation for
the functions we use in the kernel that use LSE when available and fall
back on LL/SC.

Fixes regressions seen on Ampere Altra and Apple M2 Pro/Max/Ultra since
the conversion of the sched lock to a mutex.

tested by claudio@, phessler@, mpi@
ok patrick@
sys/arch/arm64/arm64/cpu.c
sys/arch/arm64/arm64/lse.S [new file with mode: 0644]
sys/arch/arm64/conf/Makefile.arm64
sys/arch/arm64/conf/files.arm64