RFR: JDK-8304954: SegmentedCodeCache fails when using large pages [v8]

Thomas Stuefe stuefe at openjdk.org
Thu Jul 27 05:03:52 UTC 2023


On Wed, 26 Jul 2023 14:00:09 GMT, Damon Fenacci <dfenacci at openjdk.org> wrote:

>> # Issue
>> 
>> When large pages are enabled and segmented code cache is used, the VM tries to use one page for each segment. If the amount of reserved code cache is limited, this can make the total size of the code cache bigger than the reserved size, which in turn makes the VM fail, claiming that there is not enough space (e.g. this happens when running `java -XX:+UseLargePages -XX:+SegmentedCodeCache -XX:InitialCodeCacheSize=2g -XX:ReservedCodeCacheSize=2g -XX:LargePageSizeInBytes=1g -Xlog:pagesize*=debug -version`).
>> This behaviour is not correct as the VM should fall back and try with a smaller page size (and print a warning).
>> 
>> # Solution
>> 
>> When reserving heap space for code cache we give a minimum of 8 pages. Since the page size is already calculated right before for segment sizes, it is saved and passed as an argument instead.
>> 
>> https://github.com/openjdk/jdk/blob/67fbd87378a9b3861f1676977f9f2b36052add29/src/hotspot/share/code/codeCache.cpp#L315
>> 
>> Additionally a warning is printed if large pages are enabled and we end up using a smaller page sizes for code caching.
>> 
>> # Test
>> 
>> The regression test runs a new VM with `-XX:+UseLargePages -XX:LargePageSizeInBytes=1g`. The `main` method then checks if the two flags have been "taken". If so, another process is started that checks for a specific output, otherwise the test passes (i.e. the current system doesn't allow 1GB large pages)
>
> Damon Fenacci has updated the pull request incrementally with one additional commit since the last revision:
> 
>   JDK-8304954: fix warning message

still good

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

PR Comment: https://git.openjdk.org/jdk/pull/14903#issuecomment-1652917062


More information about the hotspot-compiler-dev mailing list