rocksdb/table
Vijay Nadimpalli 4c49e38f15 MultiGet batching in memtable (#5818)
Summary:
RocksDB has a MultiGet() API that implements batched key lookup for higher performance (https://github.com/facebook/rocksdb/blob/master/include/rocksdb/db.h#L468). Currently, batching is implemented in BlockBasedTableReader::MultiGet() for SST file lookups. One of the ways it improves performance is by pipelining bloom filter lookups (by prefetching required cachelines for all the keys in the batch, and then doing the probe) and thus hiding the cache miss latency. The same concept can be extended to the memtable as well. This PR involves implementing a pipelined bloom filter lookup in DynamicBloom, and implementing MemTable::MultiGet() that can leverage it.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5818

Test Plan:
Existing tests

Performance Test:
Ran the below command which fills up the memtable and makes sure there are no flushes and then call multiget. Ran it on master and on the new change and see atleast 1% performance improvement across all the test runs I did. Sometimes the improvement was upto 5%.

TEST_TMPDIR=/data/users/$USER/benchmarks/feature/ numactl -C 10 ./db_bench -benchmarks="fillseq,multireadrandom" -num=600000 -compression_type="none" -level_compaction_dynamic_level_bytes -write_buffer_size=200000000 -target_file_size_base=200000000 -max_bytes_for_level_base=16777216 -reads=90000 -threads=1 -compression_type=none -cache_size=4194304000 -batch_size=32 -disable_auto_compactions=true -bloom_bits=10 -cache_index_and_filter_blocks=true -pin_l0_filter_and_index_blocks_in_cache=true -multiread_batched=true -multiread_stride=4 -statistics -memtable_whole_key_filtering=true -memtable_bloom_size_ratio=10

Differential Revision: D17578869

Pulled By: vjnadimpalli

fbshipit-source-id: 23dc651d9bf49db11d22375bf435708875a1f192
2019-10-10 09:39:39 -07:00
..
adaptive Organizing rocksdb/table directory by format 2019-05-30 14:51:11 -07:00
block_based filter_bench - a prelim tool for SST filter benchmarking (#5825) 2019-10-07 20:10:53 -07:00
cuckoo Apply formatter to recent 200+ commits. (#5830) 2019-09-20 12:04:26 -07:00
plain Apply formatter to recent 200+ commits. (#5830) 2019-09-20 12:04:26 -07:00
block_fetcher.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
block_fetcher.h Combine the read-ahead logic for user reads and compaction reads (#5431) 2019-06-19 14:10:46 -07:00
cleanable_test.cc Move test related files under util/ to test_util/ (#5377) 2019-05-30 11:25:51 -07:00
format.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
format.h Charge block cache for cache internal usage (#5797) 2019-09-16 15:26:21 -07:00
full_filter_bits_builder.h Refactor/consolidate legacy Bloom implementation details (#5784) 2019-09-16 16:17:09 -07:00
get_context.cc New API to get all merge operands for a Key (#5604) 2019-08-06 14:26:44 -07:00
get_context.h Fix local includes 2019-08-22 16:21:47 -07:00
internal_iterator.h Revert "Merging iterator to avoid child iterator reseek for some cases (#5286)" (#5871) 2019-10-01 11:22:41 -07:00
iter_heap.h Make InternalKeyComparator final and directly use it in merging iterator 2017-09-11 12:04:21 -07:00
iterator_wrapper.h Revert "Merging iterator to avoid child iterator reseek for some cases (#5286)" (#5871) 2019-10-01 11:22:41 -07:00
iterator.cc Add an option to put first key of each sst block in the index (#5289) 2019-06-24 20:54:04 -07:00
merger_test.cc Move test related files under util/ to test_util/ (#5377) 2019-05-30 11:25:51 -07:00
merging_iterator.cc Fix a timer bug in MergingIterator::Seek() caused by #5871 (#5874) 2019-10-01 19:26:18 -07:00
merging_iterator.h Index value delta encoding (#3983) 2018-08-09 16:58:40 -07:00
meta_blocks.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
meta_blocks.h Fix comment of function NotifyCollectTableCollectorsOnFinish (#5738) 2019-08-29 10:57:01 -07:00
mock_table.cc Apply formatter to recent 200+ commits. (#5830) 2019-09-20 12:04:26 -07:00
mock_table.h Apply formatter to recent 200+ commits. (#5830) 2019-09-20 12:04:26 -07:00
multiget_context.h MultiGet batching in memtable (#5818) 2019-10-10 09:39:39 -07:00
persistent_cache_helper.cc Organizing rocksdb/table directory by format 2019-05-30 14:51:11 -07:00
persistent_cache_helper.h Change RocksDB License 2017-07-15 16:11:23 -07:00
persistent_cache_options.h Change RocksDB License 2017-07-15 16:11:23 -07:00
scoped_arena_iterator.h Change RocksDB License 2017-07-15 16:11:23 -07:00
sst_file_reader_test.cc simplify include directive involving inttypes (#5402) 2019-06-06 13:56:07 -07:00
sst_file_reader.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
sst_file_writer_collectors.h Fix SstFileReader not able to open ingested file (#5097) 2019-03-26 10:25:18 -07:00
sst_file_writer.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
table_builder.h Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
table_properties_internal.h Index value delta encoding (#3983) 2018-08-09 16:58:40 -07:00
table_properties.cc Organizing rocksdb/table directory by format 2019-05-30 14:51:11 -07:00
table_reader_bench.cc Divide file_reader_writer.h and .cc (#5803) 2019-09-16 10:33:51 -07:00
table_reader_caller.h Add more callers for table reader. (#5454) 2019-06-20 14:31:48 -07:00
table_reader.h Apply formatter to recent 200+ commits. (#5830) 2019-09-20 12:04:26 -07:00
table_test.cc Charge block cache for cache internal usage (#5797) 2019-09-16 15:26:21 -07:00
two_level_iterator.cc Add an option to put first key of each sst block in the index (#5289) 2019-06-24 20:54:04 -07:00
two_level_iterator.h Add an option to put first key of each sst block in the index (#5289) 2019-06-24 20:54:04 -07:00