RFR: 8243315: ParallelScavengeHeap::initialize() passes GenAlignment as page size to os::trace_page_sizes instead of actual page size

Stefan Johansson sjohanss at openjdk.java.net
Thu Nov 12 10:57:59 UTC 2020

On Wed, 11 Nov 2020 09:27:50 GMT, Joakim Nordström <github.com+779991+jaokim at openjdk.org> wrote:

> ### Description
> The logging for reserved heap space, printed the `GenAlignment` value instead of page size.
> Before:
> <pre>
> [0.369s][info][gc      ] Using Parallel
> [0.374s][info][pagesize] Heap:  min=2M max=2M base=0x00000000ffe00000 <b>page_size=512K</b> size=2M
> </pre>
> Besides changing to display page size using `os::vm_page_size()`, this fix also adds logging of `SpaceAlignment `,`GenAlignment`, and `HeapAlignment`. 
> After:
> <pre>
> [0.367s][info][pagesize] <b>Alignments:  space_align=512K gen_align=512K heap_align=2M</b>
> [0.369s][info][gc      ] Using Parallel
> [0.374s][info][pagesize] Heap:  min=2M max=2M base=0x00000000ffe00000 <b>page_size=4K</b> size=2M
> </pre>
> Please advice whether the added logging of alignments is sufficient or irrelevant. There were no signs of either alignment being logged anywhere.
> ### Testing
> - Tested manually, and logs are showing with arguments <code>-Xlog:pagesize=info -XX:+UseParallelGC</code>
> - Tested Tier1, Tier2, Tier3.

Thanks for taking a look at this issue. A few suggestions.

src/hotspot/share/gc/parallel/parallelArguments.cpp line 145:

> 143:                      byte_size_in_exact_unit(GenAlignment), exact_unit_for_byte_size(GenAlignment),
> 144:                      byte_size_in_exact_unit(HeapAlignment), exact_unit_for_byte_size(HeapAlignment)
> 145:                      );

As I wrote in the bug I think it makes sense to have a way to get this printed, and I think a better location might be to include it to the `gc+init` logging. Parallel doesn't have a specialized InitLogger yet, but you can create one and add it there. Take a look at `G1InitLogger` for insperation.

src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp line 69:

> 67:                        MinHeapSize,
> 68:                        reserved_heap_size,
> 69:                        os::vm_page_size(),

I briefly looked at this in the past and I don't think using `os::vm_page_size()` straight off will not work for the case when large pages are used. So we need a way to figure out if the heap got reserved using large pages. Once again you can take a look at how G1 does it, it's in `actual_reserved_page_size()` in g1CollectedHeap.cpp. I'm not sure you can use that straight off, but something similar should work.


Changes requested by sjohanss (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/1161

More information about the hotspot-gc-dev mailing list