RFR: 8256155: Allow multiple large page sizes to be used on Linux [v32]

Thomas Stuefe stuefe at openjdk.java.net
Tue May 11 11:23:07 UTC 2021


On Tue, 11 May 2021 08:41:01 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:

>> Marcus G K Williams has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 53 commits:
>> 
>>  - Remove reserve_memory_special_huge_tlbfs mods except assert
>>    
>>    Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>>  - Merge branch 'master' into update_hlp
>>  - Merge branch 'master' into update_hlp
>>  - Remove extranous vm_page_size check
>>    
>>    Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>>  - kstefanj review
>>    
>>    Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>>  - Set LargePageSizeInBytes to largepage upper limit
>>    
>>    Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>>  - Merge branch 'master' into update_hlp
>>  - Fix merge
>>    
>>    Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>>  - Merge branch 'master' into update_hlp
>>  - Merge branch 'master' into update_hlp
>>  - ... and 43 more: https://git.openjdk.java.net/jdk/compare/0790e601...7368e7d4
>
> src/hotspot/os/linux/os_linux.cpp line 3752:
> 
>> 3750:   } else {
>> 3751:     _large_page_size = default_large_page_size;
>> 3752:   }
> 
> I would prefer turning this around a bit. Currently this will trigger an assert in all_large_pages.contains() if you set `LargePageSizeInBytes=0`. What do you think of instead first checking for the "default" case. Something like:
> Suggestion:
> 
>   if (FLAG_IS_DEFAULT(LargePageSizeInBytes) ||
>       LargePageSizeInBytes == 0 ||
>       LargePageSizeInBytes == default_large_page_size) {
>     _large_page_size = default_large_page_size;
>     log_info(pagesize)("Using the default large page size: " SIZE_FORMAT "%s",
>                        byte_size_in_exact_unit(_large_page_size),
>                        exact_unit_for_byte_size(_large_page_size));
>   } else {
>     if (all_large_pages.contains(LargePageSizeInBytes)) {
>       _large_page_size = LargePageSizeInBytes;
>       log_info(pagesize)("Overriding default large page size (" SIZE_FORMAT "%s) "
>                          "using LargePageSizeInBytes: " SIZE_FORMAT "%s",
>                          byte_size_in_exact_unit(default_large_page_size),
>                          exact_unit_for_byte_size(default_large_page_size),
>                          byte_size_in_exact_unit(_large_page_size),
>                          exact_unit_for_byte_size(_large_page_size));
>     } else {
>       _large_page_size = default_large_page_size;
>       log_info(pagesize)("LargePageSizeInBytes is not a valid large page size (" SIZE_FORMAT "%s) "
>                          "using the default large page size: " SIZE_FORMAT "%s",
>                          byte_size_in_exact_unit(LargePageSizeInBytes),
>                          exact_unit_for_byte_size(LargePageSizeInBytes),
>                          byte_size_in_exact_unit(_large_page_size),
>                          exact_unit_for_byte_size(_large_page_size));
>     }
>   }
> 
> 
> I also added some additional logging for the three different cases.

+1 for the added warning if the page size given was invalid/not available.

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

PR: https://git.openjdk.java.net/jdk/pull/1153



More information about the hotspot-gc-dev mailing list