From 8d8ce71c92d8ab691166daf81add9e7b05ba9960 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 12 Apr 2016 23:44:13 -0400 Subject: [PATCH] Revert previous change, for now --- gc.c | 54 ++++++++++++++++++++++++++++-------------------------- runtime.c | 6 +++--- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/gc.c b/gc.c index bc7f7f1c..6294ac06 100644 --- a/gc.c +++ b/gc.c @@ -382,32 +382,34 @@ int gc_grow_heap(gc_heap *h, size_t size, size_t chunk_size) size_t cur_size, new_size; gc_heap *h_last, *h_new; pthread_mutex_lock(&heap_lock); - // TODO: experiment with - // 1) growing heap gradually using a fibonnaci sequence growth - // 2) cap at HEAP_SIZE - // 3) allocate larger pages if heap aligned size is > page size? - { - size_t prev_size = 0; - new_size = 0; - h_last = h; - while (h_last->next) { - if (new_size < HEAP_SIZE){ - new_size = prev_size + h_last->size; - prev_size = h_last->size; - } else { - new_size = HEAP_SIZE; - } - h_last = h_last->next; - } - if (new_size == 0) - new_size = h_last->size; - //fprintf(stderr, "Growing heap new page size = %zu\n", new_size); - } -// OLD code: -// h_last = gc_heap_last(h); -// cur_size = h_last->size; -// new_size = cur_size; //gc_heap_align(((cur_size > size) ? cur_size : size) * 2); -// END TODO + // Compute size of new heap page +// experimental code for growing heap gradually using fibonnaci sequence. +// but with boyer benchmarks there is more thrashing with this method, +// so for now it is not used. If it is used again, the initial heaps will +// need to start at a lower size (EG 1 MB). +// { +// size_t prev_size = 0; +// new_size = 0; +// h_last = h; +// while (h_last->next) { +// if (new_size < HEAP_SIZE){ +// new_size = prev_size + h_last->size; +// prev_size = h_last->size; +// } else { +// new_size = HEAP_SIZE; +// } +// h_last = h_last->next; +// } +// if (new_size == 0) +// new_size = h_last->size; +// //fprintf(stderr, "Growing heap new page size = %zu\n", new_size); +// } + h_last = gc_heap_last(h); + cur_size = h_last->size; + new_size = cur_size; //gc_heap_align(((cur_size > size) ? cur_size : size) * 2); + // allocate larger pages if size will not fit on the page + //new_size = gc_heap_align(((cur_size > size) ? cur_size : size)); + // Done with computing new page size h_new = gc_heap_create(new_size, h_last->max_size, chunk_size); h_last->next = h_new; pthread_mutex_unlock(&heap_lock); diff --git a/runtime.c b/runtime.c index 78d22a19..a649f5fc 100644 --- a/runtime.c +++ b/runtime.c @@ -166,9 +166,9 @@ void gc_init_heap(long heap_size) { Cyc_heap = malloc(sizeof(gc_heap_root)); - Cyc_heap->heap = gc_heap_create(1 * 1024 * 1024, 0, 0); - Cyc_heap->small_obj_heap = gc_heap_create(1 * 1024 * 1024, 0, 0); - Cyc_heap->medium_obj_heap = gc_heap_create(1 * 1024 * 1024, 0, 0); + Cyc_heap->heap = gc_heap_create(heap_size, 0, 0); + Cyc_heap->small_obj_heap = gc_heap_create(heap_size, 0, 0); + Cyc_heap->medium_obj_heap = gc_heap_create(heap_size, 0, 0); if (!ck_hs_init(&symbol_table, CK_HS_MODE_OBJECT | CK_HS_MODE_SPMC,