Add +RTS -O<size> to control the minimum old gen size
authorSimon Marlow <marlowsd@gmail.com>
Tue, 24 Mar 2015 14:20:58 +0000 (14:20 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 7 Apr 2015 08:57:50 +0000 (09:57 +0100)
docs/users_guide/runtime_control.xml
rts/RtsFlags.c

index a55a1fe..b7551eb 100644 (file)
@@ -385,6 +385,21 @@ $ ./prog -f +RTS -H32m -S -RTS -h foo bar
       </varlistentry>
 
       <varlistentry>
+       <term>
+          <option>-O</option><replaceable>size</replaceable>
+          <indexterm><primary><option>-O</option></primary><secondary>RTS option</secondary></indexterm>
+          <indexterm><primary>old generation, size</primary></indexterm>
+        </term>
+       <listitem>
+          <para>&lsqb;Default: 1m&rsqb; Set the minimum size of the
+          old generation.  The old generation is collected whenever it
+          grows to this size or the value of the <option>-F</option> option
+          multiplied by the size of the live data at the previous major
+          collection, whichever is larger.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term>
           <option>-n</option><replaceable>size</replaceable>
           <indexterm><primary><option>-n</option></primary><secondary>RTS option</secondary></indexterm>
index ef01ccb..5c7fcef 100644 (file)
@@ -267,6 +267,7 @@ usage_text[] = {
 "  -kb<size> Sets the stack chunk buffer size (default 1k)",
 "",
 "  -A<size> Sets the minimum allocation area size (default 512k) Egs: -A1m -A10k",
+"  -O<size> Sets the minimum size of the old generation (default 1M)",
 "  -M<size> Sets the maximum heap size (default unlimited)  Egs: -M256k -M1G",
 "  -H<size> Sets the minimum heap size (default 0M)   Egs: -H24m  -H1G",
 "  -m<n>    Minimum % of heap which must be available (default 3%)",
@@ -971,6 +972,14 @@ error = rtsTrue;
                   }
                   break;
 
+              case 'O':
+                  OPTION_UNSAFE;
+                  RtsFlags.GcFlags.minOldGenSize =
+                      (nat)(decodeSize(rts_argv[arg], 2, BLOCK_SIZE,
+                                       HS_WORD_MAX)
+                            / BLOCK_SIZE);
+                  break;
+
               case 'I': /* idle GC delay */
                 OPTION_UNSAFE;
                 if (rts_argv[arg][2] == '\0') {