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