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 |
||
---|---|---|
.. | ||
benchmark/src/main/java/org/rocksdb/benchmark | ||
crossbuild | ||
jmh | ||
rocksjni | ||
samples/src/main/java | ||
src | ||
CMakeLists.txt | ||
HISTORY-JAVA.md | ||
jdb_bench.sh | ||
Makefile | ||
pom.xml.template | ||
RELEASE.md | ||
understanding_options.md |