• M
    WriteUnPrepared: less virtual in iterator callback (#5049) · 14b3f683
    Maysam Yabandeh 提交于
    Summary:
    WriteUnPrepared adds a virtual function, MaxUnpreparedSequenceNumber, to ReadCallback, which returns 0 unless WriteUnPrepared is enabled and the transaction has uncommitted data written to the DB. Together with snapshot sequence number, this determines the last sequence that is visible to reads.
    The patch clarifies the guarantees of the GetIterator API in WriteUnPrepared transactions and make use of that to statically initialize the read callback and thus avoid the virtual call.
    Furthermore it increases the minimum value for min_uncommitted from 0 to 1 as seq 0 is used only for last level keys that are committed in all snapshots.
    
    The following benchmark shows +0.26% higher throughput in seekrandom benchmark.
    
    Benchmark:
    ./db_bench --benchmarks=fillrandom --use_existing_db=0 --num=1000000 --db=/dev/shm/dbbench
    
    ./db_bench --benchmarks=seekrandom[X10] --use_existing_db=1 --db=/dev/shm/dbbench --num=1000000 --duration=60 --seek_nexts=100
    seekrandom [AVG    10 runs] : 20355 ops/sec;  225.2 MB/sec
    seekrandom [MEDIAN 10 runs] : 20425 ops/sec;  225.9 MB/sec
    
    ./db_bench_lessvirtual3 --benchmarks=seekrandom[X10] --use_existing_db=1 --db=/dev/shm/dbbench --num=1000000 --duration=60 --seek_nexts=100
    seekrandom [AVG    10 runs] : 20409 ops/sec;  225.8 MB/sec
    seekrandom [MEDIAN 10 runs] : 20487 ops/sec;  226.6 MB/sec
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/5049
    
    Differential Revision: D14366459
    
    Pulled By: maysamyabandeh
    
    fbshipit-source-id: ebaff8908332a5ae9af7defeadabcb624be660ef
    14b3f683
db_iter.cc 54.0 KB