< prev index next >

src/hotspot/os/linux/os_linux.hpp

Print this page
rev 52796 : imported patch 8213827-numa-interleave-not-respected
rev 52797 : [mq]: 8213827-tschatzl-review


 205   static void initialize_os_info();
 206   static bool os_version_is_known();
 207   static uint32_t os_version();
 208 
 209   // Stack repair handling
 210 
 211   // none present
 212 
 213  private:
 214   static void expand_stack_to(address bottom);
 215 
 216   typedef int (*sched_getcpu_func_t)(void);
 217   typedef int (*numa_node_to_cpus_func_t)(int node, unsigned long *buffer, int bufferlen);
 218   typedef int (*numa_max_node_func_t)(void);
 219   typedef int (*numa_num_configured_nodes_func_t)(void);
 220   typedef int (*numa_available_func_t)(void);
 221   typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
 222   typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
 223   typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask);
 224   typedef struct bitmask* (*numa_get_membind_func_t)(void);

 225 
 226   typedef void (*numa_set_bind_policy_func_t)(int policy);
 227   typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
 228   typedef int (*numa_distance_func_t)(int node1, int node2);
 229 
 230   static sched_getcpu_func_t _sched_getcpu;
 231   static numa_node_to_cpus_func_t _numa_node_to_cpus;
 232   static numa_max_node_func_t _numa_max_node;
 233   static numa_num_configured_nodes_func_t _numa_num_configured_nodes;
 234   static numa_available_func_t _numa_available;
 235   static numa_tonode_memory_func_t _numa_tonode_memory;
 236   static numa_interleave_memory_func_t _numa_interleave_memory;
 237   static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2;
 238   static numa_set_bind_policy_func_t _numa_set_bind_policy;
 239   static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
 240   static numa_distance_func_t _numa_distance;
 241   static numa_get_membind_func_t _numa_get_membind;


 242   static unsigned long* _numa_all_nodes;
 243   static struct bitmask* _numa_all_nodes_ptr;
 244   static struct bitmask* _numa_nodes_ptr;


 245 
 246   static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
 247   static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
 248   static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
 249   static void set_numa_num_configured_nodes(numa_num_configured_nodes_func_t func) { _numa_num_configured_nodes = func; }
 250   static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
 251   static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
 252   static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
 253   static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; }
 254   static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
 255   static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
 256   static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
 257   static void set_numa_get_membind(numa_get_membind_func_t func) { _numa_get_membind = func; }

 258   static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
 259   static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = (ptr == NULL ? NULL : *ptr); }
 260   static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = (ptr == NULL ? NULL : *ptr); }


 261   static int sched_getcpu_syscall(void);
 262  public:
 263   static int sched_getcpu()  { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
 264   static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
 265     return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
 266   }
 267   static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
 268   static int numa_num_configured_nodes() {
 269     return _numa_num_configured_nodes != NULL ? _numa_num_configured_nodes() : -1;
 270   }
 271   static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
 272   static int numa_tonode_memory(void *start, size_t size, int node) {
 273     return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
 274   }
 275   static void numa_interleave_memory(void *start, size_t size) {
 276     // Use v2 api if available
 277     if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) {
 278       _numa_interleave_memory_v2(start, size, _numa_all_nodes_ptr);





 279     } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
 280       _numa_interleave_memory(start, size, _numa_all_nodes);
 281     }
 282   }
 283   static void numa_set_bind_policy(int policy) {
 284     if (_numa_set_bind_policy != NULL) {
 285       _numa_set_bind_policy(policy);
 286     }
 287   }
 288   static int numa_distance(int node1, int node2) {
 289     return _numa_distance != NULL ? _numa_distance(node1, node2) : -1;
 290   }
 291   static int get_node_by_cpu(int cpu_id);
 292   static int get_existing_num_nodes();
 293   // Check if numa node is configured (non-zero memory node).
 294   static bool isnode_in_configured_nodes(unsigned int n) {
 295     if (_numa_bitmask_isbitset != NULL && _numa_all_nodes_ptr != NULL) {
 296       return _numa_bitmask_isbitset(_numa_all_nodes_ptr, n);
 297     } else
 298       return false;




 205   static void initialize_os_info();
 206   static bool os_version_is_known();
 207   static uint32_t os_version();
 208 
 209   // Stack repair handling
 210 
 211   // none present
 212 
 213  private:
 214   static void expand_stack_to(address bottom);
 215 
 216   typedef int (*sched_getcpu_func_t)(void);
 217   typedef int (*numa_node_to_cpus_func_t)(int node, unsigned long *buffer, int bufferlen);
 218   typedef int (*numa_max_node_func_t)(void);
 219   typedef int (*numa_num_configured_nodes_func_t)(void);
 220   typedef int (*numa_available_func_t)(void);
 221   typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
 222   typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
 223   typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask);
 224   typedef struct bitmask* (*numa_get_membind_func_t)(void);
 225   typedef struct bitmask* (*numa_get_interleave_mask_func_t)(void);
 226 
 227   typedef void (*numa_set_bind_policy_func_t)(int policy);
 228   typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
 229   typedef int (*numa_distance_func_t)(int node1, int node2);
 230 
 231   static sched_getcpu_func_t _sched_getcpu;
 232   static numa_node_to_cpus_func_t _numa_node_to_cpus;
 233   static numa_max_node_func_t _numa_max_node;
 234   static numa_num_configured_nodes_func_t _numa_num_configured_nodes;
 235   static numa_available_func_t _numa_available;
 236   static numa_tonode_memory_func_t _numa_tonode_memory;
 237   static numa_interleave_memory_func_t _numa_interleave_memory;
 238   static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2;
 239   static numa_set_bind_policy_func_t _numa_set_bind_policy;
 240   static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
 241   static numa_distance_func_t _numa_distance;
 242   static numa_get_membind_func_t _numa_get_membind;
 243   static numa_get_interleave_mask_func_t _numa_get_interleave_mask;
 244 
 245   static unsigned long* _numa_all_nodes;
 246   static struct bitmask* _numa_all_nodes_ptr;
 247   static struct bitmask* _numa_nodes_ptr;
 248   static struct bitmask* _numa_interleave_ptr;
 249   static struct bitmask* _numa_membind_ptr;
 250 
 251   static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
 252   static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
 253   static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
 254   static void set_numa_num_configured_nodes(numa_num_configured_nodes_func_t func) { _numa_num_configured_nodes = func; }
 255   static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
 256   static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
 257   static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
 258   static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; }
 259   static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
 260   static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
 261   static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
 262   static void set_numa_get_membind(numa_get_membind_func_t func) { _numa_get_membind = func; }
 263   static void set_numa_get_interleave_mask(numa_get_interleave_mask_func_t func) { _numa_get_interleave_mask = func; }
 264   static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
 265   static void set_numa_all_nodes_ptr(struct bitmask* ptr) { _numa_all_nodes_ptr = ptr; }
 266   static void set_numa_nodes_ptr(struct bitmask* ptr) { _numa_nodes_ptr = ptr; }
 267   static void set_numa_interleave_ptr(struct bitmask* ptr) { _numa_interleave_ptr = ptr; }
 268   static void set_numa_membind_ptr(struct bitmask* ptr) { _numa_membind_ptr = ptr; }
 269   static int sched_getcpu_syscall(void);
 270  public:
 271   static int sched_getcpu()  { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
 272   static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
 273     return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
 274   }
 275   static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
 276   static int numa_num_configured_nodes() {
 277     return _numa_num_configured_nodes != NULL ? _numa_num_configured_nodes() : -1;
 278   }
 279   static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
 280   static int numa_tonode_memory(void *start, size_t size, int node) {
 281     return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
 282   }
 283   static void numa_interleave_memory(void *start, size_t size) {
 284     // Use v2 api if available
 285     if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) {
 286       if (_numa_interleave_ptr != NULL) {
 287         // If externally invoked in interleave mode then use interleave bitmask.
 288         _numa_interleave_memory_v2(start, size, _numa_interleave_ptr);
 289       } else {
 290         _numa_interleave_memory_v2(start, size, _numa_membind_ptr);
 291       }
 292     } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
 293       _numa_interleave_memory(start, size, _numa_all_nodes);
 294     }
 295   }
 296   static void numa_set_bind_policy(int policy) {
 297     if (_numa_set_bind_policy != NULL) {
 298       _numa_set_bind_policy(policy);
 299     }
 300   }
 301   static int numa_distance(int node1, int node2) {
 302     return _numa_distance != NULL ? _numa_distance(node1, node2) : -1;
 303   }
 304   static int get_node_by_cpu(int cpu_id);
 305   static int get_existing_num_nodes();
 306   // Check if numa node is configured (non-zero memory node).
 307   static bool isnode_in_configured_nodes(unsigned int n) {
 308     if (_numa_bitmask_isbitset != NULL && _numa_all_nodes_ptr != NULL) {
 309       return _numa_bitmask_isbitset(_numa_all_nodes_ptr, n);
 310     } else
 311       return false;


< prev index next >