mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
logalloc manages regions of log-structured allocated memory, and region_groups containing such regions and other region_groups. region_groups were introduced for accounting purposes - first to limit the amount of memory in memtables, then to match new dirty memory allocation rate with memtable flushing rate so we never hit a situation where allocation rate exceeded flush rate, and we exceed our limit. The problem is that the abstraction is very weak - if we want to change anything in memtable flush control we'll need to change region_groups too - and also expensive to maintain. The solution is to break the abstraction and move region_groups to memtable dirty memory management code. Instead introduce a new, simpler abstraction, the region_listener, which communicates changes in region memory consumption to an external piece of code, which can then choose to do with it what it likes. The long term plan is to completely remove region_groups and fold them into dirty_memory_manager: - make each memtable a region_listener so it gets called back after size changes - make memtables inform their dirty_memory_manager about the size to dirty_memory_manager can decide to throttle writes and which memtable to pick to flush Closes #10839 * github.com:scylladb/scylla: logalloc: drop region_impl public accessors logalloc, dirty_memory_manager: move size-tracking binomial heap out of logalloc logalloc: relax lifetime rules around region_listener logalloc, dirty_memory_manager: move region_group and associated code logalloc: expose tracker_reclaimer_lock logalloc: reimplement tracker_reclaim_lock to avoid using hidden classes logalloc: reduce friendship between region and region_group logalloc: decouple region_group from region memtable: stop using logalloc::region::group() to test for flushed memtables