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 prefixing it with the "no" keyword. It is ignored by the "select" and
"poll" pollers. "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> max-spread-checks <delay in milliseconds>
By default, haproxy tries to spread the start of health checks across the 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 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; struct task *task;
stopping = 1; 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)) { if (tick_isset(global.hard_stop_after)) {
task = task_new(MAX_THREADS_MASK); task = task_new(MAX_THREADS_MASK);
if (task) { if (task) {