mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 22:34:27 +02:00
7037939: NUMA: Disable adaptive resizing if SHM large pages are used
Make the NUMA allocator behave properly with SHM and ISM large pages. Reviewed-by: ysr
This commit is contained in:
parent
385e7253a7
commit
e3121a5a43
2 changed files with 34 additions and 1 deletions
|
@ -4170,6 +4170,23 @@ jint os::init_2(void)
|
||||||
UseNUMA = false;
|
UseNUMA = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// With SHM large pages we cannot uncommit a page, so there's not way
|
||||||
|
// we can make the adaptive lgrp chunk resizing work. If the user specified
|
||||||
|
// both UseNUMA and UseLargePages (or UseSHM) on the command line - warn and
|
||||||
|
// disable adaptive resizing.
|
||||||
|
if (UseNUMA && UseLargePages && UseSHM) {
|
||||||
|
if (!FLAG_IS_DEFAULT(UseNUMA)) {
|
||||||
|
if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseSHM)) {
|
||||||
|
UseLargePages = false;
|
||||||
|
} else {
|
||||||
|
warning("UseNUMA is not fully compatible with SHM large pages, disabling adaptive resizing");
|
||||||
|
UseAdaptiveSizePolicy = false;
|
||||||
|
UseAdaptiveNUMAChunkSizing = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
UseNUMA = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!UseNUMA && ForceNUMA) {
|
if (!UseNUMA && ForceNUMA) {
|
||||||
UseNUMA = true;
|
UseNUMA = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2826,7 +2826,9 @@ bool os::remove_stack_guard_pages(char* addr, size_t size) {
|
||||||
void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
|
void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
|
||||||
assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned.");
|
assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned.");
|
||||||
assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned.");
|
assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned.");
|
||||||
Solaris::set_mpss_range(addr, bytes, alignment_hint);
|
if (UseLargePages && UseMPSS) {
|
||||||
|
Solaris::set_mpss_range(addr, bytes, alignment_hint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell the OS to make the range local to the first-touching LWP
|
// Tell the OS to make the range local to the first-touching LWP
|
||||||
|
@ -5044,6 +5046,20 @@ jint os::init_2(void) {
|
||||||
UseNUMA = false;
|
UseNUMA = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ISM is not compatible with the NUMA allocator - it always allocates
|
||||||
|
// pages round-robin across the lgroups.
|
||||||
|
if (UseNUMA && UseLargePages && UseISM) {
|
||||||
|
if (!FLAG_IS_DEFAULT(UseNUMA)) {
|
||||||
|
if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseISM)) {
|
||||||
|
UseLargePages = false;
|
||||||
|
} else {
|
||||||
|
warning("UseNUMA is not compatible with ISM large pages, disabling NUMA allocator");
|
||||||
|
UseNUMA = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
UseNUMA = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!UseNUMA && ForceNUMA) {
|
if (!UseNUMA && ForceNUMA) {
|
||||||
UseNUMA = true;
|
UseNUMA = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue