Pre-RFR 8236847 CDS archive with 4K alignment unusable on machines with 64k pages
Ioi Lam
ioi.lam at oracle.com
Thu Feb 13 21:59:56 UTC 2020
Hi Calvin,
Thanks for your review. I've updated the patch with comments from you
and Dmitry:
http://cr.openjdk.java.net/~iklam/jdk15/8236847-SharedRegionAlignment.v03-delta/
- Ioi
On 2/13/2020 10:23 AM, Calvin Cheung wrote:
> Hi Ioi,
>
> The v02 patch looks good. Just couple of comments:
>
> 1. In dynamicArchive.cpp:
>
> 727 size_t total = estimate_archive_size() + 3 *
> MetaspaceShared::region_alignment();
>
> I think you can use MetaspaceShared::num_core_region instead of 3.
>
> 2. The testDump() method is not used in SharedRegionAlignmentTest.java.
>
> I don't need to see another webrev for the above changes.
>
> thanks,
>
> Calvin
>
> On 1/30/20 1:02 PM, Ioi Lam wrote:
>> Hi Dmitry,
>>
>> The goal of my patch is to make it possible to use the CDS archive
>> anywhere regardless of the OS page size of the build machine. In my
>> v01 patch, I added SharedRegionAlignment for flexibility, but I guess
>> that's more of a hassle.
>>
>> Here's a simplified v02 patch that removes the SharedRegionAlignment
>> flag:
>>
>> http://cr.openjdk.java.net/~iklam/jdk15/8236847-SharedRegionAlignment.v02/
>>
>>
>> Now, on AARCH64, we always dump with 64K alignment, even if the host
>> has 4K pages -- see MetaspaceShared::init_alignments(). At run time,
>> the check in MetaspaceShared::map_archive() is relaxed to allow
>> mapping of 64K-aligned archives on a host with 4K page size.
>>
>> Could you try this and see if it works for you?
>>
>> I don't have access to aarch64 hosts with 64k pages, so I tested on
>> x64 by changing the #if line in init_alignments to "#if 1". All tests
>> passed.
>>
>> Thanks
>> - Ioi
>>
>>
>> On 1/30/20 12:34 AM, Dmitry Samersoff wrote:
>>> Hello Ioi,
>>>
>>> I'm not sure that explicit specification of
>>> SharedRegionAlignment=64k helps. The goal is to build JDK on a
>>> build machine then use it smoothly on different test/production
>>> machines with both 4k and 64k pages, ever if it's the same JDK that
>>> resides in a shared network location.
>>>
>>> For a long term we may consider to revisit entire logic of default
>>> archive dumping and dump CDS archive of JDK classes on the first JVM
>>> run to $HOME/.cache but it requires more work and is out of scope of
>>> this issue.
>>>
>>> So as a short term solution I would propose to implement following
>>> logic:
>>>
>>> 1. Without any parameters
>>>
>>> - try to use existing CDS archive
>>>
>>> - if alignment doesn't match - disable CDS and continue execution.
>>>
>>> - if debug or fastdebug - issue a meaningful warning.
>>>
>>> 2. With explicit -Xshare:auto or -Xshare:on
>>>
>>> - try to use existing CDS archive
>>>
>>> - if alignment doesn't match - terminate VM with meaningful
>>> message.
>>>
>>> -Dmitry
>>>
>>>
>>> On 29.01.20 08:37, Ioi Lam wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8236847
>>>> http://cr.openjdk.java.net/~iklam/jdk15/8236847-SharedRegionAlignment.v01/
>>>>
>>>>
>>>> Hi Dmitry,
>>>>
>>>> Here's a proposal to make it possible to generate CDS archives that
>>>> can be used on machines with different OS page alignments: generate
>>>> the CDS archive with
>>>>
>>>> java -Xshare:dump -XX:SharedRegionAlignment=64k
>>>>
>>>> I want to be conservative, as this seems to affect only
>>>> Linux/aarch64, so I have limited the range of this flag to be no
>>>> more than 64KB. You can see checks for other invalid values in the
>>>> new test case.
>>>>
>>>> If SharedRegionAlignment is not specified (as for most platforms),
>>>> os::vm_allocation_granularity() will be used.
>>>>
>>>> For simplicity, -XX:SharedRegionAlignment can only be set when
>>>> dumping the base archive (-Xshare:dump). The dynamic archive
>>>> (-XX:DynamicDumpSharedSpaces) will always use the value as stored
>>>> in the base archive.
>>>>
>>>> Please let me know if this solution will work for your situation.
>>>> If so, I will file a CSR for the new flag and also write more test
>>>> cases.
>>>>
>>>> (Also, the default CDS archive is created at JDK build time. I'll
>>>> leave it to the ARM porting folks to do the makefile changes to
>>>> pass the
>>>> -XX:SharedRegionAlignment=64k flag to BUILD_CDS_ARCHIVE in Images.gmk)
>>>>
>>>> Thanks
>>>> - Ioi
>>
More information about the hotspot-runtime-dev
mailing list