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