[ OpenJDK 16 and perfasm]

Denis Gabaydulin gabaden at gmail.com
Fri May 28 07:29:34 UTC 2021


Hi, folks! After migrating from JDK  15 to JDK 16 I figure out that perform
profiler doesn't work for me (was working with JDK 15). Now, I can't see
assembler instructions in the output logs. Now the log looks like.

...[Hottest Region
1]..............................................................................
c2, level 4,
org.sherman.benchmark.java.jmh_generated.IntersectionBenchmark_hasIntersectionVector_jmhTest::hasIntersectionVector_thrpt_jmhStub,
version 1277 (67 bytes)

                               ; -
jdk.incubator.vector.Int128Vector::reduceLanesToLong at 2 (line 323)
                               ; -
org.sherman.interview.vector.ArrayUtils::handleChunk at 17 (line 71)
                               ; -
org.sherman.interview.vector.ArrayUtils::hasIntersectionVector at 110 (line 51)
                               ; -
org.sherman.benchmark.java.IntersectionBenchmark::hasIntersectionVector at 8
(line 38)
                               ; -
org.sherman.benchmark.java.jmh_generated.IntersectionBenchmark_hasIntersectionVector_jmhTest::hasIntersectionVector_thrpt_jmhStub at 17
(line 158)
           0x00007f8f73eb4f58: d233 d2c5 | fa6f e2c4 | e259 02e2 | c4e2
5902 | e4c5 f96e | dac5 d9fe | e3c5 f97e
           0x00007f8f73eb4f74: ;*iload {reexecute=0 rethrow=0 return_oop=0}
                               ; -
org.sherman.interview.vector.ArrayUtils::hasIntersectionVector at 78 (line 47)
                               ; -
org.sherman.benchmark.java.IntersectionBenchmark::hasIntersectionVector at 8
(line 38)
                               ; -
org.sherman.benchmark.java.jmh_generated.IntersectionBenchmark_hasIntersectionVector_jmhTest::hasIntersectionVector_thrpt_jmhStub at 17
(line 158)

In JDK 15 the asm instructions were in place.

....[Hottest Region
1]..............................................................................
c2, level 4,
org.sherman.benchmark.java.generated.ForeignMemoryBenchmark_putLongForeign_jmhTest::putLongForeign_thrpt_jmhStub,
version 774 (291 bytes)

             0x00007fb35c8238ad:   movzbl  0x94(%rdx),%r10d            ;
implicit exception: dispatches to 0x00007fb35c823d98

 ;*getfield isDone {reexecute=0 rethrow=0 return_oop=0}
                                                                       ; -
org.sherman.benchmark.java.generated.ForeignMemoryBenchmark_putLongForeign_jmhTest::putLongForeign_thrpt_jmhStub at 27
(line 145)
             0x00007fb35c8238b5:   mov     $0x1,%ebp
             0x00007fb35c8238ba:   test    %r10d,%r10d
         ╭   0x00007fb35c8238bd:   jne     0x7fb35c8239fc

What I've checked.

1). The installation of libhsdis0-fcml library.
2). Link to the library in the JDK lib path.
/usr/lib/jvm/openjdk-16/lib/hsdis-amd64.so ->
/usr/lib/x86_64-linux-gnu/libhsdis.so.0
3). Flags are set in the jmh log.
usr/lib/jvm/java-16-openjdk-amd64/bin/java, --enable-preview,
--add-modules=jdk.incubator.vector, -XX:+UnlockDiagnosticVMOptions,
-XX:+LogCompilation, -XX:LogFile=/tmp/jmh2086304793742034216hslog,
-XX:+PrintAssembly, -XX:+PrintInterpreter, -XX:+PrintNMethods,
-XX:+PrintNativeNMethods, -XX:+PrintSignatureHandlers,
-XX:+PrintAdapterHandlers, -XX:+PrintStubCode
4). Set the minimal hot threshold (-prof perfasm:hotThreshold=0.01)

But the result hasn't changed :-(
How can I fix the problem?


More information about the jmh-dev mailing list