From: William Dauchy Date: Sat, 28 Dec 2019 14:36:02 +0000 (+0100) Subject: MINOR: config: disable busy polling on old processes X-Git-Tag: v2.2-dev1~138 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3894d97fb8b66e247c5a326c6b3aa75816c597dc;p=thirdparty%2Fhaproxy.git MINOR: config: disable busy polling on old processes in the context of seamless reload and busy polling, older processes will create unecessary cpu conflicts; we can assume there is no need for busy polling for old processes which are waiting to be terminated. This patch is not a bug fix itself but might be a good stability improvment when you are un the context of frequent seamless reloads with a high "hard-stop-after" value; for that reasons I think this patch should be backported in all 2.x versions. Signed-off-by: William Dauchy --- diff --git a/doc/configuration.txt b/doc/configuration.txt index bfc8b9030e..9bc7d7150b 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -1476,6 +1476,10 @@ busy-polling prefixing it with the "no" keyword. It is ignored by the "select" and "poll" pollers. + This option is automatically disabled on old processes in the context of + seamless reload; it avoids too much cpu conflicts when multiple processes + stay around for some time waiting for the end of their current connections. + max-spread-checks By default, haproxy tries to spread the start of health checks across the smallest health check interval of all the servers in a farm. The principle is diff --git a/src/proxy.c b/src/proxy.c index a5570dafa0..9448d1a3e7 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -1116,6 +1116,8 @@ void soft_stop(void) struct task *task; stopping = 1; + /* disable busy polling to avoid cpu eating for the new process */ + global.tune.options &= ~GTUNE_BUSY_POLLING; if (tick_isset(global.hard_stop_after)) { task = task_new(MAX_THREADS_MASK); if (task) {