From b957e2f3ef63e1846988bed9d2bbb42213b29fbf Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 7 Feb 2025 17:33:49 +0100 Subject: [PATCH] IMPORT: plock: use cpu_relax() for a shorter time in EBO Tests have shown that on modern CPUs it's interesting to wait a bit less in cpu_relax(). Till now we were looping down to 60 iterations and then switching to just barriers. Increasing the threshold to 90 iterations left before getting out of the loop improved the average and max time to grab a write lock by a few percent (e.g. 10% at 1us, 20% at 256ns or lower). Higher values tend to progressively lose that gain so let's stick to this one. This was measured on an EPYC 74F3 like previous measurements that initially led to this value, and the value might possibly depend on the mask applied to the loop counter. This is plock commit 74ca0a7307fa6aec3139f27d3b7e534e1bdb748e. --- include/import/plock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/import/plock.h b/include/import/plock.h index d0126a7a3..bc281cb8d 100644 --- a/include/import/plock.h +++ b/include/import/plock.h @@ -93,7 +93,7 @@ static unsigned long __pl_wait_unlock_long(const unsigned long *lock, const unsi loops -= 32768; } #endif - for (; loops >= 60; loops --) + for (; loops >= 90; loops --) pl_cpu_relax(); for (; loops >= 1; loops--)