diff --git a/src/os.c b/src/os.c index f15a2197..a4b9602f 100644 --- a/src/os.c +++ b/src/os.c @@ -51,13 +51,13 @@ terms of the MIT license. A copy of the license can be found in the file #include #endif #endif -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__DragonFly__) #include #if __FreeBSD_version >= 1200000 #include #include -#include #endif +#include #endif #endif @@ -1267,6 +1267,24 @@ static size_t mi_os_numa_node_countx(void) { return ndomains; } +#elif defined(__DragonFly__) +static size_t mi_os_numa_nodex(void) { + // TODO DragonFlyBSD does not seem to provide any userland mean to + // check this information, even less the possibility to control + // the allocation to a logical core level's granularity, only the kernel + // is fully NUMA aware at the moment. + return 0ul; +} + +static size_t mi_os_numa_node_countx(void) { + size_t ncpus = 0, nvirtcoresperphys = 0; + size_t len = sizeof(size_t); + + if (sysctlbyname("hw.ncpu", &ncpus, &len, NULL, 0) == -1) return 0ul; + if (sysctlbyname("hw.cpu_topology_ht_ids", &nvirtcoresperphys, &len, NULL, 0) == -1) return 0ul; + + return nvirtcoresperphys * ncpus; +} #else static size_t mi_os_numa_nodex(void) { return 0;