From: Willy Tarreau Date: Thu, 20 Jul 2023 14:16:05 +0000 (+0200) Subject: MINOR: cpu-topo: add detection of online CPUs on FreeBSD X-Git-Tag: v3.2-dev8~84 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=44881e5abf0dda3c631786296410053dd48264d4;p=thirdparty%2Fhaproxy.git MINOR: cpu-topo: add detection of online CPUs on FreeBSD On FreeBSD we can detect online CPUs at least by doing the bitwise-OR of the CPUs of all domains, so we're using this and adding this detection to ha_cpuset_detect_online(). If we find simpler later, we can always rework it, but it's reasonably inexpensive since we only check existing domains. --- diff --git a/src/cpu_topo.c b/src/cpu_topo.c index ddf45e6ff..3b1d29b8d 100644 --- a/src/cpu_topo.c +++ b/src/cpu_topo.c @@ -35,7 +35,30 @@ int ha_cpuset_detect_online(struct hap_cpuset *set) ha_cpuset_zero(set); } -#else // !__linux__ +#elif defined(__FreeBSD__) + + struct hap_cpuset node_cpu_set; + int ndomains, domain; + size_t len = sizeof(ndomains); + + ha_cpuset_zero(set); + + /* retrieve the union of NUMA nodes as online CPUs */ + if (sysctlbyname("vm.ndomains", &ndomains, &len, NULL, 0) == 0) { + BUG_ON(ndomains > MAXMEMDOM); + + for (domain = 0; domain < ndomains; domain++) { + ha_cpuset_zero(&node_cpu_set); + + if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_DOMAIN, domain, + sizeof(node_cpu_set.cpuset), &node_cpu_set.cpuset) == -1) + continue; + + ha_cpuset_or(set, &node_cpu_set); + } + } + +#else // !__linux__, !__FreeBSD__ ha_cpuset_zero(set);