loadbalancer: support setting nbthread with variable haproxy_threads

Threads are the recommended way to scale CPU performance since HAProxy
1.8.

Official documentation says: « While "nbproc" historically used to be the only
way to use multiple processors, it also involved a number of shortcomings
related to the lack of synchronization between processes (health-checks, peers,
stick-tables, stats, ...) which do not affect threads. As such, any modern
configuration is strongly encouraged to migrate away from "nbproc" to
"nbthread". ».

While more recent versions of HAProxy automatically detect the number of
available CPU and enable threads for them, it can be useful to explicitely set
the value.

In this patch, setting cpu-map for threads is not supported.

Change-Id: Id917c70f3dbe52f24f25d9403ba8151729e8966b
This commit is contained in:
Léo Gillot-Lamure 2023-05-18 19:09:43 +02:00 committed by Michal Nasiadka
parent e0b212d72d
commit e043828601
3 changed files with 9 additions and 0 deletions

View File

@ -51,6 +51,8 @@ keepalived_traffic_mode: "multicast"
# Extended global configuration, optimization options.
haproxy_max_connections: 40000
haproxy_threads: 1
# More than 1 process is deprecated by HAProxy, prefer haproxy_threads
haproxy_processes: 1
haproxy_process_cpu_map: "no"
# Matches the mariadb 10000 max connections limit

View File

@ -7,6 +7,7 @@ global
log {{ syslog_server }}:{{ syslog_udp_port }} {{ syslog_haproxy_facility }}
maxconn {{ haproxy_max_connections }}
nbproc {{ haproxy_processes }}
nbthread {{ haproxy_threads }}
{% if (haproxy_processes | int > 1) and (haproxy_process_cpu_map | bool) %}
{% for cpu_idx in range(0, haproxy_processes) %}
cpu-map {{ cpu_idx + 1 }} {{ cpu_idx }}

View File

@ -0,0 +1,6 @@
---
features:
- |
HAProxy supports setting nbthread via variable haproxy_threads.
Threads are recommended instead of processes since HAProxy 1.8.
They cannot be used both at the same time.