2023-10-14 11:36:42 -04:00
|
|
|
benchmarks
|
|
|
|
==========
|
|
|
|
|
|
|
|
The :lucene:benchmark-jmh module contains can be used to compile
|
|
|
|
and execute JMH (https://github.com/openjdk/jmh) micro-benchmarks.
|
|
|
|
|
|
|
|
Look at existing classes and JMH documentation for inspiration on how
|
|
|
|
to write good micro-benchmarks.
|
|
|
|
|
|
|
|
build
|
|
|
|
=====
|
|
|
|
|
|
|
|
To compile the project and prepare JMH launcher, run:
|
|
|
|
|
|
|
|
gradlew :lucene:benchmark-jmh:assemble
|
|
|
|
|
|
|
|
The above target will display exact commands to execute JMH from
|
|
|
|
command line.
|
|
|
|
|
|
|
|
run
|
|
|
|
===
|
|
|
|
|
|
|
|
java --module-path lucene/benchmark-jmh/build/benchmarks --module org.apache.lucene.benchmark.jmh
|
|
|
|
|
|
|
|
You can pass any JMH options to the above command, for example:
|
|
|
|
|
|
|
|
-h displays verbose help for all options
|
|
|
|
-l list available benchmarks
|
|
|
|
-lp list benchmarks that pass the filter and their parameters
|
|
|
|
-prof perfasm use perfasm profiler to see assembly
|
|
|
|
-p size=1024 pass "size=1024" parameter to benchmark
|
|
|
|
regexp execute all benchmark containing regexp
|
|
|
|
|
|
|
|
Here is an example running a targeted benchmark:
|
|
|
|
|
|
|
|
java --module-path lucene/benchmark-jmh/build/benchmarks --module org.apache.lucene.benchmark.jmh VectorUtilBenchmark.binaryCosine -p size=1024
|
|
|
|
|
|
|
|
Or running all methods and sizes of VectorUtilBenchmark
|
|
|
|
|
|
|
|
java --module-path lucene/benchmark-jmh/build/benchmarks --module org.apache.lucene.benchmark.jmh VectorUtilBenchmark
|
|
|
|
|
|
|
|
|
|
|
|
hsdis setup
|
|
|
|
===========
|
|
|
|
|
2023-10-21 02:02:24 -04:00
|
|
|
Linux
|
|
|
|
|
2023-10-14 11:36:42 -04:00
|
|
|
In order to see disassembled instructions and not just binary instructions when using '-prof perfasm':
|
|
|
|
|
|
|
|
$ git clone --depth 1 https://github.com/openjdk/jdk/
|
|
|
|
$ curl -f https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.gz | tar -zxf -
|
|
|
|
$ (cd jdk && bash ./configure --with-hsdis=binutils --with-binutils-src=../binutils-2.38 && make build-hsdis)
|
|
|
|
$ cp jdk/build/linux-x86_64-server-release/support/hsdis/hsdis-amd64.so $JAVA_HOME/lib/server
|
2023-10-21 02:02:24 -04:00
|
|
|
|
|
|
|
Mac OS X
|
|
|
|
|
|
|
|
In order to see disassembled instructions and not just binary instructions when using '-prof dtraceasm':
|
|
|
|
|
|
|
|
This one is a little rough because they removed the Makefile so you have to bring it back from the dead.
|
|
|
|
Otherwise you are stuck wrestling down full dependencies of OpenJDK (metal etc) just to compile a single C file.
|
|
|
|
Also you must run benchmarks as root to use dtrace, but it works.
|
|
|
|
|
|
|
|
$ git clone --depth 1 https://github.com/openjdk/jdk/
|
2023-11-14 05:51:51 -05:00
|
|
|
$ curl -f https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.gz | tar -zxf -
|
2023-10-21 02:02:24 -04:00
|
|
|
$ curl -fo jdk/src/utils/hsdis/binutils/Makefile https://raw.githubusercontent.com/openjdk/jdk/3c7ae1225f0d5575fd927a9b76fb40dc30e208cd/src/utils/hsdis/Makefile
|
|
|
|
$ vi jdk/src/utils/hsdis/binutils/Makefile, change SOURCE = hsdis.c to SOURCE = hsdis-binutils.c
|
|
|
|
$ vi jdk/src/utils/hsdis/binutils/hsdis-binutils.c, change #include "hsdis.h" to #include "../hsdis.h"
|
2023-10-21 02:05:34 -04:00
|
|
|
$ (cd jdk/src/utils/hsdis/binutils && make BINUTILS=../../../../../binutils-2.38 ARCH=aarch64)
|
2023-10-21 02:02:24 -04:00
|
|
|
$ cp jdk/src/utils/hsdis/binutils/build/macosx-aarch64/hsdis-aarch64.dylib $JAVA_HOME/lib/server
|
|
|
|
|