[#106939] [Ruby master Bug#18455] `IO#close` has poor performance and difficult to understand semantics. — "ioquatix (Samuel Williams)" <noreply@...>

SXNzdWUgIzE4NDU1IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGlvcXVhdGl4IChTYW11ZWwgV2lsbGlh

10 messages 2022/01/01

[#106977] [Ruby master Feature#18461] closures are capturing unused variables — "bughit (bug hit)" <noreply@...>

SXNzdWUgIzE4NDYxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ1Z2hpdCAoYnVnIGhpdCkuCgotLS0t

12 messages 2022/01/05

[#106994] [Ruby master Feature#18462] Proposal to merge WASI based WebAssembly support — "katei (Yuta Saito)" <noreply@...>

SXNzdWUgIzE4NDYyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGthdGVpIChZdXRhIFNhaXRvKS4KCi0t

8 messages 2022/01/07

[#106996] [Ruby master Feature#18463] Random number generation with xoshiro — "bbrklm (Benson Muite)" <noreply@...>

SXNzdWUgIzE4NDYzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJicmtsbSAoQmVuc29uIE11aXRlKS4K

8 messages 2022/01/07

[#107005] [Ruby master Bug#18464] RUBY_INTERNAL_EVENT_NEWOBJ tracepoint causes an interpreter crash when combined with Ractors — "kjtsanaktsidis (KJ Tsanaktsidis)" <noreply@...>

SXNzdWUgIzE4NDY0IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu

14 messages 2022/01/08

[#107008] [Ruby master Bug#18465] Make `IO#write` atomic. — "ioquatix (Samuel Williams)" <noreply@...>

SXNzdWUgIzE4NDY1IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGlvcXVhdGl4IChTYW11ZWwgV2lsbGlh

16 messages 2022/01/09

[#107073] [Ruby master Feature#18481] Porting YJIT to Rust (request for feedback) — "maximecb (Maxime Chevalier-Boisvert)" <noreply@...>

SXNzdWUgIzE4NDgxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG1heGltZWNiIChNYXhpbWUgQ2hldmFs

26 messages 2022/01/12

[#107106] [Ruby master Bug#18487] Kernel#binding behaves differently depending on implementation language of items on the stack — "alanwu (Alan Wu)" <noreply@...>

SXNzdWUgIzE4NDg3IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGFsYW53dSAoQWxhbiBXdSkuCgotLS0t

11 messages 2022/01/13

[#107190] [Ruby master Feature#18498] Introduce a public WeakKeysMap that compares by equality — "byroot (Jean Boussier)" <noreply@...>

SXNzdWUgIzE4NDk4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku

17 messages 2022/01/19

[#107203] [Ruby master Bug#18501] [BUG] try to mark T_NONE object in RubyVM::InstructionSequence. load_from_binary — "byroot (Jean Boussier)" <noreply@...>

SXNzdWUgIzE4NTAxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku

8 messages 2022/01/20

[#107204] [Ruby master Bug#18502] Make ruby-2.7.5 on Solaris 10 ld.so.1: gcc: fatal: libintl.so.8: open failed: No such file or directory — "dklein (Dmitri Klein)" <noreply@...>

SXNzdWUgIzE4NTAyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGRrbGVpbiAoRG1pdHJpIEtsZWluKS4K

8 messages 2022/01/20

[#107275] [Ruby master Bug#18512] MacOS 12.1 Monterey Bug — "oucl5976@... (Paul Liu)" <noreply@...>

SXNzdWUgIzE4NTEyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG91Y2w1OTc2QGdtYWlsLmNvbSAoUGF1

9 messages 2022/01/25

[#107280] [Ruby master Bug#18514] ruby 2.6.9's Date#jisx0301 does not support Reiwa — "kouji (Kouji Takao)" <noreply@...>

SXNzdWUgIzE4NTE0IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtvdWppIChLb3VqaSBUYWthbykuCgot

7 messages 2022/01/26

[#107291] [Ruby master Bug#18518] NoMemoryError + [FATAL] failed to allocate memory for twice 1 << large — "Eregon (Benoit Daloze)" <noreply@...>

SXNzdWUgIzE4NTE4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IEVyZWdvbiAoQmVub2l0IERhbG96ZSku

12 messages 2022/01/26

[#107310] [Ruby master Bug#18555] Running "bundle exec middleman server" on M1 Mac gives [BUG] Bus Error at 0x0000000104b04000 — "anthonyaykut (Anthony Aykut)" <noreply@...>

SXNzdWUgIzE4NTU1IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGFudGhvbnlheWt1dCAoQW50aG9ueSBB

13 messages 2022/01/28

[#107346] [Ruby master Misc#18557] DevMeeting-2022-02-17 — "mame (Yusuke Endoh)" <noreply@...>

SXNzdWUgIzE4NTU3IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG1hbWUgKFl1c3VrZSBFbmRvaCkuCgot

18 messages 2022/01/29

[#107392] [Ruby master Bug#18560] "Compaction isn't available on this platform" error running PG test suite on ppc64le — "vo.x (Vit Ondruch)" <noreply@...>

SXNzdWUgIzE4NTYwIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHZvLnggKFZpdCBPbmRydWNoKS4KCi0t

7 messages 2022/01/31

[ruby-core:107170] Re: [Ruby master Feature#18494] [RFC] ENV["RUBY_GC_..."]= changes GC parameters dynamically

From: Eric Wong <normalperson@...>
Date: 2022-01-17 23:14:38 UTC
List: ruby-core #107170
> https://bugs.ruby-lang.org/issues/18494

Thanks both for the comments.

"ko1 (Koichi Sasada)" wrote:
> Some `RUBY_GC_...` vars do not affect correctly because they are used only on setup.
> We need to document which vars can be modified dynamically.

Updated patch series attached, patch 3/3 adds partial guard to
RUBY_GC_INIT_HEAP_SLOTS to prevent gc_set_initial_pages().

Patch 1/3 also fixes an existing bug in how RUBY_GC_MALLOC_LIMIT
that is independent of this new feature.

All the other parameters seem fine, however I'm not sure about
interactions w.r.t. Ractors and double-precision floats.

"byroot (Jean Boussier)" wrote:
> Should we allow to change them at runtime through some `::GC`
> API? I could see  some automatic/dynamic GC tuning gems being
> implemented using these APIs. e.g.  monitor how often and how
> long the GC runs, and tweak some values in response.

I'm rather strongly against this.  I envision use would be:

1. load a bunch of code, read configs, etc...
2. set GC params
3. run main loop until exit

The main loop in reasonably-written applications should be
highly predictable in terms of memory use and have minimal
outliers and spikes.  IOW, a web server should be serving
reasonably-sized HTML pages/chunks that clients can render w/o
falling over; and reading/sending large files in chunks rather
than slurping hundreds of MB into RAM.

For a rare memory spikes inside the main loop, I'd much rather
trigger GC ASAP than be saddled with a larger heap for the
remainder of process lifetime (because larger heaps increase
potential for fragmentation).

I see the presence of tuning knobs to be an admission of the
shortcomings of the GC and something that could/should
eventually be eliminated via GC improvements.  (Fwiw, I've
mostly given up on Ruby and it's GC; but I made this patch since
it's too time-consuming to rewrite some Ruby in a scripting
language with auto ref-counting and faster startup time).

Anyways, I've updated the commit message in my original patch
(now patch 2/3) to further explain my decision.  Here's the
relevant snippet:

  This has no extra API footprint, and will silently be a no-op for other
  Ruby implementations.  I tried to make this change as non-intrusive as
  possible to minimize the growth in executable and icache size.  It is
  not optimized for repeated changes and (IMHO) should not be.  IMHO,
  tuning knobs should be last resorts and used sparingly to minimize the
  learning curve and cognitive overhead required to run applications.

  Thus there is no "GC.foo=" API to reduce documentation and support
  overhead, since GC parameters are implementation-dependent and may
  change over time.  Developers can make ENV changes freely without
  worrying about forward, backwards, nor cross-engine incompatibilities.
  These parameters are already documented in the manpage and other
  sources, so there's less cognitive overhead required to learn them.

  Increasing the Ruby API footprint would also hurt startup time and
  increases memory usage.

Available as a self-hosted pull request (generated via "git request-pull"):

The following changes since commit eb98275c967d8938526966fe53e52f5a10249492:

  * 2022-01-18 [ci skip] (2022-01-18 05:39:51 +0900)

are available in the Git repository at:

  https://yhbt.net/ruby.git gc-param-dyn-v2

for you to fetch changes up to ffb336a8ddb0e21d8f3bb4ce1801e90ea78af42d:

  ruby_gc_set_params: do not set initial pages on dynamic update (2022-01-17 22:59:58 +0000)

----------------------------------------------------------------
Eric Wong (3):
      ruby_gc_set_params: update malloc_limit when env is set
      ENV["RUBY_GC_..."]= changes GC parameters dynamically
      ruby_gc_set_params: do not set initial pages on dynamic update

 gc.c                 | 11 +++++++----
 hash.c               |  5 +++++
 internal/gc.h        |  2 +-
 ruby.c               |  2 +-
 test/ruby/test_gc.rb |  4 ++++
 5 files changed, 18 insertions(+), 6 deletions(-)

Thanks for reading this far.
ClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3Vi
amVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFp
bG1hbi9vcHRpb25zL3J1YnktY29yZT4K

In This Thread