RFR: 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462 [v2]
Tobias Hartmann
thartmann at openjdk.org
Wed Mar 27 06:33:22 UTC 2024
On Tue, 26 Mar 2024 22:43:48 GMT, Volker Simonis <simonis at openjdk.org> wrote:
>> Since [JDK-8251462: Simplify compilation policy](https://bugs.openjdk.org/browse/JDK-8251462), introduced in JDK 17, no native wrappers are generated any more if running with `-XX:-TieredCompilation` (i.e. native methods are not compiled any more).
>>
>> The attached JMH benchmark demonstrate that native method calls became twice as expensive with JDK 17:
>>
>> public static native void emptyStaticNativeMethod();
>>
>> @Benchmark
>> public static void baseline() {
>> }
>>
>> @Benchmark
>> public static void staticMethodCallingStatic() {
>> emptyStaticMethod();
>> }
>>
>> @Benchmark
>> public static void staticMethodCallingStaticNative() {
>> emptyStaticNativeMethod();
>> }
>>
>> @Benchmark
>> @Fork(jvmArgsAppend = "-XX:-TieredCompilation")
>> public static void staticMethodCallingStaticNativeNoTiered() {
>> emptyStaticNativeMethod();
>> }
>>
>> @Benchmark
>> @Fork(jvmArgsAppend = "-XX:+PreferInterpreterNativeStubs")
>> public static void staticMethodCallingStaticNativeIntStub() {
>> emptyStaticNativeMethod();
>> }
>>
>>
>> JDK 11
>> ======
>>
>> Benchmark Mode Cnt Score Error Units
>> NativeCall.baseline avgt 5 0.390 ± 0.016 ns/op
>> NativeCall.staticMethodCallingStatic avgt 5 1.693 ± 0.053 ns/op
>> NativeCall.staticMethodCallingStaticNative avgt 5 10.287 ± 0.754 ns/op
>> NativeCall.staticMethodCallingStaticNativeNoTiered avgt 5 9.966 ± 0.248 ns/op
>> NativeCall.staticMethodCallingStaticNativeIntStub avgt 5 20.384 ± 0.444 ns/op
>>
>>
>> JDK 17 & 21
>> ===========
>>
>> Benchmark Mode Cnt Score Error Units
>> NativeCall.baseline avgt 5 0.390 ± 0.017 ns/op
>> NativeCall.staticMethodCallingStatic avgt 5 1.852 ± 0.272 ns/op
>> NativeCall.staticMethodCallingStaticNative avgt 5 10.648 ± 0.661 ns/op
>> NativeCall.staticMethodCallingStaticNativeNoTiered avgt 5 20.657 ± 1.084 ns/op
>> NativeCall.staticMethodCallingStaticNativeIntStub avgt 5 22.429 ± 0.991 ns/op
>>
>>
>> The issue can bee seen if we run with `-XX:+PrintCompilation -XX:+PrintInlining`. With JDK 11 we get the following output for `-XX:+TieredCompilation`:
>>
>> 172 111 b 3 io.simonis.NativeCall::staticMethodCallingStaticNative (4 bytes)
>> @ 0 io.simonis.NativeCall::emptyStaticNa...
>
> Volker Simonis has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
>
> 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462
src/hotspot/share/compiler/compilationPolicy.cpp line 1096:
> 1094: if (Predicate::apply(method, cur_level, method->invocation_count(), 0)) {
> 1095: next_level = CompLevel_full_optimization;
> 1096: }
Nit: the indentation is wrong.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18496#discussion_r1540544822
More information about the hotspot-compiler-dev
mailing list