RFR: 8315923: pretouch_memory by atomic-add-0 fragments huge pages unexpectedly [v7]

Stefan Johansson sjohanss at openjdk.org
Mon Oct 23 10:43:42 UTC 2023


On Fri, 20 Oct 2023 05:54:06 GMT, Liming Liu <duke at openjdk.org> wrote:

>> As described at [JDK-8315923](https://bugs.openjdk.org/browse/JDK-8315923), this patch uses madvise with MADV_POPULATE_WRITE to pretouch memory when supported (since kernel 5.14).
>> 
>> Ran the newly added jtreg test on 64c Neoverse-N1 machines with kernel 4.18, 5.13 and 6.1, and observed that transparent huge pages formed right after pretouch on kernel 6.1. Recorded the time spent on the test in *seconds* with `VERBOSE=time` as the table below, and got that the patch takes improvements when the system call is supported, while does not hurt if not supported:
>> 
>> <table>
>>   <tr>
>>     <th>Kernel</th>
>>     <th colspan="2"><tt>-XX:-TransparentHugePages</tt></th>
>>     <th colspan="2"><tt>-XX:+TransparentHugePages</tt></th>
>>   </tr>
>>   <tr><td></td><td>Unpatched</td><td>Patched</td><td>Unpatched</td><td>Patched</td></tr>
>>   <tr><td>4.18</td><td>11.30</td><td>11.30</td><td>0.25</td><td>0.25</td></tr>
>>   <tr><td>5.13</td><td>0.22</td><td>0.22</td><td>3.42</td><td>3.42</td></tr>
>>   <tr><td>6.1</td><td>0.27</td><td>0.33</td><td>3.54</td><td>0.33</td></tr>
>> </table>
>
> Liming Liu has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
> 
>   Make the jtreg test check the usage of THP

I did check `numa_maps` and `smap` under `/proc/{PID}` when allocating a very large object with and without pretouching. And without pretouching the pages are not marked as dirty in `numa_maps` before the actual allocation and in `smaps` the `Private_Hugetlb:` field was not covering the whole heap when pretouch was not used and increased to the amount of the allocation once it happened.

I also measured the time for doing the large allocation. There were some run to run variations but not big with large pages turned on.

+UseLargePages +AlwaysPreTouch: 444ms
+UseLargePages -AlwaysPreTouch: 474ms
-UseLargePages +AlwaysPreTouch: 450ms (much higher variation) 
-UseLargePages -AlwaysPreTouch: 1.3s (also higher variation) 


So from what I can tell it is really needed @tstuefe.

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

PR Comment: https://git.openjdk.org/jdk/pull/15781#issuecomment-1774915217


More information about the hotspot-runtime-dev mailing list