lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GUILE2: softcode GC environment tuning (issue 563500045 by address@h


From: hanwenn
Subject: Re: GUILE2: softcode GC environment tuning (issue 563500045 by address@hidden)
Date: Thu, 13 Feb 2020 03:40:50 -0800

Reviewers: hahnjo,

Message:

commit 4078b52f67e6e5193e72648a8f1a44e8154636e7
Author: Han-Wen Nienhuys <address@hidden>
Date:   Sat Feb 8 21:04:28 2020 +0100

    GUILE2: softcode GC environment tuning
    
    Disable multithreaded GC and explain why
    
    https://sourceforge.net/p/testlilyissues/issues/5718
    http://codereview.appspot.com/561390043



Description:
GUILE2: softcode GC environment tuning

Disable multithreaded GC and explain why

Please review this at https://codereview.appspot.com/563500045/

Affected files (+15, -2 lines):
  M lily/main.cc


Index: lily/main.cc
diff --git a/lily/main.cc b/lily/main.cc
index 
925d0c304c33eeccba48ecc999bb3de0229bc9d7..90a983edad71934ed943c2b5970efb50b6b0545e
 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -725,7 +725,6 @@ setup_guile_gc_env ()
 }
 
 #if (GUILEV2)
-extern unsigned long GC_free_space_divisor;
 
 void
 setup_guile_v2_env ()
@@ -749,8 +748,22 @@ setup_guile_v2_env ()
   // it's roughly this value.
   sane_putenv ("GC_INITIAL_HEAP_SIZE", "40M", false);
 
+  /*
+    Empirically, multithreaded GC doesn't change wall time. It just
+    adds another thread that burns 30% of the time.
+
+    David K mentions: "I think that this may be due to both/either our
+    use of mark hooks and of finalisers for calling destructors.
+    Either may cause serialisation.  Another serialisation is because
+    Guile itself switches BGC to Java mode where finalised objects can
+    no longer be marked (or something like that: the exact semantics I
+    do not remember).  And of course the C++ free store still has to
+    do its full job.
+  */
+  sane_putenv ("GC_NPROCS", "1", false);
+
   // Use less CPU for GC, at the expense of memory.
-  GC_free_space_divisor = 1;
+  sane_putenv ("GC_FREE_SPACE_DIVISOR", "1", false);
 }
 #endif
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]