RFR: 8307352: AARCH64: Improve itable_stub [v7]
Aleksey Shipilev
shade at openjdk.org
Thu Aug 24 14:08:36 UTC 2023
On Wed, 23 Aug 2023 10:56:52 GMT, Boris Ulasevich <bulasevich at openjdk.org> wrote:
>> This is a change for AARCH similar to https://github.com/openjdk/jdk/pull/13460
>>
>> The change replaces two separate iterations over the itable with a new algorithm consisting of two loops. First, we look for a match with resolved_klass, checking for a match with holder_klass along the way. Then we continue iterating (not starting over) the itable using the second loop, checking only for a match with holder_klass.
>>
>> InterfaceCalls openjdk benchmark performance results on A53, A72, Neoverse N1 and V1 micro-architectures:
>>
>>
>> Cortex-A53 (Pi 3 Model B Rev 1.2)
>>
>> test1stInt2Types 37.5 37.358 0.38
>> test1stInt3Types 160.166 148.04 8.19
>> test1stInt5Types 158.131 147.955 6.88
>> test2ndInt2Types 52.634 53.291 -1.23
>> test2ndInt3Types 201.39 181.603 10.90
>> test2ndInt5Types 195.722 176.707 10.76
>> testIfaceCall 157.453 140.498 12.07
>> testIfaceExtCall 175.46 154.351 13.68
>> testMonomorphic 32.052 32.039 0.04
>> AVG: 6.85
>>
>> Cortex-A72 (Pi 4 Model B Rev 1.2)
>>
>> test1stInt2Types 27.4796 27.4738 0.02
>> test1stInt3Types 66.0085 64.9374 1.65
>> test1stInt5Types 67.9812 66.2316 2.64
>> test2ndInt2Types 32.0581 32.062 -0.01
>> test2ndInt3Types 68.2715 65.6643 3.97
>> test2ndInt5Types 68.1012 65.8024 3.49
>> testIfaceCall 64.0684 64.1811 -0.18
>> testIfaceExtCall 91.6226 81.5867 12.30
>> testMonomorphic 26.7161 26.7142 0.01
>> AVG: 2.66
>>
>> Neoverse N1 (m6g.metal)
>>
>> test1stInt2Types 2.9104 2.9086 0.06
>> test1stInt3Types 10.9642 10.2909 6.54
>> test1stInt5Types 10.9607 10.2856 6.56
>> test2ndInt2Types 3.3410 3.3478 -0.20
>> test2ndInt3Types 12.3291 11.3089 9.02
>> test2ndInt5Types 12.328 11.2704 9.38
>> testIfaceCall 11.0598 10.3657 6.70
>> testIfaceExtCall 13.0692 11.2826 15.84
>> testMonomorphic 2.2354 2.2341 0.06
>> AVG: 6.00
>>
>> Neoverse V1 (c7g.2xlarge)
>>
>> test1stInt2Types 2.2317 2.2320 -0.01
>> test1stInt3Types 6.6884 6.1911 8.03
>> test1stInt5Types 6.7334 6.2193 8.27
>> test2ndInt2Types 2.4002 2.4013 -0.04
>> test2ndInt3Types 7.9603 7.0372 13.12
>> test2ndInt5Types 7.9532 7.0474 12.85
>> testIfaceCall 6.7028 6.3272 5.94
>> testIfaceExtCall 8.3253 6.941...
>
> Boris Ulasevich has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains two commits:
>
> - rework loop_scan_resolved_entry cycle as proposed
> - 8307352: AARCH64: Improve itable_stub
I find this version oddly deviating from [x86_64 improvement](https://github.com/openjdk/jdk/commit/8cdd95e8a2a7814ab7983fb3f41e6fa5793d410f) done before it, which does not simplify the review. Anyway, nits:
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 1230:
> 1228: // itableOffsetEntry[] itable = recv_klass + Klass::vtable_start_offset() + recv_klass->_vtable_len;
> 1229: // temp_itbl_klass = itable[0]._interface;
> 1230: ldr(temp_itbl_klass, Address(recv_klass, scan_temp, Address::lsl(3)));
What is `Address::lsl(3)` here? From x86_64, it seems to be related to `ioffset`? If so, this magic `3` should derive from it.
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 1233:
> 1231: mov(holder_offset, zr);
> 1232: // scan_temp = &(itable[0]._interface)
> 1233: lea(scan_temp, Address(recv_klass, scan_temp, Address::lsl(3)));
Same here: `Address::lsl(3)`.
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 1296:
> 1294: bind(L_holder_found);
> 1295: ldrw(method_result, Address(scan_temp, ooffset - ioffset));
> 1296: add(recv_klass, recv_klass, (itable_index << 3) + in_bytes(itableMethodEntry::method_offset()) - vtable_start_offset - ioffset);
Same magic number here: `itable_index << 3`.
-------------
PR Review: https://git.openjdk.org/jdk/pull/13792#pullrequestreview-1593666883
PR Review Comment: https://git.openjdk.org/jdk/pull/13792#discussion_r1304372456
PR Review Comment: https://git.openjdk.org/jdk/pull/13792#discussion_r1304374895
PR Review Comment: https://git.openjdk.org/jdk/pull/13792#discussion_r1304376044
More information about the hotspot-dev
mailing list