RFR: JDK-8076542: G1 does not print heap page size information with -XX:+TracePageSizes

Thomas Schatzl thomas.schatzl at oracle.com
Thu May 7 13:53:36 UTC 2015


Hi,

On Thu, 2015-05-07 at 15:15 +0200, Bengt Rutisson wrote:
> Hi David,
> 
> On 06/05/15 14:11, David Lindholm wrote:
> > Hi,
> >
> > Please review this patch that adds a call to os::trace_page_sizes() 
> > for G1, which prints heap page size info if run with -XX:+TracePageSizes
> >
> >
> > Webrev: http://cr.openjdk.java.net/~david/JDK-8076542/webrev.00/
> > Bug: https://bugs.openjdk.java.net/browse/JDK-8076542
> 
> 1864   ReservedSpace heap_rs = Universe::reserve_heap(max_byte_size,
> 1865 heap_alignment);
> 1866
> 1867   size_t page_sz = os::page_size_for_region_aligned(max_byte_size, 1);
> 1868   os::trace_page_sizes("g1 heap", 
> collector_policy()->min_heap_byte_size(),
> 1869                        max_byte_size, page_sz,
> 1870                        heap_rs.base(),
> 1871                        heap_rs.size());
> 
> I think it looks odd that we look up the page size that we print instead 
> of actually getting the page size that was used.
> 

Thinking about "TracePageSizes" and what is printed, it seems that it
confuses page size used for commit and reservation alignment.

> What I mean is that if we change the implementation of 
> Universe::reserve_heap() to do something differently than using 
> os::page_size_for_region_aligned() then this logging will suddenly be 
> broken. I would prefer if we could somehow communicate what page size 
> that was actually used. Or is it even the case that it is 
> Universe::reserve_heap() that should do the call to os::trace_page_sizes()?

As mentioned above, it is strange to me to talk about page size when
reserving a memory area. I am not sure if we can or should fix the
output of TracePageSizes.

Actual page size used for committing is determined in line 1883 btw: 

  G1RegionToSpaceMapper* heap_storage =
    G1RegionToSpaceMapper::create_mapper(g1_rs,
                                         g1_rs.size(),
                                         UseLargePages ?
os::large_page_size() : os::vm_page_size(),            // <!---
                                         HeapRegion::GrainBytes,
                                         1,
                                         mtJavaHeap);

Which means that the value actually used is different to the value
calculated in this change; it should be the same in all cases though,
but it would be nice to factor out this calculation and use it there and
when calling os::trace_page_sizes.

Also the kind string currently does not match the others printed
(created in create_aux_mapper()).

> Another thing, which is not really related to your change. There are two 
> version of os::trace_page_sizes(). I couldn't find any user of this version:
> 
> os::trace_page_sizes(const char* str, const size_t* page_sizes, int count)
> 
> Can that one be removed?

It is used to print out all available page sizes on Solaris.
(os_solaris.cpp:3058)

Thanks,
  Thomas





More information about the hotspot-gc-dev mailing list