rocksdb/cache
Peter Dillinger cc8c8f6958 Refactor (Hyper)ClockCache code (#10887)
Summary:
For clean-up and in preparation for some other anticipated changes, including
* A new dynamically-scaling variant of HyperClockCache
* SecondaryCache support for HyperClockCache

This change does some refactoring for current and future code sharing and reusability. (Including follow-up on https://github.com/facebook/rocksdb/issues/10843)

## clock_cache.h
* TBD whether new variant will be a HyperClockCache or use some other name, so namespace is just clock_cache for the family of structures.
* A number of helper functions introduced and used.
* Pre-emptively split ClockHandle (shared among lock-free clock cache variants) and HandleImpl (specific to a kind of Table), and introduce template to plug new Table implementation into ClockCacheShard.

## clock_cache.cc
* Mostly using helper functions. Some things like `Rollback()` and `FreeDataMarkEmpty()` were not combined because `Rollback()` is Table-specific while `FreeDataMarkEmpty()` can be used with different table implementations.
* Performance testing indicated that despite more opportunities for parallelism, making a local copy of handle data for processing after marking an entry empty was slower than doing that processing before marking the entry empty (but after marking it "under construction"), thus avoiding a few words of copying data. At least for now, this answers the "TODO? Delay freeing?" questions (no).

Pull Request resolved: https://github.com/facebook/rocksdb/pull/10887

Test Plan:
fixed a unit testing gap; other minor test updates for refactoring

No functionality change

## Performance
Same setup as https://github.com/facebook/rocksdb/issues/10801:

Before: `readrandom [AVG 81 runs] : 627992 (± 5124) ops/sec`
After: `readrandom [AVG 81 runs] : 637512 (± 4866) ops/sec`

I've been getting some inconsistent results on restarts like the system is not being fair to the two processes, so I'm not sure there's such a real difference.

Reviewed By: anand1976

Differential Revision: D40959240

Pulled By: pdillinger

fbshipit-source-id: 0a8f3646b3bdb5bc7aaad60b26790b0779189949
2022-11-02 22:41:39 -07:00
..
cache.cc Add enable_split_merge option for CompressedSecondaryCache (#10690) 2022-09-16 15:41:49 -07:00
cache_bench.cc Add (& fix) some simple source code checks (#8821) 2021-09-07 21:19:27 -07:00
cache_bench_tool.cc Call experimental new clock cache HyperClockCache (#10684) 2022-09-16 12:47:29 -07:00
cache_entry_roles.cc Add a dedicated cache entry role for blobs (#10601) 2022-08-29 16:11:59 -07:00
cache_entry_roles.h Expose CacheEntryRole and map keys for block cache stat collections (#9838) 2022-04-14 09:38:55 -07:00
cache_entry_stats.h New stable, fixed-length cache keys (#9126) 2021-12-16 17:15:13 -08:00
cache_helpers.h Eliminate the copying of blobs when serving reads from the cache (#10297) 2022-07-06 18:57:29 -07:00
cache_key.cc Derive cache keys from SST unique IDs (#10394) 2022-08-12 13:49:49 -07:00
cache_key.h Derive cache keys from SST unique IDs (#10394) 2022-08-12 13:49:49 -07:00
cache_reservation_manager.cc Charge blob cache usage against the global memory limit (#10321) 2022-07-18 23:26:57 -07:00
cache_reservation_manager.h Account memory of FileMetaData in global memory limit (#9924) 2022-06-14 13:06:40 -07:00
cache_reservation_manager_test.cc Print stack traces on frozen tests in CI (#10828) 2022-10-18 00:35:35 -07:00
cache_test.cc clang-format cache/ and util/ directories (#10867) 2022-10-26 12:08:20 -07:00
charged_cache.cc Charge blob cache usage against the global memory limit (#10321) 2022-07-18 23:26:57 -07:00
charged_cache.h Charge blob cache usage against the global memory limit (#10321) 2022-07-18 23:26:57 -07:00
clock_cache.cc Refactor (Hyper)ClockCache code (#10887) 2022-11-02 22:41:39 -07:00
clock_cache.h Refactor (Hyper)ClockCache code (#10887) 2022-11-02 22:41:39 -07:00
compressed_secondary_cache.cc add SetCapacity and GetCapacity for secondary cache (#10712) 2022-09-29 19:15:04 -07:00
compressed_secondary_cache.h add SetCapacity and GetCapacity for secondary cache (#10712) 2022-09-29 19:15:04 -07:00
compressed_secondary_cache_test.cc Print stack traces on frozen tests in CI (#10828) 2022-10-18 00:35:35 -07:00
fast_lru_cache.cc Refactor ShardedCache for more sharing, static polymorphism (#10801) 2022-10-18 22:06:57 -07:00
fast_lru_cache.h clang-format cache/ and util/ directories (#10867) 2022-10-26 12:08:20 -07:00
lru_cache.cc Use malloc/free for LRUHandle instead of new[]/delete[] (#10884) 2022-10-27 15:39:29 -07:00
lru_cache.h Use malloc/free for LRUHandle instead of new[]/delete[] (#10884) 2022-10-27 15:39:29 -07:00
lru_cache_test.cc Refactor (Hyper)ClockCache code (#10887) 2022-11-02 22:41:39 -07:00
sharded_cache.cc Refactor ShardedCache for more sharing, static polymorphism (#10801) 2022-10-18 22:06:57 -07:00
sharded_cache.h Refactor ShardedCache for more sharing, static polymorphism (#10801) 2022-10-18 22:06:57 -07:00