• A
    Parallelize secondary cache lookup in MultiGet (#8405) · 8ea0a2c1
    anand76 提交于
    Summary:
    Implement the ```WaitAll()``` interface in ```LRUCache``` to allow callers to issue multiple lookups in parallel and wait for all of them to complete. Modify ```MultiGet``` to use this to parallelize the secondary cache lookups in order to reduce the overall latency. A call to ```cache->Lookup()``` returns a handle that has an incomplete value (nullptr), and the caller can call ```cache->IsReady()``` to check whether the lookup is complete, and pass a vector of handles to ```WaitAll``` to wait for completion. If any of the lookups fail, ```MultiGet``` will read the block from the SST file.
    
    Another change in this PR is to rename ```SecondaryCacheHandle``` to ```SecondaryCacheResultHandle``` as it more accurately describes the return result of the secondary cache lookup, which is more like a future.
    
    Tests:
    1. Add unit tests in lru_cache_test
    2. Benchmark results with no secondary cache configured
    Master -
    ```
    readrandom   :      41.175 micros/op 388562 ops/sec;  106.7 MB/s (7277999 of 7277999 found)
    readrandom   :      41.217 micros/op 388160 ops/sec;  106.6 MB/s (7274999 of 7274999 found)
    multireadrandom :      10.309 micros/op 1552082 ops/sec; (28908992 of 28908992 found)
    multireadrandom :      10.321 micros/op 1550218 ops/sec; (29081984 of 29081984 found)
    ```
    
    This PR -
    ```
    readrandom   :      41.158 micros/op 388723 ops/sec;  106.8 MB/s (7290999 of 7290999 found)
    readrandom   :      41.185 micros/op 388463 ops/sec;  106.7 MB/s (7287999 of 7287999 found)
    multireadrandom :      10.277 micros/op 1556801 ops/sec; (29346944 of 29346944 found)
    multireadrandom :      10.253 micros/op 1560539 ops/sec; (29274944 of 29274944 found)
    ```
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/8405
    
    Reviewed By: zhichao-cao
    
    Differential Revision: D29190509
    
    Pulled By: anand1976
    
    fbshipit-source-id: 6f8eff6246712af8a297cfe22ea0d1c3b2a01bb0
    8ea0a2c1
block_based_table_reader.h 31.6 KB