Mercurial > hg > graal-jvmci-8
changeset 22978:30e04eba9e29 hs25.60-b13
8077255: TracePageSizes output reports wrong page size on Windows with G1
Summary: Print selected page size, not alignment size chosen by ReservedSpace (which is the vm_allocation_granularity that is different to page size on Windows) in the message presented by TracePageSizes.
Reviewed-by: drwhite, jmasa
author | tschatzl |
---|---|
date | Thu, 09 Apr 2015 15:41:47 +0200 |
parents | 33e421924c67 |
children | fd1aeeab001b |
files | src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp src/share/vm/runtime/virtualspace.cpp src/share/vm/runtime/virtualspace.hpp |
diffstat | 3 files changed, 12 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Apr 07 10:53:51 2015 +0200 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Apr 09 15:41:47 2015 +0200 @@ -1907,8 +1907,9 @@ G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description, size_t size, size_t translation_factor) { + size_t preferred_page_size = os::page_size_for_region_unaligned(size, 1); // Allocate a new reserved space, preferring to use large pages. - ReservedSpace rs(size, true); + ReservedSpace rs(size, preferred_page_size); G1RegionToSpaceMapper* result = G1RegionToSpaceMapper::create_mapper(rs, size, @@ -1918,7 +1919,7 @@ mtGC); if (TracePageSizes) { gclog_or_tty->print_cr("G1 '%s': pg_sz=" SIZE_FORMAT " base=" PTR_FORMAT " size=" SIZE_FORMAT " alignment=" SIZE_FORMAT " reqsize=" SIZE_FORMAT, - description, rs.alignment(), p2i(rs.base()), rs.size(), rs.alignment(), size); + description, preferred_page_size, p2i(rs.base()), rs.size(), rs.alignment(), size); } return result; }
--- a/src/share/vm/runtime/virtualspace.cpp Tue Apr 07 10:53:51 2015 +0200 +++ b/src/share/vm/runtime/virtualspace.cpp Thu Apr 09 15:41:47 2015 +0200 @@ -52,12 +52,13 @@ _alignment(0), _special(false), _executable(false) { } -ReservedSpace::ReservedSpace(size_t size, bool prefer_large_pages) { +ReservedSpace::ReservedSpace(size_t size, size_t preferred_page_size) { + bool has_preferred_page_size = preferred_page_size != 0; // Want to use large pages where possible and pad with small pages. - size_t page_size = os::page_size_for_region_unaligned(size, 1); + size_t page_size = has_preferred_page_size ? preferred_page_size : os::page_size_for_region_unaligned(size, 1); bool large_pages = page_size != (size_t)os::vm_page_size(); size_t alignment; - if (large_pages && prefer_large_pages) { + if (large_pages && has_preferred_page_size) { alignment = MAX2(page_size, (size_t)os::vm_allocation_granularity()); // ReservedSpace initialization requires size to be aligned to the given // alignment. Align the size up.
--- a/src/share/vm/runtime/virtualspace.hpp Tue Apr 07 10:53:51 2015 +0200 +++ b/src/share/vm/runtime/virtualspace.hpp Thu Apr 09 15:41:47 2015 +0200 @@ -54,12 +54,11 @@ public: // Constructor ReservedSpace(); - // Initialize the reserved space with the given size. If prefer_large_pages is - // set, if the given size warrants use of large pages, try to force them by - // passing an alignment restriction further down. This may waste some space - // if the given size is not aligned, as the reservation will be aligned up - // to large page alignment. - ReservedSpace(size_t size, bool prefer_large_pages = false); + // Initialize the reserved space with the given size. If preferred_page_size + // is set, use this as minimum page size/alignment. This may waste some space + // if the given size is not aligned to that value, as the reservation will be + // aligned up to the final alignment in this case. + ReservedSpace(size_t size, size_t preferred_page_size = 0); ReservedSpace(size_t size, size_t alignment, bool large, char* requested_address = NULL, const size_t noaccess_prefix = 0);