RFR: 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462 [v2]
Volker Simonis
simonis at openjdk.org
Tue Mar 26 22:43:48 UTC 2024
> 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::emptyStaticNativeMethod (0 bytes) native method
> 172 112 n 0 io.simonis.NativeCall::emptyStaticNativeMethod (native...
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
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/18496/files
- new: https://git.openjdk.org/jdk/pull/18496/files/7eb0d11d..157e124e
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=18496&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=18496&range=00-01
Stats: 0 lines in 0 files changed: 0 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/18496.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18496/head:pull/18496
PR: https://git.openjdk.org/jdk/pull/18496
More information about the hotspot-compiler-dev
mailing list