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