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:09 UTC 2020
Hi Dmitry,
Thanks for the review. Have you tried the patch on your 4k/64k page size
hosts to see if the CDS archives are compatible with each other?
Here's the latest version to address comments from you and Calvin:
http://cr.openjdk.java.net/~iklam/jdk15/8236847-SharedRegionAlignment.v03/
http://cr.openjdk.java.net/~iklam/jdk15/8236847-SharedRegionAlignment.v03-delta/
On 2/10/2020 12:34 AM, Dmitry Samersoff wrote:
> Hello Ioi,
>
> The changes looks good for me, besides few nits below.
>
> cds.h
>
> 56: extra brackets in comments
>
Fixed.
> dynamicArchive.cpp
>
> 727: Is it possible to add here a comment explaining 3 *
> MetaspaceShared::region_alignment()
I changed the code like this:
size_t total = estimate_archive_size();
// We may need to round up the size of each core region for proper
alignment.
total += MetaspaceShared::num_core_region *
MetaspaceShared::region_alignment();
>
> metaspaceShared.cpp
>
> 237: "on Linux/aarch64," - twice in comments
>
Fixed
> 242: if is_power_of_2 is not necessary here
>
Removed.
Thanks
- Ioi
> -Dmitry
>
>
> On 31.01.20 00:02, 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