From: Eric Wong Date: 2018-05-14T20:34:15+00:00 Subject: [ruby-core:87029] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC I wrote: > For tracking GC statistics, we should probably keep them in > rb_execution_context_t instead of current globals using atomics. > To recover the most memory from GC, we want to do gc_mark_roots That's maybe too complex for now, this patch (on top of existing sleepy GC): https://80x24.org/spew/20180514201509.28069-1-e@80x24.org/raw While the effect on big Rails apps seems minimal, I think the significant improvements for small scripts is still helpful and we can build on top of them. I am already satisfied with the improvement from a Net::HTTP example from the first patch: https://80x24.org/spew/20180501080844.22751-3-e@80x24.org/raw Since all new behavior changes can be easily disabled via gc.h, I propose we commit the current changes to trunk for now to gain more testing and feedback. Current series is up to 8 patches, but I will squash "thread_sync.c (mutex_lock): add missing else" into "thread.c: native_sleep callers may perform GC". The following changes since commit 6f0de6ed98e669e915455569fb4dae9022cb47b8: error.c: check redefined backtrace result (2018-05-14 08:33:14 +0000) are available in the Git repository at: git://80x24.org/ruby.git sleepy-gc-v6 for you to fetch changes up to 6944014696bea793603d47db6dba0a1e83f1e430: gc.c: enter sleepy GC start (2018-05-14 20:25:29 +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 thread_sync.c (mutex_lock): add missing else benchmark: add benchmarks for sleepy GC gc.c: allow disabling sleepy GC gc.c: enter sleepy GC start 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 | 55 +++++++++ gc.h | 28 +++++ thread.c | 197 +++++++++++++++++++++----------- thread_pthread.c | 6 + thread_sync.c | 21 +++- thread_win32.c | 6 + 11 files changed, 337 insertions(+), 67 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: