RFR: 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462 [v4]

Igor Veresov iveresov at openjdk.org
Thu Mar 28 15:48:33 UTC 2024


On Thu, 28 Mar 2024 12:08:01 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 updated the pull request incrementally with one additional commit since the last revision:
> 
>   Compile native methods like trivial methods and added JTreg test

LGTM

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

Marked as reviewed by iveresov (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/18496#pullrequestreview-1966588410


More information about the hotspot-compiler-dev mailing list