Hi,

On 26.02.22 01:36, Peter Kessler OS wrote:
How should I use -XX:PreTouchParallelChunkSize=?

I am using an Ampere Altra, running Oracle Linux Server release 8.5, that has 64KB pages and 524288KB huge pages.  If I run a program with enough logging, I see, for example,
[...]
If I gather the times to the "Version" line for various releases of the OpenJDK and various sizes of -XX:PreTouchParallelChunkSize=, I get

                                 -XX:PreTouchParallelChunkSize=

     JDK                   4k     64k   2048k   4096k   524288k  1048576k

     -----------------  -----   -----   -----   -----   -------  --------

     jdk-15.0.2         3.434   3.469   3.469   3.508     3.467     3.434

     jdk-17.0.2         0.806   0.806   0.805   0.804     0.836     0.844

     jdk-18-ea+34-2083  0.803   0.802   0.802   0.833     0.802     0.868

     jdk-19-ea+8-441    0.806   0.849   0.803   0.803     0.803     0.846

showing seconds for the median of 7 runs.  It looks like jdk-15.0.2 was not good at parallelizing pretouching of the heap.  Later JDKs look like they parallelize the pretouching of the heap, but it does not matter much what the setting, or non-setting, of -XX:PreTouchParallelChunkSize= is.

It sets the size of memory a single thread gets to pretouch at once before asking for more work.

With a sufficiently large value, all is fine, the overhead of grabbing new chunks (and iterating over them) is negligible compared to actual commit work.

As demonstration, with

bin/java -Xmx40g -Xms40g -XX:+AlwaysPreTouch -XX:+UseG1GC -Xlog:gc+init=info,gc+heap=debug,gc=info:stdout -XX:PreTouchParallelChunkSize=2m -version

[0.034s][debug][gc,heap] Running G1 PreTouch with 18 workers for 10240 work units pre-touching 42949672960B. [2.132s][debug][gc,heap] Running G1 PreTouch with 18 workers for 160 work units pre-touching 671088640B.

but with -XX:PreTouchParallelChunkSize=4k (which is obviously a bad value) I get

[0.030s][debug][gc,heap] Running G1 PreTouch with 18 workers for 10485760 work units pre-touching 42949672960B. [3.570s][debug][gc,heap] Running G1 PreTouch with 18 workers for 163840 work units pre-touching 671088640B.



My question is: what difference does setting -XX:PreTouchParallelChunkSize= make?  That is: is there some point to setting it at all?

The default values seem to be okay, so probably not :)

Hth,
  Thomas
_______________________________________________
hotspot-gc-use mailing list
hotspot-gc-use@openjdk.java.net
https://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use

Reply via email to