comparison src/os/linux/vm/os_linux.cpp @ 5937:cf956638b844

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
author iveresov
date Mon, 12 Mar 2012 13:12:07 -0700
parents 9eaf473fff9b
children 7432b9db36ff
comparison
equal deleted inserted replaced
5933:fde683df4c27 5937:cf956638b844
2545 ::madvise(addr, bytes, MADV_HUGEPAGE); 2545 ::madvise(addr, bytes, MADV_HUGEPAGE);
2546 } 2546 }
2547 } 2547 }
2548 2548
2549 void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { 2549 void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) {
2550 commit_memory(addr, bytes, alignment_hint, false); 2550 // This method works by doing an mmap over an existing mmaping and effectively discarding
2551 // the existing pages. However it won't work for SHM-based large pages that cannot be
2552 // uncommitted at all. We don't do anything in this case to avoid creating a segment with
2553 // small pages on top of the SHM segment. This method always works for small pages, so we
2554 // allow that in any case.
2555 if (alignment_hint <= (size_t)os::vm_page_size() || !UseSHM) {
2556 commit_memory(addr, bytes, alignment_hint, false);
2557 }
2551 } 2558 }
2552 2559
2553 void os::numa_make_global(char *addr, size_t bytes) { 2560 void os::numa_make_global(char *addr, size_t bytes) {
2554 Linux::numa_interleave_memory(addr, bytes); 2561 Linux::numa_interleave_memory(addr, bytes);
2555 } 2562 }