RFR: 8268127: Shenandoah: Heap size may be too small for region to align to large page size [v4]
Aleksey Shipilev
shade at openjdk.java.net
Tue Jun 8 14:09:26 UTC 2021
On Mon, 7 Jun 2021 13:04:41 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:
>> TestLargePages.java failed on Linux AArch64, where large page size is 500M, and the test is configured to run with much smaller heap, e.g. 131M.
>>
>> This is *not* AArch64 specific, just none of our regular test machines has large page setup.
>>
>> I purpose two invariants:
>> 1) Heap size always aligns up to page size that is requested.
>> 2) Region size always aligns up to page size that is requested if heap is large enough to accommodate them. Otherwise, it aligns up to regular page size.
>>
>> This partially reverts JDK-8266802.
>>
>> Obviously, this is a corner case and is unlikely seen in real word. The alternative is to disable UseLargePages if heap size is too small, e.g. align_up(heap_size, page_size) < MIN_NUM_REGIONS.
>>
>> Test:
>> hotspot_gc_shenandoah
>
> Zhengyu Gu has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:
>
> - rkennke's comment
> - Merge branch 'master' into JDK-8268127-large-page-small-heap
> - Window build
> - Fix compilation error
> - v2
> - v1
This looks fine to me, modulo nits below. Consider adding new test cases in `gc/shenandoah/TestLargePages.java`. This fails for me on Linux x86_64 (2M large pages by default): `build/linux-x86_64-server-fastdebug/images/jdk/bin/java -XX:+UseShenandoahGC -Xmx16m -XX:+UseLargePages Test`
src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp line 183:
> 181:
> 182: log_info(gc)("Setup heap, size: " SIZE_FORMAT "K, region size: " SIZE_FORMAT "K and region count: " SIZE_FORMAT,
> 183: max_byte_size / K, reg_size_bytes / K, _num_regions);
This seems redundant. I think `gc+init` already prints this?
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp line 559:
> 557: } else {
> 558: // Should have been checked during argument initialization
> 559: assert(!ShenandoahUncommit, "Uncommit requires region size aligns to underline page size");
Assert message: "Uncommit requires region size aligned to large page size"?
-------------
Marked as reviewed by shade (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/4320
More information about the hotspot-gc-dev
mailing list