Created
November 3, 2012 23:10
-
-
Save ttilley/4009244 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git c/gc.c w/gc.c | |
index 861379b..2f4d596 100644 | |
--- c/gc.c | |
+++ w/gc.c | |
@@ -86,11 +86,13 @@ void *alloca (); | |
#endif | |
#define HEAP_MIN_SLOTS 10000 | |
#define FREE_MIN 4096 | |
+#define HEAP_SLOTS_GROWTH_FACTOR 1.8 | |
typedef struct { | |
unsigned int initial_malloc_limit; | |
unsigned int initial_heap_min_slots; | |
unsigned int initial_free_min; | |
+ double initial_heap_slots_growth_factor; | |
#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE | |
int gc_stress; | |
#endif | |
@@ -100,6 +102,7 @@ static ruby_gc_params_t initial_params = { | |
GC_MALLOC_LIMIT, | |
HEAP_MIN_SLOTS, | |
FREE_MIN, | |
+ HEAP_SLOTS_GROWTH_FACTOR, | |
#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE | |
FALSE, | |
#endif | |
@@ -444,6 +447,7 @@ int *ruby_initial_gc_stress_ptr = &rb_objspace.gc_stress; | |
#define initial_malloc_limit initial_params.initial_malloc_limit | |
#define initial_heap_min_slots initial_params.initial_heap_min_slots | |
#define initial_free_min initial_params.initial_free_min | |
+#define initial_heap_slots_growth_factor initial_params.initial_heap_slots_growth_factor | |
#define is_lazy_sweeping(objspace) ((objspace)->heap.sweep_slots != 0) | |
@@ -478,7 +482,7 @@ static void initial_expand_heap(rb_objspace_t *objspace); | |
void | |
rb_gc_set_params(void) | |
{ | |
- char *malloc_limit_ptr, *heap_min_slots_ptr, *free_min_ptr; | |
+ char *malloc_limit_ptr, *heap_min_slots_ptr, *free_min_ptr, *heap_slots_growth_factor_ptr; | |
if (rb_safe_level() > 0) return; | |
@@ -505,7 +509,8 @@ rb_gc_set_params(void) | |
} | |
} | |
- free_min_ptr = getenv("RUBY_FREE_MIN"); | |
+ if (!(free_min_ptr = getenv("RUBY_FREE_MIN"))) | |
+ free_min_ptr = getenv("RUBY_HEAP_FREE_MIN"); | |
if (free_min_ptr != NULL) { | |
int free_min_i = atoi(free_min_ptr); | |
if (RTEST(ruby_verbose)) | |
@@ -514,6 +519,17 @@ rb_gc_set_params(void) | |
initial_free_min = free_min_i; | |
} | |
} | |
+ | |
+ heap_slots_growth_factor_ptr = getenv("RUBY_HEAP_SLOTS_GROWTH_FACTOR"); | |
+ if (heap_slots_growth_factor_ptr != NULL) { | |
+ double growth_factor_d = atof(heap_slots_growth_factor_ptr); | |
+ if (RTEST(ruby_verbose)) | |
+ fprintf(stderr, "heap_slots_growth_factor=%g (%g)\n", | |
+ growth_factor_d, initial_heap_slots_growth_factor); | |
+ if (growth_factor_d > 0) { | |
+ initial_heap_slots_growth_factor = growth_factor_d; | |
+ } | |
+ } | |
} | |
#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE | |
@@ -1302,7 +1318,7 @@ initial_expand_heap(rb_objspace_t *objspace) | |
static void | |
set_heaps_increment(rb_objspace_t *objspace) | |
{ | |
- size_t next_heaps_length = (size_t)(heaps_used * 1.8); | |
+ size_t next_heaps_length = (size_t)(heaps_used * initial_heap_slots_growth_factor); | |
if (next_heaps_length == heaps_used) { | |
next_heaps_length++; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment