RFR: 8245000: Windows GDI functions don't support large pages

Stefan Karlsson stefan.karlsson at oracle.com
Tue May 19 14:11:59 UTC 2020


Thanks for reviewing!

StefanK

On 2020-05-19 15:16, stefan.johansson at oracle.com wrote:
> Hi Stefan,
>
> On 2020-05-15 19:47, Stefan Karlsson wrote:
>> Hi all,
>>
>> Please review this patch to turn off -XX:+UseLargePages as long as 
>> Windows GDI functions don't work with large pages.
>>
>> https://cr.openjdk.java.net/~stefank/8245000/webrev.00.cleanup
>> https://cr.openjdk.java.net/~stefank/8245000/webrev.01.workaround
>> https://cr.openjdk.java.net/~stefank/8245000/webrev.all/
>
> Thanks for splitting those changes up into cleanup and fix, really 
> makes it easy to review.
>
> Looks good,
> StefanJ
>>
>> The patches build upon the changes in:
>> 8245002: Windows GDI functions don't support NUMA interleaving
>> https://mail.openjdk.java.net/pipermail/hotspot-dev/2020-May/041798.html
>>
>> During the investigation of JDK-8240654 
>> <https://bugs.openjdk.java.net/browse/JDK-8240654> it was found that 
>> some of the Windows GDI functions don't work with large pages 
>> (-XX:+UseLargePages). This causes severe repaint issues.
>>
>> The problem can easily be seen with the Java2D demos, where the drawn 
>> UI is grayed out instead of containing all relevant components.
>>
>> This can be reproduced by running building J2DBench and running:
>> java -Xmx1g -Xms1g -XX:+UseLargePages -Dsun.java2d.opengl=False 
>> -Dsun.java2d.d3d=False -jar dist/J2DBench.jar
>>
>> The -Dsun.java2d.d3d property is used to ensure that that java2d 
>> doesn't enable the alternative, D3D implementation instead of GDI. 
>> -Dsun.java2d.opengl is turned off for the same reason.
>>
>> The cleanup patch simplifies request_lock_memory_privilege and 
>> large_page_init, to make it easier to insert the necessary checks.
>>
>> The code first checks if memory allocated with large pages can be 
>> used by GDI functions. If this check fails it forcefully turns off 
>> -XX:+UseLargePages.
>>
>> Just like with JDK-8245002, the intention is that as long as the GDI 
>> functions can't use large pages, the -XX:+UseLargePages flag will be 
>> turned off. If Microsoft changes the GDI code, so that it works with 
>> large pages, then the proposed patch will automatically allow the 
>> flag to be enabled.
>>
>> There's a second case that we need to consider for large pages. If 
>> the GDI functions start to allow large pages, we have a flag 
>> (-XX:+UseLargePagesIndividualAllocation) that reserves and commits 
>> large pages in page-sized granules. This could cause the same 
>> multi-reservation problem described in JDK-8245002. I've also added a 
>> check for that, and turn off -XX:+UseLargePagesIndividualAllocation 
>> if it fails.
>>
>> I've run this through tier1-3 and also tested this manually. I've 
>> manually turned off the different checks to verify that it turns on 
>> the two flags.
>>
>> Thanks,
>> StefanK



More information about the hotspot-dev mailing list