RFR: 8236847: CDS archive with 4K alignment unusable on machines with 64k pages [v7]
Thomas Stuefe
stuefe at openjdk.java.net
Wed Mar 10 18:47:11 UTC 2021
On Wed, 10 Mar 2021 17:41:25 GMT, Yumin Qi <minqi at openjdk.org> wrote:
>> Hi, Please review
>> Usually most OSes are configured with page size of 4K, but some others are configured with 64K. If jdk binary is built on 4K platform and run on different configured platforms, CDS fails to be loaded due to region alignment mismatch:
>> Unable to map CDS archive -- os::vm_allocation_granularity() expected: 4096 actual: 65536
>> This change uses 64K as region alignment if OS page size is less than 64K. For most of the current OSes, means always use 64K as file map region alignment.
>> The archive size will increase about 300K due to the change.
>> Tests: tier1-4
>> Run MacOS/X64 binary on MacOS/aarch64
>>
>> Thanks
>> Yumin
>
> Yumin Qi has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains seven commits:
>
> - Merge branch 'master' into jdk-8236847
> - Merge master
> - Add --enable-compatible-cds-alignment for linux-aarch64 and macosx-x64 in jib job
> - Switch to enble compatible-cds-alignment at configuration
> - Make CDS core region alignment configurable at build time
> - Make 64K core region alignment only for specific platforms, also fixed comments as suggestions.
> - 8236847: CDS archive with 4K alignment unusable on machines with 64k pages
I think this is fine. "compatible" vs "default" is a good compromise. Small remarks inside. Sorry for all the bikeshedding!
Cheers, Thomas
src/hotspot/os_cpu/bsd_x86/os_bsd_x86.hpp line 30:
> 28: #if defined(COMPATIBLE_CDS_ALIGNMENT)
> 29: #define CDS_CORE_REGION_ALIGNMENT (16*K)
> 30: #endif
Could you limit this to `_APPLE_`? I don't think this affects the BSDs.
(We really should separate BSD and MacOS sources at some point.)
Also maybe a comment like this: "Core region alignment is 16K to be able to run binaries built on MacOS x64 on MacOS aarch64." ?
src/hotspot/share/memory/metaspaceShared.cpp line 125:
> 123: // os::vm_allocation_granularity() is usually 4K for most OSes. However, on Linux/aarch64,
> 124: // it can be either 4K or 64K and on Macosx-arm it is 16K. To generate archives that are
> 125: // compatible for both settings. An alternative cds core region alignment can be enabled
dot -> comma and lowercase
-------------
Marked as reviewed by stuefe (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/2651
More information about the hotspot-runtime-dev
mailing list