RFR: 8335865: Shenandoah: Improve THP pretouch after JDK-8315923
Neethu Prasad
nprasad at openjdk.org
Fri Jul 26 01:15:33 UTC 2024
On Fri, 19 Jul 2024 14:28:24 GMT, Neethu Prasad <nprasad at openjdk.org> wrote:
> **Notes**
> os::pretouch is now using madvice now when available and has a fall back to using vm page size [JDK-8315923](https://bugs.openjdk.org/browse/JDK-8315923)
> Hence removing code that sets _pretouch_heap_page_size & _pretouch_bitmap_page_size in Shenandoah.
>
> **Testing**
>
> * Ran test in Linux 5.10 and Linux 6.x and confirmed that there is no regression. I could not replicate the issue or performance improvement though. [add results]
> * Ran [TestTransparentHugePageUsage](https://github.com/openjdk/jdk/commit/a65a89522d2f24b1767e1c74f6689a22ea32ca6a) for Shenandoah and verified that test passed
> * Ran tier 1, tier 2 , tier1_gc_shenandoah, tier2_gc_shenandoah, tier3_gc_shenandoah and hotspot_gc_shenandoah.
> > Ran [TestTransparentHugePageUsage](https://github.com/openjdk/jdk/commit/a65a89522d2f24b1767e1c74f6689a22ea32ca6a) for Shenandoah and verified that test passed
>
> I think that test works only with Serial, it hardcodes the GC config.
>
> But I think THP pretouch still does not work well :( Look:
>
> ```
> % cat Wait.java
> public class Wait {
> public static void main(String... s) throws Throwable {
> System.out.println("Ready");
> System.in.read();
> }
> }
> ```
>
> JDK 17.0.12 baseline:
>
> ```
> % java -Xmx100g -Xms100g -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -XX:+AlwaysPreTouch Wait.java &
> [1] 20386
>
> % for I in `seq 1 10`; do cat /proc/`pidof java`/smaps | grep AnonHugePages | sort | uniq; sleep 5; done
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> AnonHugePages: 106496000 kB
> ```
>
> Mainline without this patch maps very slowly, this is what [JDK-8315923](https://bugs.openjdk.org/browse/JDK-8315923) is about, AFAIU:
>
> ```
> % build/linux-aarch64-server-release/images/jdk/bin/java -Xmx100g -Xms100g -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -XX:+AlwaysPreTouch Wait.java &
>
> % for I in `seq 1 10`; do cat /proc/`pidof java`/smaps | grep AnonHugePages | sort | uniq; sleep 5; done
> AnonHugePages: 131072 kB
> AnonHugePages: 131072 kB
> AnonHugePages: 147456 kB
> AnonHugePages: 163840 kB
> AnonHugePages: 163840 kB
> AnonHugePages: 180224 kB
> AnonHugePages: 180224 kB
> AnonHugePages: 196608 kB
> AnonHugePages: 196608 kB
> AnonHugePages: 212992 kB
> ```
>
> But mainline _with this patch_ still gets mapped very slowly:
>
> ```
> % build/linux-aarch64-server-release/images/jdk/bin/java -Xmx100g -Xms100g -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -XX:+AlwaysPreTouch Wait.java &
>
> % for I in `seq 1 10`; do cat /proc/`pidof java`/smaps | grep AnonHugePages | sort | uniq; sleep 5; done
> AnonHugePages: 16384 kB
> AnonHugePages: 32768 kB
> AnonHugePages: 32768 kB
> AnonHugePages: 49152 kB
> AnonHugePages: 49152 kB
> AnonHugePages: 65536 kB
> AnonHugePages: 65536 kB
> AnonHugePages: 81920 kB
> ```
>
> Please see what still goes wrongly?
I'll take a look.
I'd updated the [TestTransparentHugePageUsage](https://github.com/openjdk/jdk/commit/a65a89522d2f24b1767e1c74f6689a22ea32ca6a) to use Shenandoah. So wasn't run serial GC.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20254#issuecomment-2251770454
More information about the hotspot-gc-dev
mailing list