1/* 2 * cpuset.h -- CPU affinity. 3 * 4 * Copyright (c) 2020, NLnet Labs. All rights reserved. 5 * 6 * See LICENSE for the license. 7 * 8 */ 9#ifndef CPUSET_H 10#define CPUSET_H 11 12#ifdef HAVE_SCHED_H 13# include <sched.h> 14#endif 15 16#ifdef HAVE_SYS_CPUSET_H 17# include <sys/cpuset.h> 18#endif 19 20/* 21 * CPU affinity is currently only supported on Linux and FreeBSD. Other 22 * operating systems may be supported in the future, but not all operating 23 * systems offer the same functionality. OpenBSD for example does not support 24 * any kind of CPU affinity, while Solaris offers specifying a set of 25 * processors, but a processor can only be part of a single set. 26 * 27 * NOTE: On macOS Mojave, processor_set_create returned KERN_FAILURE which 28 * indicates processor allocation is not supported by the operating 29 * system. 30 */ 31 32#ifndef HAVE_CPUSET_T 33#ifdef HAVE_CPU_SET_T 34#define HAVE_CPUSET_T 1 35typedef cpu_set_t cpuset_t; 36#endif 37#endif 38 39#ifndef HAVE_CPUID_T 40#ifdef __linux__ 41typedef int cpuid_t; 42#elif defined(__FreeBSD__) || defined(__gnu_hurd__) || defined(__DragonFly__) 43typedef size_t cpuid_t; 44#else 45typedef size_t cpuid_t; 46#endif 47#endif 48 49#ifndef HAVE_CPUSET_CREATE 50cpuset_t *cpuset_create(void); 51#endif 52 53#ifndef HAVE_CPUSET_DESTROY 54void cpuset_destroy(cpuset_t *set); 55#endif 56 57#ifndef HAVE_CPUSET_ZERO 58void cpuset_zero(cpuset_t *set); 59#endif 60 61#ifndef HAVE_CPUSET_SET 62int cpuset_set(cpuid_t cpu, cpuset_t *set); 63#endif 64 65#ifndef HAVE_CPUSET_CLR 66int cpuset_clr(cpuid_t cpu, cpuset_t *set); 67#endif 68 69#ifndef HAVE_CPUSET_ISSET 70int cpuset_isset(cpuid_t cpu, const cpuset_t *set); 71#endif 72 73#ifndef HAVE_CPUSET_SIZE 74size_t cpuset_size(const cpuset_t *set); 75#endif 76 77void cpuset_or(cpuset_t *destset, const cpuset_t *srcset); 78 79#endif /* CPUSET_H */ 80