mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-26 06:32:13 +00:00
MINOR: plock: use an ARMv8 instruction barrier for the pause instruction
As suggested by @AGSaidi in issue #958, on ARMv8 its convenient to use an "isb" instruction in pl_cpu_relax() to improve fairness. Without it I've met a few watchdog conditions on valid locks with 16 threads, indicating that some threads couldn't manage to get it in 2 seconds. I never happened again with it. In addition, the performance increased by slightly more than 5% thanks to the reduced contention. This should be backported as far as 2.2, possibly even 2.0.
This commit is contained in:
parent
a9ffc41637
commit
1e237d037b
@ -524,10 +524,21 @@
|
||||
#else
|
||||
/* generic implementations */
|
||||
|
||||
#if defined(__aarch64__)
|
||||
|
||||
/* This was shown to improve fairness on modern ARMv8 such as Neoverse N1 */
|
||||
#define pl_cpu_relax() do { \
|
||||
asm volatile("isb" ::: "memory"); \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
#define pl_cpu_relax() do { \
|
||||
asm volatile(""); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
/* full memory barrier */
|
||||
#define pl_mb() do { \
|
||||
__sync_synchronize(); \
|
||||
|
Loading…
Reference in New Issue
Block a user