c1ec0b28eb
Summary: Existing multiGet() in java calls multi_get_helper() which then calls DB::std::vector MultiGet(). This doesn't take advantage of io_uring. This change adds another JNI level method that runs a parallel code path using the DB::void MultiGet(), using ByteBuffers at the JNI level. We call it multiGetDirect(). In addition to using the io_uring path, this code internally returns pinned slices which we can copy out of into our direct byte buffers; this should reduce the overall number of copies in the code path to/from Java. Some jmh benchmark runs (100k keys, 1000 key multiGet) suggest that for value sizes > 1k, we see about a 20% performance improvement, although performance is slightly reduced for small value sizes, there's a little bit more overhead in the JNI methods. Closes https://github.com/facebook/rocksdb/issues/8407 Pull Request resolved: https://github.com/facebook/rocksdb/pull/9224 Reviewed By: mrambacher Differential Revision: D32951754 Pulled By: jay-zhuang fbshipit-source-id: 1f70df7334be2b6c42a9c8f92725f67c71631690
963 B
963 B
JMH Benchmarks for RocksJava
These are micro-benchmarks for RocksJava functionality, using JMH (Java Microbenchmark Harness).
Compiling
Note: This uses a specific build of RocksDB that is set in the <version>
element of the dependencies
section of the pom.xml
file. If you are testing local changes you should build and install a SNAPSHOT version of rocksdbjni, and update the pom.xml
of rocksdbjni-jmh file to test with this.
For instance, this is how to install the OSX jar you just built for 6.26.0
$ mvn install:install-file -Dfile=./java/target/rocksdbjni-6.26.0-SNAPSHOT-osx.jar -DgroupId=org.rocksdb -DartifactId=rocksdbjni -Dversion=6.26.0-SNAPSHOT -Dpackaging=jar
$ mvn package
Running
$ java -jar target/rocksdbjni-jmh-1.0-SNAPSHOT-benchmarks.jar
NOTE: you can append -help
to the command above to see all of the JMH runtime options.