[前][次][番号順一覧][スレッド一覧]

ruby-changes:60987

From: Takashi <ko1@a...>
Date: Sun, 3 May 2020 13:44:07 +0900 (JST)
Subject: [ruby-changes:60987] cc6afff006 (master): Avoid infinite times of JIT compaction

https://git.ruby-lang.org/ruby.git/commit/?id=cc6afff006

From cc6afff006760768feed4d2646a9af1dede4fca6 Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@g...>
Date: Sat, 2 May 2020 21:30:24 -0700
Subject: Avoid infinite times of JIT compaction

It's to avoid memory leak for actual usage (because they don't get
unloaded properly), but also for fixing CI timed out due to JIT
compaction taking too long time on --jit-wait (which runs every time)
http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2911601

diff --git a/mjit_worker.c b/mjit_worker.c
index 037aa29..f479844 100644
--- a/mjit_worker.c
+++ b/mjit_worker.c
@@ -1303,6 +1303,11 @@ mjit_copy_cache_from_main_thread(const rb_iseq_t *iseq, union iseq_inline_storag https://github.com/ruby/ruby/blob/trunk/mjit_worker.c#L1303
 void
 mjit_worker(void)
 {
+    // Allow only `max_cache_size / 10` times (default: 10) of compaction.
+    // Note: GC of compacted code has not been implemented yet.
+    int max_compact_size = mjit_opts.max_cache_size / 10;
+    if (max_compact_size < 10) max_compact_size = 10;
+
 #ifndef _MSC_VER
     if (pch_status == PCH_NOT_READY) {
         make_pch();
@@ -1354,9 +1359,10 @@ mjit_worker(void) https://github.com/ruby/ruby/blob/trunk/mjit_worker.c#L1359
             CRITICAL_SECTION_FINISH(3, "in jit func replace");
 
 #ifndef _MSC_VER
-            // Combine .o files to one .so and reload all jit_func to improve memory locality
-            if ((!mjit_opts.wait && unit_queue.length == 0 && active_units.length > 1)
-                || active_units.length == mjit_opts.max_cache_size) {
+            // Combine .o files to one .so and reload all jit_func to improve memory locality.
+            if (compact_units.length < max_compact_size
+                && ((!mjit_opts.wait && unit_queue.length == 0 && active_units.length > 1)
+                    || active_units.length == mjit_opts.max_cache_size)) {
                 compact_all_jit_code();
             }
 #endif
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]