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