rocksdb/table
Radheshyam Balasundaram d20b8cfaa1 Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two.
Summary:
Use inlined hash functions instead of function pointer. Make number of buckets a power of two and use bitwise and instead of mod.
After these changes, we get almost 50% improvement in performance.

Results:
With 120000000 items, utilization is 89.41%, number of hash functions: 2.
Time taken per op is 0.231us (4.3 Mqps) with batch size of 0
Time taken per op is 0.229us (4.4 Mqps) with batch size of 0
Time taken per op is 0.185us (5.4 Mqps) with batch size of 0
With 120000000 items, utilization is 89.41%, number of hash functions: 2.
Time taken per op is 0.108us (9.3 Mqps) with batch size of 10
Time taken per op is 0.100us (10.0 Mqps) with batch size of 10
Time taken per op is 0.103us (9.7 Mqps) with batch size of 10
With 120000000 items, utilization is 89.41%, number of hash functions: 2.
Time taken per op is 0.101us (9.9 Mqps) with batch size of 25
Time taken per op is 0.098us (10.2 Mqps) with batch size of 25
Time taken per op is 0.097us (10.3 Mqps) with batch size of 25
With 120000000 items, utilization is 89.41%, number of hash functions: 2.
Time taken per op is 0.100us (10.0 Mqps) with batch size of 50
Time taken per op is 0.097us (10.3 Mqps) with batch size of 50
Time taken per op is 0.097us (10.3 Mqps) with batch size of 50
With 120000000 items, utilization is 89.41%, number of hash functions: 2.
Time taken per op is 0.102us (9.8 Mqps) with batch size of 100
Time taken per op is 0.098us (10.2 Mqps) with batch size of 100
Time taken per op is 0.115us (8.7 Mqps) with batch size of 100

With 100000000 items, utilization is 74.51%, number of hash functions: 2.
Time taken per op is 0.201us (5.0 Mqps) with batch size of 0
Time taken per op is 0.155us (6.5 Mqps) with batch size of 0
Time taken per op is 0.152us (6.6 Mqps) with batch size of 0
With 100000000 items, utilization is 74.51%, number of hash functions: 2.
Time taken per op is 0.089us (11.3 Mqps) with batch size of 10
Time taken per op is 0.084us (11.9 Mqps) with batch size of 10
Time taken per op is 0.086us (11.6 Mqps) with batch size of 10
With 100000000 items, utilization is 74.51%, number of hash functions: 2.
Time taken per op is 0.087us (11.5 Mqps) with batch size of 25
Time taken per op is 0.085us (11.7 Mqps) with batch size of 25
Time taken per op is 0.093us (10.8 Mqps) with batch size of 25
With 100000000 items, utilization is 74.51%, number of hash functions: 2.
Time taken per op is 0.094us (10.6 Mqps) with batch size of 50
Time taken per op is 0.094us (10.7 Mqps) with batch size of 50
Time taken per op is 0.093us (10.8 Mqps) with batch size of 50
With 100000000 items, utilization is 74.51%, number of hash functions: 2.
Time taken per op is 0.092us (10.9 Mqps) with batch size of 100
Time taken per op is 0.089us (11.2 Mqps) with batch size of 100
Time taken per op is 0.088us (11.3 Mqps) with batch size of 100

With 80000000 items, utilization is 59.60%, number of hash functions: 2.
Time taken per op is 0.154us (6.5 Mqps) with batch size of 0
Time taken per op is 0.168us (6.0 Mqps) with batch size of 0
Time taken per op is 0.190us (5.3 Mqps) with batch size of 0
With 80000000 items, utilization is 59.60%, number of hash functions: 2.
Time taken per op is 0.081us (12.4 Mqps) with batch size of 10
Time taken per op is 0.077us (13.0 Mqps) with batch size of 10
Time taken per op is 0.083us (12.1 Mqps) with batch size of 10
With 80000000 items, utilization is 59.60%, number of hash functions: 2.
Time taken per op is 0.077us (13.0 Mqps) with batch size of 25
Time taken per op is 0.073us (13.7 Mqps) with batch size of 25
Time taken per op is 0.073us (13.7 Mqps) with batch size of 25
With 80000000 items, utilization is 59.60%, number of hash functions: 2.
Time taken per op is 0.076us (13.1 Mqps) with batch size of 50
Time taken per op is 0.072us (13.8 Mqps) with batch size of 50
Time taken per op is 0.072us (13.8 Mqps) with batch size of 50
With 80000000 items, utilization is 59.60%, number of hash functions: 2.
Time taken per op is 0.077us (13.0 Mqps) with batch size of 100
Time taken per op is 0.074us (13.6 Mqps) with batch size of 100
Time taken per op is 0.073us (13.6 Mqps) with batch size of 100

With 70000000 items, utilization is 52.15%, number of hash functions: 2.
Time taken per op is 0.190us (5.3 Mqps) with batch size of 0
Time taken per op is 0.186us (5.4 Mqps) with batch size of 0
Time taken per op is 0.184us (5.4 Mqps) with batch size of 0
With 70000000 items, utilization is 52.15%, number of hash functions: 2.
Time taken per op is 0.079us (12.7 Mqps) with batch size of 10
Time taken per op is 0.070us (14.2 Mqps) with batch size of 10
Time taken per op is 0.072us (14.0 Mqps) with batch size of 10
With 70000000 items, utilization is 52.15%, number of hash functions: 2.
Time taken per op is 0.080us (12.5 Mqps) with batch size of 25
Time taken per op is 0.072us (14.0 Mqps) with batch size of 25
Time taken per op is 0.071us (14.1 Mqps) with batch size of 25
With 70000000 items, utilization is 52.15%, number of hash functions: 2.
Time taken per op is 0.082us (12.1 Mqps) with batch size of 50
Time taken per op is 0.071us (14.1 Mqps) with batch size of 50
Time taken per op is 0.073us (13.6 Mqps) with batch size of 50
With 70000000 items, utilization is 52.15%, number of hash functions: 2.
Time taken per op is 0.080us (12.5 Mqps) with batch size of 100
Time taken per op is 0.077us (13.0 Mqps) with batch size of 100
Time taken per op is 0.078us (12.8 Mqps) with batch size of 100

Test Plan:
make check all
make valgrind_check
make asan_check

Reviewers: sdong, ljin

Reviewed By: ljin

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D22539
2014-08-29 19:06:15 -07:00
..
adaptive_table_factory.cc print table options 2014-08-25 14:24:09 -07:00
adaptive_table_factory.h print table options 2014-08-25 14:24:09 -07:00
block_based_table_builder.cc remove_internal_filter_policy 2014-08-28 17:06:29 -07:00
block_based_table_builder.h Don't compress block bigger than 2GB 2014-06-09 12:26:09 -07:00
block_based_table_factory.cc remove_internal_filter_policy 2014-08-28 17:06:29 -07:00
block_based_table_factory.h print table options 2014-08-25 14:24:09 -07:00
block_based_table_reader.cc remove_internal_filter_policy 2014-08-28 17:06:29 -07:00
block_based_table_reader.h Add DB property "rocksdb.estimate-table-readers-mem" 2014-08-06 11:39:46 -07:00
block_builder.cc move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
block_builder.h delete unused struct Options 2014-08-29 17:31:04 +08:00
block_hash_index_test.cc Materialize the hash index 2014-05-15 14:09:03 -07:00
block_hash_index.cc Materialize the hash index 2014-05-15 14:09:03 -07:00
block_hash_index.h Materialize the hash index 2014-05-15 14:09:03 -07:00
block_prefix_index.cc Changes to support unity build: 2014-08-11 13:22:47 -04:00
block_prefix_index.h [RocksDB] Reduce memory footprint of the blockbased table hash index. 2014-06-18 18:16:07 -07:00
block_test.cc ReadOptions.total_order_seek to allow total order seek for block-based table when hash index is enabled 2014-08-25 16:14:30 -07:00
block.cc ReadOptions.total_order_seek to allow total order seek for block-based table when hash index is enabled 2014-08-25 16:14:30 -07:00
block.h ReadOptions.total_order_seek to allow total order seek for block-based table when hash index is enabled 2014-08-25 16:14:30 -07:00
bloom_block.cc Adding option to save PlainTable index and bloom filter in SST file. 2014-07-18 16:58:13 -07:00
bloom_block.h Adding option to save PlainTable index and bloom filter in SST file. 2014-07-18 16:58:13 -07:00
cuckoo_table_builder_test.cc Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_builder.cc Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_builder.h Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_factory.cc Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_factory.h Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_reader_test.cc Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_reader.cc Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
cuckoo_table_reader.h Improve Cuckoo Table Reader performance. Inlined hash function and number of buckets a power of two. 2014-08-29 19:06:15 -07:00
filter_block_test.cc move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
filter_block.cc remove_internal_filter_policy 2014-08-28 17:06:29 -07:00
filter_block.h move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
flush_block_policy.cc move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
format.cc logging_when_create_and_delete_manifest 2014-08-04 11:25:42 -07:00
format.h xxHash 2014-05-01 14:09:32 -04:00
iter_heap.h Turn on -Wmissing-prototypes 2014-04-09 21:17:14 -07:00
iterator_wrapper.h In DB::NewIterator(), try to allocate the whole iterator tree in an arena 2014-06-02 17:44:57 -07:00
iterator.cc In DB::NewIterator(), try to allocate the whole iterator tree in an arena 2014-06-02 17:44:57 -07:00
merger.cc Changes to support unity build: 2014-08-11 13:22:47 -04:00
merger.h In DB::NewIterator(), try to allocate the whole iterator tree in an arena 2014-06-02 17:44:57 -07:00
meta_blocks.cc Avoid retrying to read property block from a table when it does not exist. 2014-08-15 12:17:44 -07:00
meta_blocks.h Adding option to save PlainTable index and bloom filter in SST file. 2014-07-18 16:58:13 -07:00
plain_table_builder.cc Adding option to save PlainTable index and bloom filter in SST file. 2014-07-18 16:58:13 -07:00
plain_table_builder.h Adding option to save PlainTable index and bloom filter in SST file. 2014-07-18 16:58:13 -07:00
plain_table_factory.cc print table options 2014-08-25 14:24:09 -07:00
plain_table_factory.h print table options 2014-08-25 14:24:09 -07:00
plain_table_index.cc Fix db_bench 2014-07-21 10:31:33 -07:00
plain_table_index.h Fix db_bench 2014-07-21 10:31:33 -07:00
plain_table_key_coding.cc initialize decoded_internal_key_valid 2014-07-03 23:13:08 -07:00
plain_table_key_coding.h fix make shared_lib compilation error 2014-06-19 10:12:26 -07:00
plain_table_reader.cc ReadOptions.total_order_seek to allow total order seek for block-based table when hash index is enabled 2014-08-25 16:14:30 -07:00
plain_table_reader.h Add DB property "rocksdb.estimate-table-readers-mem" 2014-08-06 11:39:46 -07:00
table_builder.h First phase API clean up 2014-02-03 00:30:43 -08:00
table_properties.cc Fix SIGFAULT when running sst_dump on v2.6 db 2014-04-21 17:49:47 -07:00
table_reader_bench.cc Add CuckooHash table format to table_reader_bench 2014-08-19 14:58:15 -07:00
table_reader.h Add DB property "rocksdb.estimate-table-readers-mem" 2014-08-06 11:39:46 -07:00
table_test.cc ReadOptions.total_order_seek to allow total order seek for block-based table when hash index is enabled 2014-08-25 16:14:30 -07:00
two_level_iterator.cc ForwardIterator: reset incomplete iterators on Seek() 2014-08-29 16:21:29 -07:00
two_level_iterator.h In DB::NewIterator(), try to allocate the whole iterator tree in an arena 2014-06-02 17:44:57 -07:00