Commit 16226f1e by Kaveh R. Ghazi Committed by Kaveh Ghazi

invoke.texi (ggc-min-expand, [...]): Document new default behavior.

	* doc/invoke.texi (ggc-min-expand, ggc-min-heapsize): Document
	new default behavior.
	* ggc-common.c: Include sys/resource.h.
	(ggc_rlimit_bound): New function.
	(ggc_min_expand_heuristic, ggc_min_heapsize_heuristic): Update
	defaults to account for rlimits.

From-SVN: r63323
parent 53be1a8d
2003-02-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* doc/invoke.texi (ggc-min-expand, ggc-min-heapsize): Document
new default behavior.
* ggc-common.c: Include sys/resource.h.
(ggc_rlimit_bound): New function.
(ggc_min_expand_heuristic, ggc_min_heapsize_heuristic): Update
defaults to account for rlimits.
2003-02-22 Richard Henderson <rth@redhat.com> 2003-02-22 Richard Henderson <rth@redhat.com>
* i386.c, i386.h (TUNEMASK): Rename from CPUMASK. * i386.c, i386.h (TUNEMASK): Rename from CPUMASK.
......
...@@ -4474,8 +4474,10 @@ Tuning this may improve compilation speed; it has no effect on code ...@@ -4474,8 +4474,10 @@ Tuning this may improve compilation speed; it has no effect on code
generation. generation.
The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
RAM >= 1GB. If GCC is not able to calculate RAM on a particular RAM >= 1GB. If @code{getrlimit} is available, the notion of "RAM" is
platform, the lower bound of 30% is used. Setting this parameter and the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If
GCC is not able to calculate RAM on a particular platform, the lower
bound of 30% is used. Setting this parameter and
@option{ggc-min-heapsize} to zero causes a full collection to occur at @option{ggc-min-heapsize} to zero causes a full collection to occur at
every opportunity. This is extremely slow, but can be useful for every opportunity. This is extremely slow, but can be useful for
debugging. debugging.
...@@ -4489,7 +4491,9 @@ tuning this may improve compilation speed, and has no effect on code ...@@ -4489,7 +4491,9 @@ tuning this may improve compilation speed, and has no effect on code
generation. generation.
The default is RAM/8, with a lower bound of 4096 (four megabytes) and an The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
upper bound of 131072 (128 megabytes). If GCC is not able to calculate upper bound of 131072 (128 megabytes). If @code{getrlimit} is
available, the notion of "RAM" is the smallest of actual RAM,
RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If GCC is not able to calculate
RAM on a particular platform, the lower bound is used. Setting this RAM on a particular platform, the lower bound is used. Setting this
parameter very large effectively disables garbage collection. Setting parameter very large effectively disables garbage collection. Setting
this parameter and @option{ggc-min-expand} to zero causes a full this parameter and @option{ggc-min-expand} to zero causes a full
......
...@@ -29,6 +29,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -29,6 +29,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "toplev.h" #include "toplev.h"
#include "params.h" #include "params.h"
#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
#ifdef HAVE_MMAP_FILE #ifdef HAVE_MMAP_FILE
# include <sys/mman.h> # include <sys/mman.h>
#endif #endif
...@@ -54,6 +58,7 @@ static int compare_ptr_data PARAMS ((const void *, const void *)); ...@@ -54,6 +58,7 @@ static int compare_ptr_data PARAMS ((const void *, const void *));
static void relocate_ptrs PARAMS ((void *, void *)); static void relocate_ptrs PARAMS ((void *, void *));
static void write_pch_globals PARAMS ((const struct ggc_root_tab * const *tab, static void write_pch_globals PARAMS ((const struct ggc_root_tab * const *tab,
struct traversal_state *state)); struct traversal_state *state));
static double ggc_rlimit_bound PARAMS ((double));
/* Maintain global roots that are preserved during GC. */ /* Maintain global roots that are preserved during GC. */
...@@ -626,11 +631,44 @@ gt_pch_restore (f) ...@@ -626,11 +631,44 @@ gt_pch_restore (f)
gt_pch_restore_stringpool (); gt_pch_restore_stringpool ();
} }
/* Modify the bound based on rlimits. Keep the smallest number found. */
static double
ggc_rlimit_bound (limit)
double limit;
{
#if defined(HAVE_GETRLIMIT)
struct rlimit rlim;
# ifdef RLIMIT_RSS
if (getrlimit (RLIMIT_RSS, &rlim) == 0
&& rlim.rlim_cur != RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
# ifdef RLIMIT_DATA
if (getrlimit (RLIMIT_DATA, &rlim) == 0
&& rlim.rlim_cur != RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
# ifdef RLIMIT_AS
if (getrlimit (RLIMIT_AS, &rlim) == 0
&& rlim.rlim_cur != RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
#endif /* HAVE_GETRLIMIT */
return limit;
}
/* Heuristic to set a default for GGC_MIN_EXPAND. */ /* Heuristic to set a default for GGC_MIN_EXPAND. */
int int
ggc_min_expand_heuristic() ggc_min_expand_heuristic()
{ {
double min_expand = physmem_total(); double min_expand = physmem_total();
/* Adjust for rlimits. */
min_expand = ggc_rlimit_bound (min_expand);
/* The heuristic is a percentage equal to 30% + 70%*(RAM/1GB), yielding /* The heuristic is a percentage equal to 30% + 70%*(RAM/1GB), yielding
a lower bound of 30% and an upper bound of 100% (when RAM >= 1GB). */ a lower bound of 30% and an upper bound of 100% (when RAM >= 1GB). */
...@@ -646,7 +684,12 @@ ggc_min_expand_heuristic() ...@@ -646,7 +684,12 @@ ggc_min_expand_heuristic()
int int
ggc_min_heapsize_heuristic() ggc_min_heapsize_heuristic()
{ {
double min_heap_kbytes = physmem_total() / 1024; double min_heap_kbytes = physmem_total();
/* Adjust for rlimits. */
min_heap_kbytes = ggc_rlimit_bound (min_heap_kbytes);
min_heap_kbytes /= 1024; /* convert to Kbytes. */
/* The heuristic is RAM/8, with a lower bound of 4M and an upper /* The heuristic is RAM/8, with a lower bound of 4M and an upper
bound of 128M (when RAM >= 1GB). */ bound of 128M (when RAM >= 1GB). */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment