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 <w.dauchy@criteo.com>
This commit is contained in:
William Dauchy 2019-12-28 15:36:02 +01:00 committed by Willy Tarreau
parent 125ad1f343
commit 3894d97fb8
2 changed files with 6 additions and 0 deletions

View File

@ -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 <delay in milliseconds>
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

View File

@ -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) {