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". output of "haproxy -vv".
numa-cpu-mapping numa-cpu-mapping
By default, if running on Linux, HAProxy inspects on startup the CPU topology If running on a NUMA-aware platform, HAProxy inspects on startup the CPU
of the machine. If a multi-socket machine is detected, the affinity is topology of the machine. If a multi-socket machine is detected, the affinity
automatically calculated to run on the CPUs of a single node. This is done in is automatically calculated to run on the CPUs of a single node. This is done
order to not suffer from the performance penalties caused by the inter-socket in order to not suffer from the performance penalties caused by the
bus latency. However, if the applied binding is non optimal on a particular inter-socket bus latency. However, if the applied binding is non optimal on a
architecture, it can be disabled with the statement 'no numa-cpu-mapping'. particular architecture, it can be disabled with the statement 'no
This automatic binding is also not applied if a nbthread statement is present numa-cpu-mapping'. This automatic binding is also not applied if a nbthread
in the configuration, or the affinity of the process is already specified, statement is present in the configuration, or the affinity of the process is
for example via the 'cpu-map' directive or the taskset utility. already specified, for example via the 'cpu-map' directive or the taskset
utility.
pidfile <pidfile> pidfile <pidfile>
Writes PIDs of all daemons into file <pidfile> when daemon mode or writes PID 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; 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> */ /* filter directory name of the pattern node<X> */
static int numa_filter(const struct dirent *dir) static int numa_filter(const struct dirent *dir)
{ {
@ -2372,7 +2374,15 @@ static int numa_detect_topology()
return ha_cpuset_count(&node_cpu_set); 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 : * Returns the error code, 0 if OK, or any combination of :
@ -2425,7 +2435,7 @@ int check_config_validity()
#if defined(USE_THREAD) #if defined(USE_THREAD)
{ {
int numa_cores = 0; 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()) if (global.numa_cpu_mapping && !thread_cpu_mask_forced())
numa_cores = numa_detect_topology(); numa_cores = numa_detect_topology();
#endif #endif