CLEANUP: cfgparse: modify preprocessor guards around numa detection code

numa_detect_topology() is always define now if USE_CPU_AFFINITY is
activated. For the moment, only on Linux an actual implementation is
provided. For other platforms, it always return 0.

This change has been made to easily add implementation of NUMA detection
for other platforms. The phrasing of the documentation has also been
edited to removed the mention of Linux-only on numa-cpu-mapping
configuration option.
This commit is contained in:
Amaury Denoyelle 2021-12-15 09:48:39 +01:00
parent 740629e296
commit b09f4477f4
2 changed files with 23 additions and 12 deletions

View File

@ -1736,15 +1736,16 @@ nbthread <number>
output of "haproxy -vv".
numa-cpu-mapping
By default, if running on Linux, HAProxy inspects on startup the CPU topology
of the machine. If a multi-socket machine is detected, the affinity is
automatically calculated to run on the CPUs of a single node. This is done in
order to not suffer from the performance penalties caused by the inter-socket
bus latency. However, if the applied binding is non optimal on a particular
architecture, it can be disabled with the statement 'no numa-cpu-mapping'.
This automatic binding is also not applied if a nbthread statement is present
in the configuration, or the affinity of the process is already specified,
for example via the 'cpu-map' directive or the taskset utility.
If running on a NUMA-aware platform, HAProxy inspects on startup the CPU
topology of the machine. If a multi-socket machine is detected, the affinity
is automatically calculated to run on the CPUs of a single node. This is done
in order to not suffer from the performance penalties caused by the
inter-socket bus latency. However, if the applied binding is non optimal on a
particular architecture, it can be disabled with the statement 'no
numa-cpu-mapping'. This automatic binding is also not applied if a nbthread
statement is present in the configuration, or the affinity of the process is
already specified, for example via the 'cpu-map' directive or the taskset
utility.
pidfile <pidfile>
Writes PIDs of all daemons into file <pidfile> when daemon mode or writes PID

View File

@ -2212,7 +2212,9 @@ int readcfgfile(const char *file)
return err_code;
}
#if defined(USE_THREAD) && defined(__linux__) && defined USE_CPU_AFFINITY
#if defined(USE_THREAD) && defined USE_CPU_AFFINITY
#if defined(__linux__)
/* filter directory name of the pattern node<X> */
static int numa_filter(const struct dirent *dir)
{
@ -2372,7 +2374,15 @@ static int numa_detect_topology()
return ha_cpuset_count(&node_cpu_set);
}
#endif /* __linux__ && USE_CPU_AFFINITY */
#else
static int numa_detect_topology()
{
return 0;
}
#endif
#endif /* USE_THREAD && USE_CPU_AFFINITY */
/*
* Returns the error code, 0 if OK, or any combination of :
@ -2425,7 +2435,7 @@ int check_config_validity()
#if defined(USE_THREAD)
{
int numa_cores = 0;
#if defined(__linux__) && defined USE_CPU_AFFINITY
#if defined(USE_CPU_AFFINITY)
if (global.numa_cpu_mapping && !thread_cpu_mask_forced())
numa_cores = numa_detect_topology();
#endif