7151089: PS NUMA: NUMA allocator should not attempt to free pages when using SHM large pages
authoriveresov
Mon, 12 Mar 2012 13:12:07 -0700
changeset 12116 d81396ae8bf6
parent 12112 56e3093129dc
child 12117 23b52cd6ca73
7151089: PS NUMA: NUMA allocator should not attempt to free pages when using SHM large pages Summary: Don't attempt to uncommit SHM-based large pages Reviewed-by: kvn
hotspot/src/os/linux/vm/os_linux.cpp
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Fri Mar 09 13:34:45 2012 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Mon Mar 12 13:12:07 2012 -0700
@@ -2547,7 +2547,14 @@
 }
 
 void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) {
-  commit_memory(addr, bytes, alignment_hint, false);
+  // This method works by doing an mmap over an existing mmaping and effectively discarding
+  // the existing pages. However it won't work for SHM-based large pages that cannot be
+  // uncommitted at all. We don't do anything in this case to avoid creating a segment with
+  // small pages on top of the SHM segment. This method always works for small pages, so we
+  // allow that in any case.
+  if (alignment_hint <= (size_t)os::vm_page_size() || !UseSHM) {
+    commit_memory(addr, bytes, alignment_hint, false);
+  }
 }
 
 void os::numa_make_global(char *addr, size_t bytes) {