From: Eric Wong Date: 2018-05-18T09:08:00+00:00 Subject: [ruby-core:87167] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC > I'll have to work on increasing granularity of the marking and > sweeping (which may hurt throughput in apps without IO-wait at > all...). And I won't be around much the next few days.. Maybe the unlink_limit can be lowered if we are sweeping more frequently: https://80x24.org/spew/20180518085819.14892-9-e@80x24.org/raw We may also add more sweeping around more malloc() calls. I also wonder if you can help narrow down which feature causes the most damage to performance: RUBY_GC_SLEEPY_SWEEP || RUBY_GC_SLEEPY_MARK || RUBY_GC_SLEEPY_START Perhaps try defining RUBY_GC_SLEEPY_MARK and RUBY_GC_SLEEPY_START to 0 in gc.h and see if that helps (Originally, I only intended to try sleepy sweep) Anyways, rebased against current-ish trunk, since I had some fixes and minor improvements which also conflicted with this: The following changes since commit 74724107e96228c34f92a1f210342891bb29400e: thread.c (rb_wait_for_single_fd): do not leak EINTR on timeout (2018-05-18 08:01:07 +0000) are available in the Git repository at: git://80x24.org/ruby.git sleepy-gc-v7 for you to fetch changes up to f6745fe9acd3453a38eb646006a5e2703732f973: gc.c: lower sweep unlink limit and make tunable in gc.h (2018-05-18 08:51:45 +0000) ---------------------------------------------------------------- Eric Wong (8): thread.c (timeout_prepare): common function gc: rb_wait_for_single_fd performs GC if idle (Linux) thread.c (do_select): perform GC if idle thread.c: native_sleep callers may perform GC benchmark: add benchmarks for sleepy GC gc.c: allow disabling sleepy GC gc.c: enter sleepy GC start gc.c: lower sweep unlink limit and make tunable in gc.h benchmark/bm_vm3_gc_io_select.rb | 30 +++++ benchmark/bm_vm3_gc_io_wait.rb | 21 ++++ benchmark/bm_vm3_gc_join_timeout.rb | 11 ++ benchmark/bm_vm3_gc_remote_free_spmc.rb | 15 +++ benchmark/bm_vm3_gc_szqueue.rb | 14 +++ gc.c | 57 +++++++++- gc.h | 31 ++++++ thread.c | 191 +++++++++++++++++++++----------- thread_pthread.c | 6 + thread_sync.c | 21 +++- thread_win32.c | 6 + 11 files changed, 337 insertions(+), 66 deletions(-) create mode 100644 benchmark/bm_vm3_gc_io_select.rb create mode 100644 benchmark/bm_vm3_gc_io_wait.rb create mode 100644 benchmark/bm_vm3_gc_join_timeout.rb create mode 100644 benchmark/bm_vm3_gc_remote_free_spmc.rb create mode 100644 benchmark/bm_vm3_gc_szqueue.rb Unsubscribe: