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.
This commit is contained in:
Willy Tarreau 2023-07-20 16:16:05 +02:00
parent 8f72ce335a
commit 44881e5abf

View File

@ -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);