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