Project

General

Profile

Feature #20408

Updated by mk (Matthias Käppler) about 1 month ago

`GC.stat` exposes a `heap_live_slots` metric that returns the number of live objects occupying eden slots. 

 Because the slot size was fixed to `RVALUE_SIZE`, this allowed for some basic approximations of how many bytes were live/in-use (`heap_live_slots * RVALUE_SIZE`). 
 This could furthermore be "embellished" by adding malloc'ed memory for those objects that were larger than a 40B slot (we track this via a custom CRuby patch). 

 However, with the addition of Variable Width Allocations (https://bugs.ruby-lang.org/issues/18239), this does not work anymore because we don't know how `heap_live_slots` distributes over all pools that use different slot sizes. 

 This could be addressed by also adding `heap_live_slots` (and for symmetry: `heap_free_slots`) to `GC.stat_heap`. 
 The sum of all live slots per pool times its respective slot size should equal `GC.stat[:heap_live_slots]`.

Back