RFR: 8272807: Permit use of memory concurrent with pretouch
Kim Barrett
kbarrett at openjdk.java.net
Fri Feb 4 12:11:10 UTC 2022
On Fri, 4 Feb 2022 11:07:52 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> [Trying again, after a couple previous proposals.]
>>
>> Please review this change to os::pretouch_memory to permit use of the memory
>> being pretouched concurrently with the pretouch operation. This will allow
>> future changes that can make use of such overlap.
>>
>> Testing:
>> mach5 tier1-3 with -XX:+AlwaysPreTouch.
>>
>> Verified no performance impact by comparing startup times with Epsilon GC and
>> -XX:+AlwaysPretouch on a large enough heap that the pretouch takes a
>> significant amount of time. Tested on both linux-x64 and linux-aarch64.
>>
>> None of these test concurrent use; that will wait for future changes that use
>> the new feature.
>
> src/hotspot/share/runtime/os.cpp line 1771:
>
>> 1769: Atomic::add(reinterpret_cast<int*>(cur), 0, memory_order_relaxed);
>> 1770: if (cur == last) break;
>> 1771: }
>
> Took me some time to check the loop. Suggestion:
>
>
> do {
> Atomic::add(reinterpret_cast<int*>(cur), 0, memory_order_relaxed);
> cur += page_size;
> } while (cur < last);
Intentionally didn't write it that way, because of the potential for UB pointer arithmetic overflow in `cur += page_size`.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7343
More information about the hotspot-runtime-dev
mailing list