RFR[S] 8241158 SA TestHeapDumpForInvokeDynamic.java fails when CDS archive is relocated
Ioi Lam
ioi.lam at oracle.com
Thu Apr 16 18:12:00 UTC 2020
On 4/16/20 10:08 AM, Calvin Cheung wrote:
> Hi Ioi,
>
> Regarding the changes in javaClasses.cpp, I saw that in your new code
> in systemDictionaryShared.cpp, the
> java_lang_Class::update_archived_mirror_native_pointers(m) won't be
> called if MetaspaceShared::relocation_delta() is 0. But I noticed
> there's another code path to
> java_lang_Class::update_archived_mirror_native_pointers() after
> HeapShared::fixup_mapped_heap_regions() is called in
> SystemDictionary::resolve_well_known_classes():
>
> java_lang_Class::update_archived_mirror_native_pointers(oop) : void
> java_lang_Class::restore_archived_mirror(Klass *, Handle, Handle,
> Handle, Thread *) : bool
> java_lang_Class::fixup_mirror(Klass *, Thread *) : void
> Universe::fixup_mirrors(Thread *) : void
> SystemDictionary::resolve_well_known_classes(Thread *) : void
> SystemDictionary::initialize(Thread *) : void
> Universe::genesis(Thread *) : void
> universe2_init() : void
> init_globals() : ?
>
> Will MetaspaceShared::relocation_delta() always be non-zero in the
> above case?
>
Hi Calvin,
Thanks for taking a look at this.
As part of this patch, the call path that you mentioned above has been
removed. Now we always call update_archived_mirror_native_pointers on
all archived classes at VM start-up, so there's no need to patch
individual mirrors during class loading.
See the change on line 1294.
http://cr.openjdk.java.net/~iklam/jdk15/8241158-sa-heap-dump-fails.v01/src/hotspot/share/classfile/javaClasses.cpp.cdiff.html
Thanks
- Ioi
> thanks,
>
> Calvin
>
> On 4/14/20 10:07 PM, Ioi Lam wrote:
>> Hi Chris,
>>
>> Thanks for the info. I've synced with the latest repo and updated the
>> webrev in-place:
>>
>> http://cr.openjdk.java.net/~iklam/jdk15/8241158-sa-heap-dump-fails.v01/
>>
>> I'll rerun tiers 1-4 as two of the affected tests
>> (ClhsdbDumpheap.java, TestHeapDumpForInvokeDynamic.java) will now be
>> executed on macos by mach5.
>>
>> Thanks
>> - Ioi
>>
>> On 4/14/20 3:34 PM, Chris Plummer wrote:
>>> [Not a review]
>>>
>>> Hi Ioi,
>>>
>>> Your ProblemList.txt is out of date. All those Solaris entries for
>>> 8193639 are now gone.
>>>
>>> thanks,
>>>
>>> Chris
>>>
>>> On 4/14/20 3:01 PM, Ioi Lam wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8241158
>>>> http://cr.openjdk.java.net/~iklam/jdk15/8241158-sa-heap-dump-fails.v01/
>>>>
>>>>
>>>> This is a bug in the CDS relocation code. When
>>>> -XX:ArchiveRelocationMode=1 is
>>>> specified, the CDS archive is mapped to an address picked by the OS
>>>> (instead of the default address 0x800000000). As a result, we need
>>>> to patch
>>>> the native Klass* pointers inside java.lang.Class instances that are
>>>> stored in the CDS archived heap region.
>>>>
>>>> Before this fix, the patching is done incrementally, when a class
>>>> is resolved.
>>>> However, when SA tries to do a heap dump, it may see a
>>>> java.lang.Class instance
>>>> that is not yet resolved, whose Klass* pointer has not been patched.
>>>> Dereferencing the unpatched pointer causes SA to fail.
>>>>
>>>> (The failure happens on macos only, probably because the invalid
>>>> dereference
>>>> causes different exceptions on other platforms due to specific
>>>> memory layout,
>>>> and SA is able to handle such exceptions and limp on).
>>>>
>>>> The fix is to unconditionally patch all the Klass* pointers during VM
>>>> initialization.
>>>>
>>>> We already patch a lot of stuff at start-up when the CDS archive is
>>>> relocated,
>>>> so doing a little patching more doesn't hurt.
>>>>
>>>> ----
>>>>
>>>> Passed mach5 tiers 1-4. Ran the failed test manually on macos and
>>>> it passed.
>>>>
>>>> Thanks
>>>> - Ioi
>>>
>>
More information about the hotspot-runtime-dev
mailing list