From c8b4c873675620354afe4a07cd00bce5f6f602b8 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 14 Apr 2014 13:00:27 +0200 Subject: [PATCH 1/1] [mc] Only enable KSM on snapshots and not on main memory Merging pages on the main memory will generate page faults on write and we won't gain much memory. --- src/mc/mc_checkpoint.c | 5 +++-- src/mc/mc_global.c | 8 -------- src/xbt/mmalloc/mmorecore.c | 4 ---- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index e45567764a..d287c804fb 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -54,7 +54,7 @@ static void local_variable_free_voidp(void *v){ static void MC_region_destroy(mc_mem_region_t reg) { - xbt_free(reg->data); + munmap(reg->data, reg->size); xbt_free(reg); } @@ -87,8 +87,9 @@ static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size) mc_mem_region_t new_reg = xbt_new(s_mc_mem_region_t, 1); new_reg->start_addr = start_addr; new_reg->size = size; - new_reg->data = xbt_malloc(size); + new_reg->data = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); memcpy(new_reg->data, start_addr, size); + madvise(new_reg->data, size, MADV_MERGEABLE); XBT_DEBUG("New region : type : %d, data : %p (real addr %p), size : %zu", type, new_reg->data, start_addr, size); diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 55cf9088ca..acbc818593 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -800,14 +800,6 @@ static void MC_init_debug_info(void) { mc_libsimgrid_info = MC_find_object_info(maps, libsimgrid_path, 0); mc_object_infos[1] = mc_libsimgrid_info; -#ifdef MADV_MERGEABLE - for(int i=0; i!=mc_object_infos_size; ++i) { - void* start = mc_object_infos[i]->start_rw; - void* end = mc_object_infos[i]->end_rw; - madvise(start, (char*)end - (char*)start, MADV_MERGEABLE); - } -#endif - // Use information of the other objects: MC_post_process_object_info(mc_binary_info); MC_post_process_object_info(mc_libsimgrid_info); diff --git a/src/xbt/mmalloc/mmorecore.c b/src/xbt/mmalloc/mmorecore.c index 38f6d8b7bd..9fbf7a9704 100644 --- a/src/xbt/mmalloc/mmorecore.c +++ b/src/xbt/mmalloc/mmorecore.c @@ -124,10 +124,6 @@ void *mmorecore(struct mdesc *mdp, ssize_t size) abort(); } -#ifdef MADV_MERGEABLE - madvise(mapto, mapbytes, MADV_MERGEABLE); -#endif - if (mdp->top == 0) mdp->base = mdp->breakval = mapto; -- 2.20.1