[aarch64-port-dev ] RFR(M): 8233743: AArch64: Make r27 conditionally allocatable

Ioi Lam ioi.lam at oracle.com
Thu Nov 28 08:19:36 UTC 2019



On 11/27/19 11:50 PM, Nick Gasson wrote:
> Hi Andrew,
>
>>>
>>> CompressedKlassPointers::base() => 0xffff0b4b5000
>>> CompressedKlassPointers::shift() => 3
>>
>> This is bad. Can you have a look at the allocation code to see why 
>> the search
>> for an appropriate address range fails?
>>
>
> We have a loop in Metaspace::allocate_metaspace_compressed_klass_ptrs 
> that searches for a 4G aligned location for the compressed class space 
> on AArch64, but this search is not done if CDS is in use and the 
> archive was loaded successfully, because in that case the class space 
> has already been mapped (i.e. `metaspace_rs.is_reserved()' is true).
>
> Previously it was only possible to map the CDS archive at 0x800000000. 
> The compressed class base is set to the start of this region which 
> happens to be 4G aligned so our MacroAssembler::load_klass 
> optimisation applies and we emit the short code sequence.
>
> With the recent change in 8231610, if the CDS archive cannot be mapped 
> at that address (e.g. because of ASLR or because the heap is mapped 
> there) then the CDS archive will be relocated to an arbitrary address 
> decided by mmap. That's where the oddly-aligned compressed klass base 
> above comes from. This causes MacroAssembler::load_klass to emit the 
> inefficient sequence which then overflows the buffer for the itable 
> stub (the worst-case size estimate there is wrong, which needs to be 
> fixed separately).
>
> A minimal way to reproduce this is:
>
> $ java -XX:HeapBaseMinAddress=33G -Xshare:on -Xlog:cds=debug -version
> ...
> [0.050s][info ][cds] CDS archive was created with max heap size = 
> 128M, and the following configuration:
> [0.050s][info ][cds]     narrow_klass_base = 0x0000fffec7507000, 
> narrow_klass_shift = 3
> ...
> #  guarantee(masm->pc() <= s->code_end()) failed: itable #2: 
> overflowed buffer, estimated len: 180, actual len: 184, overrun: 4
>
>
> I suggest we move the 4G-aligned search from 
> allocate_metaspace_compressed_klass_ptrs into its own function that 
> can then be called from MetaspaceShared::reserve_shared_space when 
> requested_address==NULL (i.e. the fallback path when mmap at 
> 0x800000000 fails). If you're happy with this I'll make a patch for 
> review?
>

You can also force CDS archive relocation with 
-XX:+UnlockDiagnosticVMOptions -XX:ArchiveRelocationMode=1. That way you 
can test the behavior with the default heap settings.

Thanks
- Ioi


>
> Thanks,
> Nick



More information about the hotspot-compiler-dev mailing list