Welcome! Log In Create A New Profile

Advanced

[PATCH] BUG/MEDIUM: fix a 100% cpu usage with cpu-map and nbthread/nbproc

Posted by Cyril Bonté 
Krishna Kumar reported a 100% cpu usage with a configuration using
cpu-map and a high number of threads,

Indeed, this minimal configuration to reproduce the issue :
global
nbthread 40
cpu-map auto:1/1-40 0-39

frontend test
bind :8000

This is due to a wrong type in a shift operator (int vs unsigned long int),
causing an endless loop while applying the cpu affinity on threads. The same
issue may also occur with nbproc under FreeBSD. This commit addresses both
cases.

This patch must be backported to 1.8.
---
src/haproxy.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/haproxy.c b/src/haproxy.c
index 8785b9f94..0c823c497 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -2837,7 +2837,7 @@ int main(int argc, char **argv)
CPU_ZERO(&cpuset);
while ((i = ffsl(cpu_map)) > 0) {
CPU_SET(i - 1, &cpuset);
- cpu_map &= ~(1 << (i - 1));
+ cpu_map &= ~(1UL << (i - 1));
}
ret = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(cpuset), &cpuset);
}
@@ -3037,7 +3037,7 @@ int main(int argc, char **argv)

while ((j = ffsl(cpu_map)) > 0) {
CPU_SET(j - 1, &cpuset);
- cpu_map &= ~(1 << (j - 1));
+ cpu_map &= ~(1UL << (j - 1));
}
pthread_setaffinity_np(threads,
sizeof(cpuset), &cpuset);
--
2.11.0
On Mon, Mar 12, 2018 at 09:47:39PM +0100, Cyril Bonté wrote:
> Krishna Kumar reported a 100% cpu usage with a configuration using
> cpu-map and a high number of threads,
(...)

Patch applied, thank you Cyril!
Willy
Sorry, only registered users may post in this forum.

Click here to login