• P
    Some small improvements to HyperClockCache (#11601) · b1b6f87f
    Peter Dillinger 提交于
    Summary:
    Stacked on https://github.com/facebook/rocksdb/issues/11572
    * Minimize use of std::function and lambdas to minimize chances of
    compiler heap-allocating closures (unnecessary stress on allocator). It
    appears that converting FindSlot to a template enables inlining the
    lambda parameters, avoiding heap allocations.
    * Clean up some logic with FindSlot (FIXMEs from https://github.com/facebook/rocksdb/issues/11572)
    * Fix handling of rare case of probing all slots, with new unit test.
    (Previously Insert would not roll back displacements in that case, which
    would kill performance if it were to happen.)
    * Add an -early_exit option to cache_bench for gathering memory stats
    before deallocation.
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/11601
    
    Test Plan:
    unit test added for probing all slots
    
    ## Seeing heap allocations
    Run `MALLOC_CONF="stats_print:true" ./cache_bench -cache_type=hyper_clock_cache`
    before https://github.com/facebook/rocksdb/issues/11572 vs. after this change. Before, we see this in the
    interesting bin statistics:
    
    ```
    size  nrequests
    ----  ---------
      32     578460
      64      24340
    8192     578460
    ```
    And after:
    ```
    size  nrequests
    ----  ---------
      32  (insignificant)
      64      24370
    8192     579130
    ```
    
    ## Performance test
    Build with `make USE_CLANG=1 PORTABLE=0 DEBUG_LEVEL=0 -j32 cache_bench`
    
    Run `./cache_bench -cache_type=hyper_clock_cache -ops_per_thread=5000000`
    in before and after configurations, simultaneously:
    
    ```
    Before: Complete in 33.244 s; Rough parallel ops/sec = 2406442
    After:  Complete in 32.773 s; Rough parallel ops/sec = 2441019
    ```
    
    Reviewed By: jowlyzhang
    
    Differential Revision: D47375092
    
    Pulled By: pdillinger
    
    fbshipit-source-id: 46f0f57257ddb374290a0a38c651764ea60ba410
    b1b6f87f
clock_cache.cc 59.2 KB