1 #ifndef _GNU_SOURCE 2 #define _GNU_SOURCE 3 #endif 4 5 #include <unistd.h> 6 #include <errno.h> 7 #include <numa.h> 8 #include <sched.h> 9 #include <sys/stat.h> 10 #include <assert.h> 11 12 /*----------------------------------------------------------------------------*/ GetNumCPUs()13int GetNumCPUs() 14 { 15 return sysconf(_SC_NPROCESSORS_ONLN); 16 } 17 /*----------------------------------------------------------------------------*/ 18 int CoreAffinitize(int cpu)19CoreAffinitize(int cpu) 20 { 21 cpu_set_t *cmask; 22 struct bitmask *bmask; 23 size_t n; 24 int ret; 25 26 n = GetNumCPUs(); 27 28 if (cpu < 0 || cpu >= (int) n) { 29 errno = -EINVAL; 30 return -1; 31 } 32 33 cmask = CPU_ALLOC(n); 34 if (cmask == NULL) 35 return -1; 36 37 CPU_ZERO_S(n, cmask); 38 CPU_SET_S(cpu, n, cmask); 39 40 ret = sched_setaffinity(0, n, cmask); 41 42 CPU_FREE(cmask); 43 44 if (numa_max_node() == 0) 45 return ret; 46 47 bmask = numa_bitmask_alloc(16); 48 assert(bmask); 49 50 numa_bitmask_setbit(bmask, cpu %2); 51 numa_set_membind(bmask); 52 numa_bitmask_free(bmask); 53 54 return ret; 55 } 56