[ruby-core:117432] [Ruby master Feature#20408] Add heap_live_slots to GC.stat_heap

Issue #20408 has been reported by mk (Matthias Käppler). ---------------------------------------- Feature #20408: Add heap_live_slots to GC.stat_heap https://bugs.ruby-lang.org/issues/20408 * Author: mk (Matthias Käppler) * Status: Open ---------------------------------------- `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]`. -- https://bugs.ruby-lang.org/

Issue #20408 has been updated by peterzhu2118 (Peter Zhu). Thank you for this ticket. I opened a PR that implements this feature: https://github.com/ruby/ruby/pull/10439 ---------------------------------------- Feature #20408: Add heap_live_slots to GC.stat_heap https://bugs.ruby-lang.org/issues/20408#change-107810 * Author: mk (Matthias Käppler) * Status: Open ---------------------------------------- `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 should equal `GC.stat[:heap_live_slots]`. -- https://bugs.ruby-lang.org/

Issue #20408 has been updated by mk (Matthias Käppler). peterzhu2118 (Peter Zhu) wrote in #note-2:
Thank you for this ticket. I opened a PR that implements this feature: https://github.com/ruby/ruby/pull/10439
Thank you so much Peter! <3 ---------------------------------------- Feature #20408: Add heap_live_slots to GC.stat_heap https://bugs.ruby-lang.org/issues/20408#change-107819 * Author: mk (Matthias Käppler) * Status: Open ---------------------------------------- `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 should equal `GC.stat[:heap_live_slots]`. -- https://bugs.ruby-lang.org/
participants (2)
-
mk
-
peterzhu2118 (Peter Zhu)