hotspot/src/os/linux/vm/os_linux.hpp
changeset 46510 8cc204b35e39
parent 46507 7db40fa6eff7
child 46512 1ba5728eda0d
equal deleted inserted replaced
46508:278005442848 46510:8cc204b35e39
   170   static const char *libpthread_version()     { return _libpthread_version; }
   170   static const char *libpthread_version()     { return _libpthread_version; }
   171 
   171 
   172   static void libpthread_init();
   172   static void libpthread_init();
   173   static bool libnuma_init();
   173   static bool libnuma_init();
   174   static void* libnuma_dlsym(void* handle, const char* name);
   174   static void* libnuma_dlsym(void* handle, const char* name);
       
   175   // libnuma v2 (libnuma_1.2) symbols
       
   176   static void* libnuma_v2_dlsym(void* handle, const char* name);
   175 
   177 
   176   // Return default guard size for the specified thread type
   178   // Return default guard size for the specified thread type
   177   static size_t default_guard_size(os::ThreadType thr_type);
   179   static size_t default_guard_size(os::ThreadType thr_type);
   178 
   180 
   179   static void capture_initial_stack(size_t max_size);
   181   static void capture_initial_stack(size_t max_size);
   216   typedef int (*numa_max_node_func_t)(void);
   218   typedef int (*numa_max_node_func_t)(void);
   217   typedef int (*numa_num_configured_nodes_func_t)(void);
   219   typedef int (*numa_num_configured_nodes_func_t)(void);
   218   typedef int (*numa_available_func_t)(void);
   220   typedef int (*numa_available_func_t)(void);
   219   typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
   221   typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
   220   typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
   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 
   221   typedef void (*numa_set_bind_policy_func_t)(int policy);
   225   typedef void (*numa_set_bind_policy_func_t)(int policy);
   222   typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
   226   typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
   223   typedef int (*numa_distance_func_t)(int node1, int node2);
   227   typedef int (*numa_distance_func_t)(int node1, int node2);
   224 
   228 
   225   static sched_getcpu_func_t _sched_getcpu;
   229   static sched_getcpu_func_t _sched_getcpu;
   227   static numa_max_node_func_t _numa_max_node;
   231   static numa_max_node_func_t _numa_max_node;
   228   static numa_num_configured_nodes_func_t _numa_num_configured_nodes;
   232   static numa_num_configured_nodes_func_t _numa_num_configured_nodes;
   229   static numa_available_func_t _numa_available;
   233   static numa_available_func_t _numa_available;
   230   static numa_tonode_memory_func_t _numa_tonode_memory;
   234   static numa_tonode_memory_func_t _numa_tonode_memory;
   231   static numa_interleave_memory_func_t _numa_interleave_memory;
   235   static numa_interleave_memory_func_t _numa_interleave_memory;
       
   236   static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2;
   232   static numa_set_bind_policy_func_t _numa_set_bind_policy;
   237   static numa_set_bind_policy_func_t _numa_set_bind_policy;
   233   static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
   238   static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
   234   static numa_distance_func_t _numa_distance;
   239   static numa_distance_func_t _numa_distance;
   235   static unsigned long* _numa_all_nodes;
   240   static unsigned long* _numa_all_nodes;
   236   static struct bitmask* _numa_all_nodes_ptr;
   241   static struct bitmask* _numa_all_nodes_ptr;
   241   static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
   246   static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
   242   static void set_numa_num_configured_nodes(numa_num_configured_nodes_func_t func) { _numa_num_configured_nodes = func; }
   247   static void set_numa_num_configured_nodes(numa_num_configured_nodes_func_t func) { _numa_num_configured_nodes = func; }
   243   static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
   248   static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
   244   static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
   249   static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
   245   static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
   250   static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
       
   251   static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; }
   246   static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
   252   static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
   247   static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
   253   static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
   248   static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
   254   static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
   249   static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
   255   static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
   250   static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = *ptr; }
   256   static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = *ptr; }
   262   static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
   268   static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
   263   static int numa_tonode_memory(void *start, size_t size, int node) {
   269   static int numa_tonode_memory(void *start, size_t size, int node) {
   264     return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
   270     return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
   265   }
   271   }
   266   static void numa_interleave_memory(void *start, size_t size) {
   272   static void numa_interleave_memory(void *start, size_t size) {
   267     if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
   273     // Use v2 api if available
       
   274     if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) {
       
   275       _numa_interleave_memory_v2(start, size, _numa_all_nodes_ptr);
       
   276     } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
   268       _numa_interleave_memory(start, size, _numa_all_nodes);
   277       _numa_interleave_memory(start, size, _numa_all_nodes);
   269     }
   278     }
   270   }
   279   }
   271   static void numa_set_bind_policy(int policy) {
   280   static void numa_set_bind_policy(int policy) {
   272     if (_numa_set_bind_policy != NULL) {
   281     if (_numa_set_bind_policy != NULL) {