[aarch64-port-dev ] RFR(M): 8243392: Remodel CDS/Metaspace storage reservation

Nick Gasson nick.gasson at arm.com
Wed Apr 29 07:47:02 UTC 2020


Hi Thomas,

On 04/28/20 22:54 pm, Thomas Stüfe wrote:
>
> These are two new methods:
>
> - bool CompressedKlassPointers::is_valid_base(address p)
>
> to let the platform tell you whether it considers p to be a valid encoding
> base. The only platform having these restrictions currently is aarch64.
>
> - ReservedSpace
> Metaspace::reserve_address_space_for_compressed_classes(size_t size);
>
> this hands over the process of allocating a range suitable for compressed
> class pointer encoding to the platform. Most platforms will allocate just
> anywhere, but some platforms may have a better strategy (e.g. trying low
> memory first, trying only correctly aligned addresses and so on).
>
> Beforehand, this coding existed in a similar form in metaspace.cpp for
> aarch64 and AIX. For now, I left the AIX part out - it seems only half
> done, and I want to check further if we even need it, if yes why not on
> Linux ppc, and C1 does not seem to support anything other than base+offset
> with shift either, but I may be mistaken.

Just a small comment:

  33 bool CompressedKlassPointers::is_valid_base(address p) {
  34
  35   // Below 32G, base must be aligned to 4G.
  36   // Above that point, base must be aligned to 32G
  37
  38   if (p < (address)(32 * G)) {
  39     return is_aligned(p, 4 * G);
  40   }
  41
  42   return is_aligned(p, 32 * G);
  43
  44 }

On line 42 I'd prefer to use (4 << LogKlassAlignmentInBytes)*G as it
currently is in metaspace.cpp instead of the literal 32. This makes the
relationship with the compressed class decode logic a bit clearer as the
restriction comes from the MOV and MOVK instructions we use to
decompress the pointer: we have to ensure the bits of the base and bits
of the offset after shifting do not overlap. Similarly for the
`increment` field in metaspace_aarch64.cpp line 51.


Thanks,
Nick


More information about the aarch64-port-dev mailing list