X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f45a8e9ec8326197f2f1fff40efe1eecddc459fe..fcba745e5cc75f24b063641b26fd0fc03bf697e3:/src/mc/mc_compare.c diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index aec9b8cc01..cc5a4a6024 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -81,7 +81,7 @@ static int data_bss_program_region_compare(void *d1, void *d2, size_t size){ }else{ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)){ XBT_VERB("Different byte (offset=%zu) (%p - %p) in data program region", i, (char *)d1 + i, (char *)d2 + i); - XBT_VERB("Addresses pointed : %p - %p\n", addr_pointed1, addr_pointed2); + XBT_VERB("Addresses pointed : %p - %p", addr_pointed1, addr_pointed2); } return 1; } @@ -116,7 +116,7 @@ static int data_bss_libsimgrid_region_compare(void *d1, void *d2, size_t size){ }else{ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)){ XBT_VERB("Different byte (offset=%zu) (%p - %p) in libsimgrid region", i, (char *)d1 + i, (char *)d2 + i); - XBT_VERB("Addresses pointed : %p - %p\n", addr_pointed1, addr_pointed2); + XBT_VERB("Addresses pointed : %p - %p", addr_pointed1, addr_pointed2); } return 1; } @@ -163,18 +163,20 @@ void heap_equality_free_voidp(void *e){ heap_equality_free((heap_equality_t) * (void **) e); } -int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ +int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2, mc_comparison_times_t ct1, mc_comparison_times_t ct2){ - raw_mem_set = (mmalloc_get_current_heap() == raw_heap); + int raw_mem = (mmalloc_get_current_heap() == raw_heap); MC_SET_RAW_MEM; - + int errors = 0, i = 0; if(s1->num_reg != s2->num_reg){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)){ XBT_VERB("Different num_reg (s1 = %u, s2 = %u)", s1->num_reg, s2->num_reg); } + if(!raw_mem) + MC_UNSET_RAW_MEM; return 1; } @@ -202,6 +204,11 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ } } + if(ct1 != NULL) + ct1->nb_comparisons++; + if(ct2 != NULL) + ct2->nb_comparisons++; + xbt_os_timer_t global_timer = xbt_os_timer_new(); xbt_os_timer_t timer = xbt_os_timer_new(); @@ -215,6 +222,11 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ size_t chunks_used2 = mmalloc_get_chunks_used((xbt_mheap_t)s2->regions[heap_index]->data); if(chunks_used1 != chunks_used2){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->chunks_used_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->chunks_used_comparison_times, double, xbt_os_timer_elapsed(timer)); XBT_DEBUG("Different number of chunks used in each heap : %zu - %zu", chunks_used1, chunks_used2); errors++; }else{ @@ -223,30 +235,31 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ xbt_os_timer_free(timer); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return 1; } + }else{ + if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)) + xbt_os_timer_stop(timer); } - - if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->chunks_used_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Chunks used comparison : %f", xbt_os_timer_elapsed(timer)); - + + if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)) xbt_os_timer_start(timer); - } /* Compare size of stacks */ unsigned int cursor = 0; void *addr_stack1, *addr_stack2; void *sp1, *sp2; size_t size_used1, size_used2; + int is_diff = 0; while(cursor < xbt_dynar_length(stacks_areas)){ addr_stack1 = (char *)s1->regions[heap_index]->data + ((char *)((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->address - (char *)std_heap); addr_stack2 = (char *)s2->regions[heap_index]->data + ((char *)((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->address - (char *)std_heap); @@ -256,19 +269,31 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ size_used2 = ((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->size - ((char*)sp2 - (char*)addr_stack2); if(size_used1 != size_used2){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + if(is_diff == 0){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->stacks_sizes_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->stacks_sizes_comparison_times, double, xbt_os_timer_elapsed(timer)); + } XBT_DEBUG("Different size used in stacks : %zu - %zu", size_used1, size_used2); errors++; + is_diff = 1; }else{ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)) XBT_VERB("Different size used in stacks : %zu - %zu", size_used1, size_used2); xbt_os_timer_free(timer); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; + return 1; } } @@ -276,31 +301,40 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ } if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->stacks_sizes_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Stacks sizes comparison : %f", xbt_os_timer_elapsed(timer)); - + if(is_diff == 0) + xbt_os_timer_stop(timer); xbt_os_timer_start(timer); } - + /* Compare program data segment(s) */ + is_diff = 0; i = data_program_index; while(i < s1->num_reg && s1->regions[i]->type == 2){ if(data_bss_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + if(is_diff == 0){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->program_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->program_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); + } XBT_DEBUG("Different memcmp for data in program"); errors++; + is_diff = 1; }else{ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)) XBT_VERB("Different memcmp for data in program"); xbt_os_timer_free(timer); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return 1; } @@ -309,31 +343,40 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ } if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->program_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Program data segment comparison : %f", xbt_os_timer_elapsed(timer)); - + if(is_diff == 0) + xbt_os_timer_stop(timer); xbt_os_timer_start(timer); } /* Compare libsimgrid data segment(s) */ + is_diff = 0; i = data_libsimgrid_index; while(i < s1->num_reg && s1->regions[i]->type == 1){ if(data_bss_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + if(is_diff == 0){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->libsimgrid_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->libsimgrid_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); + } XBT_DEBUG("Different memcmp for data in libsimgrid"); errors++; + is_diff = 1; }else{ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)) XBT_VERB("Different memcmp for data in libsimgrid"); xbt_os_timer_free(timer); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return 1; } @@ -342,11 +385,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ } if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->libsimgrid_data_segment_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Libsimgrid data segment comparison : %f", xbt_os_timer_elapsed(timer)); - + if(is_diff == 0) + xbt_os_timer_stop(timer); xbt_os_timer_start(timer); } @@ -360,6 +400,11 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data, &stacks1, &stacks2, &equals)){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->heap_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->heap_comparison_times, double, xbt_os_timer_elapsed(timer)); XBT_DEBUG("Different heap (mmalloc_compare)"); errors++; }else{ @@ -373,28 +418,29 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ XBT_VERB("Different heap (mmalloc_compare)"); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return 1; } + }else{ + if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)) + xbt_os_timer_stop(timer); } - if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->heap_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Heap comparison : %f", xbt_os_timer_elapsed(timer)); - + if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)) xbt_os_timer_start(timer); - } /* Stacks comparison */ cursor = 0; stack_region_t stack_region1, stack_region2; int diff = 0, diff_local = 0; + is_diff = 0; while(cursor < xbt_dynar_length(stacks1)){ stack_region1 = (stack_region_t)(xbt_dynar_get_as(stacks1, cursor, stack_region_t)); @@ -407,8 +453,16 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, equals); if(diff_local > 0){ if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + if(is_diff == 0){ + xbt_os_timer_stop(timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->stacks_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->stacks_comparison_times, double, xbt_os_timer_elapsed(timer)); + } XBT_DEBUG("Different local variables between stacks %d", cursor + 1); errors++; + is_diff = 1; }else{ xbt_dynar_free(&stacks1); xbt_dynar_free(&stacks2); @@ -419,10 +473,13 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ xbt_os_timer_free(timer); xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return 1; @@ -436,20 +493,19 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ xbt_dynar_free(&stacks2); xbt_dynar_free(&equals); - if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ - xbt_os_timer_stop(timer); - xbt_dynar_push_as(initial_state_liveness->stacks_comparison_times, double, xbt_os_timer_elapsed(timer)); - - XBT_DEBUG("Stacks comparison : %f", xbt_os_timer_elapsed(timer)); - + if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)) xbt_os_timer_free(timer); - } - xbt_os_timer_stop(global_timer); - xbt_dynar_push_as(initial_state_liveness->snapshot_comparison_times, double, xbt_os_timer_elapsed(timer)); + if(!XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){ + xbt_os_timer_stop(global_timer); + if(ct1 != NULL) + xbt_dynar_push_as(ct1->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + if(ct2 != NULL) + xbt_dynar_push_as(ct2->snapshot_comparison_times, double, xbt_os_timer_elapsed(global_timer)); + } xbt_os_timer_free(global_timer); - if(!raw_mem_set) + if(!raw_mem) MC_UNSET_RAW_MEM; return errors > 0;