> 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>