232 typedef void (*numa_set_bind_policy_func_t)(int policy);
233
234 static sched_getcpu_func_t _sched_getcpu;
235 static numa_node_to_cpus_func_t _numa_node_to_cpus;
236 static numa_max_node_func_t _numa_max_node;
237 static numa_available_func_t _numa_available;
238 static numa_tonode_memory_func_t _numa_tonode_memory;
239 static numa_interleave_memory_func_t _numa_interleave_memory;
240 static numa_set_bind_policy_func_t _numa_set_bind_policy;
241 static unsigned long* _numa_all_nodes;
242
243 static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
244 static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
245 static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
246 static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
247 static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
248 static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
249 static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
250 static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
251 static int sched_getcpu_syscall(void);
252 public:
253 static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
254 static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
255 return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
256 }
257 static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
258 static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
259 static int numa_tonode_memory(void *start, size_t size, int node) {
260 return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
261 }
262 static void numa_interleave_memory(void *start, size_t size) {
263 if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
264 _numa_interleave_memory(start, size, _numa_all_nodes);
265 }
266 }
267 static void numa_set_bind_policy(int policy) {
268 if (_numa_set_bind_policy != NULL) {
269 _numa_set_bind_policy(policy);
270 }
271 }
|
232 typedef void (*numa_set_bind_policy_func_t)(int policy);
233
234 static sched_getcpu_func_t _sched_getcpu;
235 static numa_node_to_cpus_func_t _numa_node_to_cpus;
236 static numa_max_node_func_t _numa_max_node;
237 static numa_available_func_t _numa_available;
238 static numa_tonode_memory_func_t _numa_tonode_memory;
239 static numa_interleave_memory_func_t _numa_interleave_memory;
240 static numa_set_bind_policy_func_t _numa_set_bind_policy;
241 static unsigned long* _numa_all_nodes;
242
243 static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
244 static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
245 static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
246 static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
247 static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
248 static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
249 static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
250 static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
251 static int sched_getcpu_syscall(void);
252 static int create_tmpfile(const char* dir, size_t size, bool exec);
253 public:
254 static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
255 static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
256 return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
257 }
258 static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
259 static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
260 static int numa_tonode_memory(void *start, size_t size, int node) {
261 return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
262 }
263 static void numa_interleave_memory(void *start, size_t size) {
264 if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
265 _numa_interleave_memory(start, size, _numa_all_nodes);
266 }
267 }
268 static void numa_set_bind_policy(int policy) {
269 if (_numa_set_bind_policy != NULL) {
270 _numa_set_bind_policy(policy);
271 }
272 }
|