Add libgc to mono
[mono.git] / libgc / doc / README.environment
diff --git a/libgc/doc/README.environment b/libgc/doc/README.environment
new file mode 100644 (file)
index 0000000..97a13dc
--- /dev/null
@@ -0,0 +1,150 @@
+The garbage collector looks at a number of environment variables which are
+then used to affect its operation.  These are examined only on Un*x-like
+platforms and win32.
+
+GC_INITIAL_HEAP_SIZE=<bytes> - Initial heap size in bytes.  May speed up
+                               process start-up.
+
+GC_MAXIMUM_HEAP_SIZE=<bytes> - Maximum collected heap size.
+
+GC_LOOP_ON_ABORT - Causes the collector abort routine to enter a tight loop.
+                  This may make it easier to debug, such a process, especially
+                  for multithreaded platforms that don't produce usable core
+                  files, or if a core file would be too large.  On some
+                  platforms, this also causes SIGSEGV to be caught and
+                  result in an infinite loop in a handler, allowing
+                  similar debugging techniques.
+
+GC_PRINT_STATS - Turn on as much logging as is easily feasible without
+                adding signifcant runtime overhead.  Doesn't work if
+                the collector is built with SMALL_CONFIG.  Overridden
+                by setting GC_quiet.  On by default if the collector
+                was built without -DSILENT.
+
+GC_DUMP_REGULARLY - Generate a GC debugging dump GC_dump() on startup
+                   and during every collection.  Very verbose.  Useful
+                   if you have a bug to report, but please include only the
+                   last complete dump.
+
+GC_BACKTRACES=<n> - Generate n random backtraces (for heap profiling) after
+                   each GC.  Collector must have been built with
+                   KEEP_BACK_PTRS.  This won't generate useful output unless
+                   most objects in the heap were allocated through debug
+                   allocators.  This is intended to be only a statistical
+                   sample;  individual traces may be erroneous due to
+                   concurrent heap mutation.
+
+GC_PRINT_ADDRESS_MAP - Linux only.  Dump /proc/self/maps, i.e. various address
+                      maps for the process, to stderr on every GC.  Useful for
+                      mapping root addresses to source for deciphering leak
+                      reports.
+
+GC_NPROCS=<n> - Linux w/threads only.  Explicitly sets the number of processors
+               that the GC should expect to use.  Note that setting this to 1
+               when multiple processors are available will preserve
+               correctness, but may lead to really horrible performance,
+               since the lock implementation will immediately yield without
+               first spinning.
+
+GC_MARKERS=<n> - Linux w/threads and parallel marker only.  Set the number
+               of marker threads.  This is normaly set to the number of
+               processors.  It is safer to adjust GC_MARKERS than GC_NPROCS,
+               since GC_MARKERS has no impact on the lock implementation.
+
+GC_NO_BLACKLIST_WARNING - Prevents the collector from issuing
+               warnings about allocations of very large blocks.
+               Deprecated.  Use GC_LARGE_ALLOC_WARN_INTERVAL instead.
+
+GC_LARGE_ALLOC_WARN_INTERVAL=<n> - Print every nth warning about very large
+               block allocations, starting with the nth one.  Small values
+               of n are generally benign, in that a bounded number of
+               such warnings generally indicate at most a bounded leak.
+               For best results it should be set at 1 during testing.
+               Default is 5.  Very large numbers effectively disable the
+               warning.
+
+GC_IGNORE_GCJ_INFO - Ignore the type descriptors implicitly supplied by
+                    GC_gcj_malloc and friends.  This is useful for debugging
+                    descriptor generation problems, and possibly for
+                    temporarily working around such problems.  It forces a
+                    fully conservative scan of all heap objects except
+                    those known to be pointerfree, and may thus have other
+                    adverse effects.
+
+GC_PRINT_BACK_HEIGHT - Print max length of chain through unreachable objects
+                    ending in a reachable one.  If this number remains
+                    bounded, then the program is "GC robust".  This ensures
+                    that a fixed number of misidentified pointers can only
+                    result in a bounded space leak.  This currently only
+                    works if debugging allocation is used throughout.
+                    It increases GC space and time requirements appreciably.
+                    This feature is still somewhat experimental, and requires
+                    that the collector have been built with MAKE_BACK_GRAPH
+                    defined.  For details, see Boehm, "Bounding Space Usage
+                    of Conservative Garbage Collectors", POPL 2001, or
+                    http://lib.hpl.hp.com/techpubs/2001/HPL-2001-251.html .
+
+GC_RETRY_SIGNALS, GC_NO_RETRY_SIGNALS - Try to compensate for lost
+                    thread suspend signals in linux_threads.c.  On by
+                    default for GC_OSF1_THREADS, off otherwise.  Note 
+                    that this does not work around a possible loss of
+                    thread restart signals.  This seems to be necessary for
+                    some versions of Tru64.  Since we've previously seen
+                    similar issues on some other operating systems, it
+                    was turned into a runtime flag to enable last-minute
+                    work-arounds.
+
+GC_IGNORE_FB[=<n>] -  (Win32 only.) Try to avoid treating a mapped
+               frame buffer as part of the root set.  Certain (higher end?)
+               graphics cards seems to result in the graphics memory mapped
+               into the user address space as writable memory.
+               Unfortunately, there seems to be no systematic way to
+               identify such memory.  Setting the environment variable to n
+               causes the collector to ignore mappings longer than n MB.
+               The default value of n is currently 15.  (This should cover
+               a 16 MB graphics card, since the mapping appears to be slightly
+               shorter than all of graphics memory.  It will fail if a dll
+               writes pointers to collectable objects into a data segment
+               whose length is >= 15MB.  Empirically that's rare, but
+               certainly possible.)  WARNING: Security sensitive applications
+               should probably disable this feature by setting
+               GC_disallow_ignore_fb, or by building with -DNO_GETENV,
+               since small values could force collection of reachable
+               objects, which is conceivably a (difficult to exploit)
+               security hole.  GC_IGNORE_FB values less than 3 MB
+               are never honored, eliminating this risk for most,
+               but not all, applications.  This feature is likely to disappear
+               if/when we find a less disgusting "solution".
+
+The following turn on runtime flags that are also program settable.  Checked
+only during initialization.  We expect that they will usually be set through
+other means, but this may help with debugging and testing:
+
+GC_ENABLE_INCREMENTAL - Turn on incremental collection at startup.  Note that,
+                    depending on platform and collector configuration, this
+                    may involve write protecting pieces of the heap to
+                    track modifications.  These pieces may include pointerfree
+                    objects or not.  Although this is intended to be
+                    transparent, it may cause unintended system call failures.
+                    Use with caution.
+
+GC_PAUSE_TIME_TARGET - Set the desired garbage collector pause time in msecs.
+                    This only has an effect if incremental collection is
+                    enabled.  If a collection requires appreciably more time
+                    than this, the client will be restarted, and the collector
+                    will need to do additional work to compensate.  The
+                    special value "999999" indicates that pause time is
+                    unlimited, and the incremental collector will behave
+                    completely like a simple generational collector.  If
+                    the collector is configured for parallel marking, and
+                    run on a multiprocessor, incremental collection should
+                    only be used with unlimited pause time.
+
+GC_FIND_LEAK - Turns on GC_find_leak and thus leak detection.  Forces a
+              collection at program termination to detect leaks that would
+              otherwise occur after the last GC.
+
+GC_ALL_INTERIOR_POINTERS - Turns on GC_all_interior_pointers and thus interior
+                          pointer recognition.
+
+GC_DONT_GC - Turns off garbage collection.  Use cautiously.