rts: Add a long form flag to enable the non-moving GC
authorBen Gamari <ben@smart-cactus.org>
Tue, 29 Oct 2019 22:51:12 +0000 (18:51 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 11 Dec 2019 00:53:54 +0000 (19:53 -0500)
The old flag, `-xn`, was quite cryptic. Here we add `--nonmoving-gc` in
addition.

docs/users_guide/runtime_control.rst
rts/RtsFlags.c

index f6dd9a6..2fb1917 100644 (file)
@@ -356,7 +356,7 @@ collection. Hopefully, you won't need any of these in normal operation,
 but there are several things that can be tweaked for maximum
 performance.
 
-.. rts-flag:: -xn
+.. rts-flag:: --nonmoving-gc
 
     :default: off
     :since: 8.10.1
@@ -367,12 +367,20 @@ performance.
     Enable the concurrent mark-and-sweep garbage collector for old generation
     collectors. Typically GHC uses a stop-the-world copying garbage collector
     for all generations. This can cause long pauses in execution during major
-    garbage collections. :rts-flag:`-xn` enables the use of a concurrent
-    mark-and-sweep garbage collector for oldest generation collections.
-    Under this collection strategy oldest-generation garbage collection
-    can proceed concurrently with mutation.
+    garbage collections. :rts-flag:`--nonmoving-gc` enables the use of a
+    concurrent mark-and-sweep garbage collector for oldest generation
+    collections. Under this collection strategy oldest-generation garbage
+    collection can proceed concurrently with mutation.
+
+    Note that :rts-flag:`--nonmoving-gc` cannot be used with ``-G1`` nor
+    :rts-flag:`-c`.
+
+.. rts-flag:: -xn
+
+    :default: off
+    :since: 8.10.1
 
-    Note that :rts-flag:`-xn` cannot be used with ``-G1`` nor :rts-flag:`-c`.
+    An alias for :rts-flag:`--nonmoving-gc`
 
 .. rts-flag:: -A ⟨size⟩
 
index 7949d40..54680b4 100644 (file)
@@ -931,6 +931,11 @@ error = true;
                       printRtsInfo(rtsConfig);
                       stg_exit(0);
                   }
+                  else if (strequal("nonmoving-gc",
+                               &rts_argv[arg][2])) {
+                      OPTION_SAFE;
+                      RtsFlags.GcFlags.useNonmoving = true;
+                  }
 #if defined(THREADED_RTS)
                   else if (!strncmp("numa", &rts_argv[arg][2], 4)) {
                       if (!osBuiltWithNumaSupport()) {