• A
    Lock free MultiGet (#4754) · b9d6ecca
    Anand Ananthabhotla 提交于
    Summary:
    Avoid locking the DB mutex in order to reference SuperVersions. Instead, we get the thread local cached SuperVersion for each column family in the list. It depends on finding a sequence number that overlaps with all the open memtables. We start with the latest published sequence number, and if any of the memtables is sealed before we can get all the SuperVersions, the process is repeated. After a few times, give up and lock the DB mutex.
    
    Tests:
    1. Unit tests
    2. make check
    3. db_bench -
    
    TEST_TMPDIR=/dev/shm ./db_bench -use_existing_db=true -benchmarks=readrandom -write_buffer_size=4194304 -target_file_size_base=4194304 -max_bytes_for_level_base=16777216 -num=5000000 -reads=1000000 -threads=32 -compression_type=none -cache_size=1048576000 -batch_size=1 -bloom_bits=1
    readrandom   :       0.167 micros/op 5983920 ops/sec;  426.2 MB/s (1000000 of 1000000 found)
    
    Multireadrandom with batch size 1:
    multireadrandom :       0.176 micros/op 5684033 ops/sec; (1000000 of 1000000 found)
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/4754
    
    Differential Revision: D13363550
    
    Pulled By: anand1976
    
    fbshipit-source-id: 6243e8de7dbd9c8bb490a8eca385da0c855b1dd4
    b9d6ecca
db_test_util.h 30.8 KB