comparison src/os/solaris/vm/os_solaris.cpp @ 3292:c303b3532d4a

7037939: NUMA: Disable adaptive resizing if SHM large pages are used Summary: Make the NUMA allocator behave properly with SHM and ISM large pages. Reviewed-by: ysr
author iveresov
date Tue, 26 Apr 2011 11:46:34 -0700
parents 23ae54207126
children 188c9a5d6a6d
comparison
equal deleted inserted replaced
3291:d6cdc6c77582 3292:c303b3532d4a
2824 2824
2825 // Change the page size in a given range. 2825 // Change the page size in a given range.
2826 void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { 2826 void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
2827 assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned."); 2827 assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned.");
2828 assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned."); 2828 assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned.");
2829 Solaris::set_mpss_range(addr, bytes, alignment_hint); 2829 if (UseLargePages && UseMPSS) {
2830 Solaris::set_mpss_range(addr, bytes, alignment_hint);
2831 }
2830 } 2832 }
2831 2833
2832 // Tell the OS to make the range local to the first-touching LWP 2834 // Tell the OS to make the range local to the first-touching LWP
2833 void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { 2835 void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) {
2834 assert((intptr_t)addr % os::vm_page_size() == 0, "Address should be page-aligned."); 2836 assert((intptr_t)addr % os::vm_page_size() == 0, "Address should be page-aligned.");
5039 int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); 5041 int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit);
5040 size_t lgrp_num = os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); 5042 size_t lgrp_num = os::numa_get_leaf_groups(lgrp_ids, lgrp_limit);
5041 FREE_C_HEAP_ARRAY(int, lgrp_ids); 5043 FREE_C_HEAP_ARRAY(int, lgrp_ids);
5042 if (lgrp_num < 2) { 5044 if (lgrp_num < 2) {
5043 // There's only one locality group, disable NUMA. 5045 // There's only one locality group, disable NUMA.
5046 UseNUMA = false;
5047 }
5048 }
5049 // ISM is not compatible with the NUMA allocator - it always allocates
5050 // pages round-robin across the lgroups.
5051 if (UseNUMA && UseLargePages && UseISM) {
5052 if (!FLAG_IS_DEFAULT(UseNUMA)) {
5053 if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseISM)) {
5054 UseLargePages = false;
5055 } else {
5056 warning("UseNUMA is not compatible with ISM large pages, disabling NUMA allocator");
5057 UseNUMA = false;
5058 }
5059 } else {
5044 UseNUMA = false; 5060 UseNUMA = false;
5045 } 5061 }
5046 } 5062 }
5047 if (!UseNUMA && ForceNUMA) { 5063 if (!UseNUMA && ForceNUMA) {
5048 UseNUMA = true; 5064 UseNUMA = true;