RFR: 8347489: RISC-V: Misaligned memory access with COH [v8]

Hamlin Li mli at openjdk.org
Tue Feb 4 09:12:11 UTC 2025


On Tue, 4 Feb 2025 07:06:22 GMT, Fei Yang <fyang at openjdk.org> wrote:

>> Hi, please consider this change.
>> 
>> We have different base_offset for T_BYTE/T_CHAR (4-byte instead of 8-byte aligned) with COH. This causes misaligned memory accesses for several instrinsics like String.Compare or String.Equals. The reason is that we assume 8-byte alignment and process one 8-byte word starting at the first array element for each iteration in the main loop. As a result, we have performance regressions on platforms with slow misaligned memory accesses like Unmatched and Premier P550 SBCs.
>> 
>> PS: Same issue is there even without COH. base_offset for T_BYTE/T_CHAR is 20 (thus 4-byte aligned) when `UseCompressedClassPointers` is disabled in this case.
>> 
>> Correctness test on linux-riscv64:
>> - [x] tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders") (release)
>> - [x] tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:-UseCompactObjectHeaders") (release)
>> - [x] hotspot:tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders") (fastdebug)
>> - [x] hotspot:tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:-UseCompactObjectHeaders") (fastdebug)
>> 
>> Performance test on Premier P550 (-XX:+AlwaysPreTouch -Xms8g -Xmx8g):
>> 
>> SPECjbb2005:
>> 
>> 1. Without Patch
>> 1.1 -XX:+UseParallelGC -XX:-UseCompactObjectHeaders: 32666
>> 1.2 -XX:+UseParallelGC -XX:+UseCompactObjectHeaders: 27610
>> 1.3 -XX:+UseG1GC       -XX:-UseCompactObjectHeaders: 30911
>> 1.4 -XX:+UseG1GC       -XX:+UseCompactObjectHeaders: 26008
>> 
>> 2. With Patch
>> 2.1 -XX:+UseParallelGC -XX:-UseCompactObjectHeaders: 32820
>> 2.2 -XX:+UseParallelGC -XX:+UseCompactObjectHeaders: 34179
>> 2.3 -XX:+UseG1GC       -XX:-UseCompactObjectHeaders: 30620
>> 2.4 -XX:+UseG1GC       -XX:+UseCompactObjectHeaders: 31936
>> 
>> 
>> SPECjbb2015:
>> 
>> 1. Without Patch
>> 1.1 -XX:+UseG1GC -XX:-UseCompactObjectHeaders: max-jOPS = 1444, critical-jOPS = 431
>> 1.2 -XX:+UseG1GC -XX:+UseCompactObjectHeaders: max-jOPS = 1092, critical-jOPS = 335
>> 
>> 2. With Patch
>> 2.1 -XX:+UseG1GC -XX:-UseCompactObjectHeaders: max-jOPS = 1452, critical-jOPS = 419
>> 2.2 -XX:+UseG1GC -XX:+UseCompactObjectHeaders: max-jOPS = 1438, critical-jOPS = 477
>
> Fei Yang has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 12 commits:
> 
>  - Review comment
>  - Merge branch 'master' into JDK-8347489
>  - Merge branch 'master' into JDK-8347489
>  - Review comment
>  - Review comment
>  - Merge branch 'master' into JDK-8347489
>  - Merge branch 'master' into JDK-8347489
>  - Comment
>  - Fix assertions
>  - Add assertions
>  - ... and 2 more: https://git.openjdk.org/jdk/compare/7ea176d7...db326650

Thank you!

-------------

Marked as reviewed by mli (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/23053#pullrequestreview-2592178000


More information about the hotspot-compiler-dev mailing list