On 2/2/21 1:32 AM, Thomas Stüfe wrote:
On Mon, Feb 1, 2021 at 10:11 PM Ioi Lam <ioi....@oracle.com
<mailto:ioi....@oracle.com>> wrote:
On 2/1/21 9:36 AM, Thomas Stüfe wrote:
This does not solve the alignment problem, but I don't like
that we unconditionally print a message here since this is a
non-fatal error. Also, CDS mapping may fail for other reasons,
for which we do not print unconditionally. I think we should make
this info log level:
--- a/src/hotspot/share/memory/metaspaceShared.cpp
+++ b/src/hotspot/share/memory/metaspaceShared.cpp
@@ -1725,7 +1725,7 @@ MapArchiveResult
MetaspaceShared::map_archive(FileMapInfo* mapinfo, char* mapped
mapinfo->set_is_mapped(false);
if (mapinfo->alignment() !=
(size_t)os::vm_allocation_granularity()) {
- log_error(cds)("Unable to map CDS archive --
os::vm_allocation_granularity() expected: " SIZE_FORMAT
+ log_info(cds)("Unable to map CDS archive --
os::vm_allocation_granularity() expected: " SIZE_FORMAT
" actual: %d", mapinfo->alignment(),
os::vm_allocation_granularity());
return MAP_ARCHIVE_OTHER_FAILURE;
}
@ Ioi, does that make sense?
Yes, your fix makes sense.
Thanks. https://github.com/openjdk/jdk/pull/2348
<https://urldefense.com/v3/__https://github.com/openjdk/jdk/pull/2348__;!!GqivPVa7Brio!LRn8UjBQlnYs4XgafXHxU7RUqFZZx-Y19XBMcwy44BEjEXSIBS1GBrWKZ6pwcw$>
This issue is being address in
https://bugs.openjdk.java.net/browse/JDK-8236847
<https://bugs.openjdk.java.net/browse/JDK-8236847>. We will
probably unconditionally change the alignment to 64KB for AARCH64,
as well as MacOS (so that you can run a X64 JDK on M1 using Rosetta).
I thought so too. I also see it being used for region-to-region
alignment, where I believe page size would be sufficient?
The problem in JDK-8236847
<https://bugs.openjdk.java.net/browse/JDK-8236847> happens when you
create a CDS archive on one machine, and use it on another, and the two
machines have different page sizes.
(a) linux/aarch64 can be configured to have either 4KB or 64KB page sizes
(b) macOS/x64 uses 4KB, but macOS/aarch64 uses 64KB
So if you create the archive on a machine with 4KB page size, your RW
region may start at (64KB * N + 4KB), and this region cannot be mapped
directly on a machine with 64KB sizes.
My proposal is to always align the CDS regions by 64KB on these
platforms, so they can always be mapped under all circumstances.
Alternatives are: use read() instead of mmap; or, instead of mmaping the
individual regions, mmap all of them at once (assuming that the first
region, MC, is 64KB aligned). Either solution will reduce the
possibility of sharing, and make the code more complicated.
Since the CDS archive is at least 10MB in size, adding 3 extra padding
areas of up to 64KB each doesn't seem that outrageous in file size.
There's no change in physical memory usage since we never touch the
padding area.
Thanks
- Ioi
.:Thomas
Thanks
- Ioi
Cheers, Thomas
On Mon, Feb 1, 2021 at 6:20 PM Andrew Haley <a...@redhat.com
<mailto:a...@redhat.com>> wrote:
On 2/1/21 5:14 PM, Aleksey Shipilev wrote:
> On 2/1/21 4:38 PM, Andrew Haley wrote:
>> but that doesn't work either. Any ideas? I'm really stuck.
>
> Did you "make clean" after changing any of the configure
files and/or configure arguments? I.e. did
> AWTIcon32_java_icon16_png actually regenerate?
Many times.
> Prepending the build with "LOG=debug" would tell what
cmdlines are used at every step of build process.
Sure, I can see what it's doing. I think this is actually a
regression
caused by the Windows-AArch64 port. I'll do some bisecting.
--
Andrew Haley (he/him)
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com
<https://urldefense.com/v3/__https://www.redhat.com__;!!GqivPVa7Brio!MzT8lD4heOPkWgVBap3cDC2aM4W8zJ1wWS_-PVlTdPwr96wHRafdO7zjS2x2qQ$>>
https://keybase.io/andrewhaley
<https://urldefense.com/v3/__https://keybase.io/andrewhaley__;!!GqivPVa7Brio!MzT8lD4heOPkWgVBap3cDC2aM4W8zJ1wWS_-PVlTdPwr96wHRafdO7wP-EZNow$>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671