| 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 |
| =========== |
| |
| Linux |
| |
| 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 |
| |
| 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/ |
| $ curl -f https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.gz | tar -zxf - |
| $ 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" |
| $ (cd jdk/src/utils/hsdis/binutils && make BINUTILS=../../../../../binutils-2.38 ARCH=aarch64) |
| $ cp jdk/src/utils/hsdis/binutils/build/macosx-aarch64/hsdis-aarch64.dylib $JAVA_HOME/lib/server |
| |