[ruby-core:114290] [Ruby master Feature#19785] Deprecate `RUBY_GC_HEAP_INIT_SLOTS `

Issue #19785 has been reported by peterzhu2118 (Peter Zhu). ---------------------------------------- Feature #19785: Deprecate `RUBY_GC_HEAP_INIT_SLOTS ` https://bugs.ruby-lang.org/issues/19785 * Author: peterzhu2118 (Peter Zhu) * Status: Open * Priority: Normal ---------------------------------------- GitHub PR: https://github.com/ruby/ruby/pull/8116 The `RUBY_GC_HEAP_INIT_SLOTS` environment variable is replaced by `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` (introduced in commit [3ab3455](https://github.com/ruby/ruby/commit/3ab34551450c7a3a3e1ae0b24bf6b78d26129dfa)), which allows for more fine-grained tuning of size pools. So it doesn't make sense to keep the environment variable `RUBY_GC_HEAP_INIT_SLOTS`. I'm proposing to deprecate `RUBY_GC_HEAP_INIT_SLOTS` and eventually remove it. -- https://bugs.ruby-lang.org/

Issue #19785 has been updated by ko1 (Koichi Sasada). Sorry I didn't know about `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` * How to know `%d` part? * How to tune the value? * it seems difficult to set it compare with setting 1 init value. Another idea is to introduce `RUBY_GC_HEAP_INIT_PAGES` for the global page pool. But I'm not sure there is global page pool yet. and not sure it will help for tuning. ---------------------------------------- Feature #19785: Deprecate `RUBY_GC_HEAP_INIT_SLOTS` https://bugs.ruby-lang.org/issues/19785#change-104218 * Author: peterzhu2118 (Peter Zhu) * Status: Open * Priority: Normal ---------------------------------------- GitHub PR: https://github.com/ruby/ruby/pull/8147 The `RUBY_GC_HEAP_INIT_SLOTS` environment variable is replaced by `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` (introduced in commit [3ab3455](https://github.com/ruby/ruby/commit/3ab34551450c7a3a3e1ae0b24bf6b78d26129dfa)), which allows for more fine-grained tuning of size pools. So it doesn't make sense to keep the environment variable `RUBY_GC_HEAP_INIT_SLOTS`. I'm proposing to deprecate `RUBY_GC_HEAP_INIT_SLOTS` and eventually remove it. -- https://bugs.ruby-lang.org/

Issue #19785 has been updated by peterzhu2118 (Peter Zhu).
How to know %d part?
The `%d` part is the sizes returned from `GC.stat_heap`. On 64-bit systems, it's 40, 80, 160, 320, 640. On 32-bit systems it's 20, 40, 80, 160, 320.
How to tune the value?
You use `RUBY_GC_HEAP_INIT_SIZE_40_SLOTS=4000000` to have 4M slots in the 40 byte size pool, for example.
it seems difficult to set it compare with setting 1 init value.
Yes, it is more difficult than setting one value, but users of this API should be aware of how the GC internals work if they want to use this.
Another idea is to introduce RUBY_GC_HEAP_INIT_PAGES for the global page pool.
The idea of `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` is to set initial sizes for Rails apps so the GC doesn't need to warm up. `RUBY_GC_HEAP_INIT_PAGES` will allocate pages to size pools based on the distribution of objects at boot, and I worry that it will be a different distribution than serving requests. ---------------------------------------- Feature #19785: Deprecate `RUBY_GC_HEAP_INIT_SLOTS` https://bugs.ruby-lang.org/issues/19785#change-104221 * Author: peterzhu2118 (Peter Zhu) * Status: Open * Priority: Normal ---------------------------------------- GitHub PR: https://github.com/ruby/ruby/pull/8147 The `RUBY_GC_HEAP_INIT_SLOTS` environment variable is replaced by `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` (introduced in commit [3ab3455](https://github.com/ruby/ruby/commit/3ab34551450c7a3a3e1ae0b24bf6b78d26129dfa)), which allows for more fine-grained tuning of size pools. So it doesn't make sense to keep the environment variable `RUBY_GC_HEAP_INIT_SLOTS`. I'm proposing to deprecate `RUBY_GC_HEAP_INIT_SLOTS` and eventually remove it. -- https://bugs.ruby-lang.org/

Issue #19785 has been updated by byroot (Jean Boussier).
RUBY_GC_HEAP_INIT_PAGES will allocate pages to size pools based on the distribution of objects at boot, and I worry that it will be a different distribution than serving requests.
Unless the GC become capable of reusing an empty page of one pool for another? Assuming you call `GC.compact` or `Process.warmup` at the end of boot, the difference becomes marginal, and a single value becomes indeed much simpler to configure and keep up to date. But perhaps I'm missing something? ---------------------------------------- Feature #19785: Deprecate `RUBY_GC_HEAP_INIT_SLOTS` https://bugs.ruby-lang.org/issues/19785#change-104228 * Author: peterzhu2118 (Peter Zhu) * Status: Open * Priority: Normal ---------------------------------------- GitHub PR: https://github.com/ruby/ruby/pull/8147 The `RUBY_GC_HEAP_INIT_SLOTS` environment variable is replaced by `RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS` (introduced in commit [3ab3455](https://github.com/ruby/ruby/commit/3ab34551450c7a3a3e1ae0b24bf6b78d26129dfa)), which allows for more fine-grained tuning of size pools. So it doesn't make sense to keep the environment variable `RUBY_GC_HEAP_INIT_SLOTS`. I'm proposing to deprecate `RUBY_GC_HEAP_INIT_SLOTS` and eventually remove it. -- https://bugs.ruby-lang.org/
participants (3)
-
byroot (Jean Boussier)
-
ko1 (Koichi Sasada)
-
peterzhu2118 (Peter Zhu)