diff --git a/doc/configuration.txt b/doc/configuration.txt index b1fbd6480..2620706c1 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -1736,15 +1736,16 @@ nbthread 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 Writes PIDs of all daemons into file when daemon mode or writes PID diff --git a/src/cfgparse.c b/src/cfgparse.c index 06352e294..7b350529d 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -2212,7 +2212,9 @@ err: 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 */ 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