1 /** 2 * Copyright (C) Mellanox Technologies Ltd. 2001-2018. ALL RIGHTS RESERVED. 3 * 4 * See file LICENSE for terms. 5 */ 6 7 #ifndef UCS_NUMA_H_ 8 #define UCS_NUMA_H_ 9 10 #ifdef HAVE_CONFIG_H 11 # include "config.h" 12 #endif 13 14 #include <ucs/debug/memtrack.h> 15 16 #if HAVE_NUMA 17 #include <numaif.h> 18 #include <numa.h> 19 20 #if HAVE_STRUCT_BITMASK 21 # define numa_nodemask_p(_nm) ((_nm)->maskp) 22 # define numa_nodemask_size(_nm) ((_nm)->size) 23 # define numa_get_thread_node_mask(_nmp) \ 24 { \ 25 numa_free_nodemask(*(_nmp)); \ 26 *(_nmp) = numa_get_run_node_mask(); \ 27 } 28 #else 29 # define numa_allocate_nodemask() ucs_malloc(sizeof(nodemask_t), "nodemask") 30 # define numa_free_nodemask(_nm) ucs_free(_nm) 31 # define numa_nodemask_p(_nm) ((_nm)->maskp.n) 32 # define numa_nodemask_size(_nm) ((size_t)NUMA_NUM_NODES) 33 # define numa_bitmask_clearall(_nm) nodemask_zero(&(_nm)->maskp) 34 # define numa_bitmask_setbit(_nm, _n) nodemask_set(&(_nm)->maskp, _n) 35 # define numa_get_thread_node_mask(_nmp) \ 36 { \ 37 (*(_nmp))->maskp = numa_get_run_node_mask(); \ 38 } 39 40 struct bitmask { 41 nodemask_t maskp; 42 }; 43 #endif /* HAVE_STRUCT_BITMASK */ 44 45 #endif /* HAVE_NUMA */ 46 47 48 #define UCS_NUMA_MIN_DISTANCE 10 49 50 51 typedef enum { 52 UCS_NUMA_POLICY_DEFAULT, 53 UCS_NUMA_POLICY_BIND, 54 UCS_NUMA_POLICY_PREFERRED, 55 UCS_NUMA_POLICY_LAST 56 } ucs_numa_policy_t; 57 58 59 extern const char *ucs_numa_policy_names[]; 60 61 62 int ucs_numa_node_of_cpu(int cpu); 63 64 65 #endif 66