RFR: 8291106: ZPlatformGranuleSizeShift is redundant due to it can not be modified
Erik Österlund
eosterlund at openjdk.org
Wed Jul 27 07:11:09 UTC 2022
On Thu, 21 Jul 2022 02:17:33 GMT, Leslie Zhai <lzhai at openjdk.org> wrote:
> Hi,
>
> When I am tunning `ZPageSizeSmall` to 16 MB from 2MB:
>
>
> const size_t ZPlatformGranuleSizeShift = 24; // 16MB
>
> // Granule shift/size
> const size_t ZGranuleSizeShift = ZPlatformGranuleSizeShift;
>
> // Page size shifts
> const size_t ZPageSizeSmallShift = ZGranuleSizeShift;
>
> // Page sizes
> const size_t ZPageSizeSmall = (size_t)1 << ZPageSizeSmallShift;
>
>
> `zBitField` failed to work:
>
>
> Internal Error
> (/home/zhaixiang/jdk/src/hotspot/share/gc/z/zBitField.hpp:76), pid=923047, tid=923069
> # assert(((ContainerType)value & (FieldMask << ValueShift)) == (ContainerType)value) failed: Invalid value
> #
> # JRE version: OpenJDK Runtime Environment (20.0) (fastdebug build 20-internal-adhoc.root.jdk)
> # Java VM: OpenJDK 64-Bit Server VM (fastdebug 20-internal-adhoc.root.jdk, mixed mode, sharing, tiered, compressed class ptrs, z gc, linux-aarch64)
>
>
> Perhaps `mask` also need to be adjusted:
>
>
> static size_t object_index(oop obj) {
> const uintptr_t addr = ZOop::to_address(obj);
> const uintptr_t offset = ZAddress::offset(addr);
> const uintptr_t mask = ZGranuleSize - 1;
> return (offset & mask) >> ZObjectAlignmentSmallShift;
> }
>
>
> Back to the point: ZPlatformGranuleSizeShift is redundant due to it can not be modified, for example, `24`, so I removed the `ZPlatformGranuleSizeShift` from cpu backends, just keep it for debugging AArch64 to see the issue.
>
> Please review my patch.
>
> Thanks,
> Leslie Zhai
I have many comments. But before diving into that - what is the actual problem that you are trying to solve? Do you have an AArch64 CPU that does not support 2M large pages, but does support 16M large pages?
-------------
PR: https://git.openjdk.org/jdk/pull/9582
More information about the hotspot-gc-dev
mailing list