Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move surf::As to s4u::As
[simgrid.git] / src / mc / mc_compare.cpp
index 8c05cd1..00ead0e 100644 (file)
 
 #include <xbt/sysdep.h>
 
-#include "internal_config.h"
-#include "mc_object_info.h"
-#include "mc_safety.h"
-#include "mc_liveness.h"
-#include "mc_private.h"
-#include "mc_smx.h"
-#include "mc_dwarf.hpp"
-
-#include "mc/Frame.hpp"
-#include "mc/ObjectInformation.hpp"
-#include "mc/Variable.hpp"
+#include "src/internal_config.h"
+#include "src/mc/mc_safety.h"
+#include "src/mc/mc_liveness.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_smx.h"
+#include "src/mc/mc_dwarf.hpp"
+
+#include "src/mc/Frame.hpp"
+#include "src/mc/ObjectInformation.hpp"
+#include "src/mc/Variable.hpp"
 
 #ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "src/smpi/private.h"
 #endif
 
 #include "xbt/mmalloc.h"
-#include "xbt/mmalloc/mmprivate.h"
-
-#include <xbt/probes.h>
+#include "src/xbt/mmalloc/mmprivate.h"
 
 using simgrid::mc::remote;
 
@@ -157,9 +154,9 @@ static int compare_areas_with_type(ComparisonState& state,
       return (addr_pointed1 != addr_pointed2);
     } else {
 
-      if (addr_pointed1 == NULL && addr_pointed2 == NULL)
+      if (addr_pointed1 == nullptr && addr_pointed2 == NULL)
         return 0;
-      if (addr_pointed1 == NULL || addr_pointed2 == NULL)
+      if (addr_pointed1 == nullptr || addr_pointed2 == NULL)
         return 1;
       if (!state.compared_pointers.insert(
           std::make_pair(addr_pointed1, addr_pointed2)).second)
@@ -180,7 +177,7 @@ static int compare_areas_with_type(ComparisonState& state,
           return 1;
         // The pointers are both in the heap:
         return compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
-                                 snapshot2, NULL, type->subtype, pointer_level);
+                                 snapshot2, nullptr, type->subtype, pointer_level);
       }
 
       // The pointers are both in the current object R/W segment:
@@ -289,7 +286,6 @@ static int compare_global_variables(simgrid::mc::ObjectInformation* object_info,
                                 (char *) current_var.address, snapshot2, r2,
                                 bvariable_type, 0);
     if (res == 1) {
-      XBT_TRACE3(mc, global_diff, -1, -1, current_var->name);
       XBT_VERB("Global variable %s (%p) is different between snapshots",
                current_var.name.c_str(),
                (char *) current_var.address);
@@ -321,7 +317,7 @@ static int compare_local_variables(int process_index,
       current_var1 = &stack1->local_variables[cursor];
       current_var2 = &stack1->local_variables[cursor];
       if (current_var1->name != current_var2->name
-          || current_var1->subprogram != current_var1->subprogram
+          || current_var1->subprogram != current_var2->subprogram
           || current_var1->ip != current_var2->ip) {
         // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
         XBT_VERB
@@ -345,7 +341,6 @@ static int compare_local_variables(int process_index,
 
       if (res == 1) {
         // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
-        XBT_TRACE3(mc, local_diff, -1, -1, current_var1->name);
         XBT_VERB
             ("Local variable %s (%p - %p) in frame %s "
              "is different between snapshots",
@@ -388,20 +383,10 @@ int snapshot_compare(void *state1, void *state2)
   int errors = 0;
   int res_init;
 
-  xbt_os_timer_t global_timer = xbt_os_timer_new();
-  xbt_os_timer_t timer = xbt_os_timer_new();
-
-  xbt_os_walltimer_start(global_timer);
-
-#ifdef MC_DEBUG
-  xbt_os_walltimer_start(timer);
-#endif
-
   int hash_result = 0;
   if (_sg_mc_hash) {
     hash_result = (s1->hash != s2->hash);
     if (hash_result) {
-      XBT_TRACE2(mc, hash_diff, num1, num2);
       XBT_VERB("(%d - %d) Different hash : 0x%" PRIx64 "--0x%" PRIx64, num1,
                num2, s1->hash, s2->hash);
 #ifndef MC_DEBUG
@@ -414,7 +399,6 @@ int snapshot_compare(void *state1, void *state2)
 
   /* Compare enabled processes */
   if (s1->enabled_processes != s2->enabled_processes) {
-      //XBT_TRACE3(mc, state_diff, num1, num2, "Different enabled processes");
       XBT_VERB("(%d - %d) Different enabled processes", num1, num2);
       // return 1; ??
   }
@@ -429,11 +413,6 @@ int snapshot_compare(void *state1, void *state2)
     size_used2 = s2->stack_sizes[i];
     if (size_used1 != size_used2) {
 #ifdef MC_DEBUG
-      if (is_diff == 0) {
-        xbt_os_walltimer_stop(timer);
-        mc_comp_times->stacks_sizes_comparison_time =
-            xbt_os_timer_elapsed(timer);
-      }
       XBT_DEBUG("(%d - %d) Different size used in stacks : %zu - %zu", num1,
                 num2, size_used1, size_used2);
       errors++;
@@ -443,35 +422,21 @@ int snapshot_compare(void *state1, void *state2)
       XBT_VERB("(%d - %d) Different size used in stacks : %zu - %zu", num1,
                num2, size_used1, size_used2);
 #endif
-      XBT_TRACE3(mc, state_diff, num1, num2, "Different stack size");
-
-      xbt_os_walltimer_stop(timer);
-      xbt_os_timer_free(timer);
-      xbt_os_walltimer_stop(global_timer);
-      mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-      xbt_os_timer_free(global_timer);
-
       return 1;
 #endif
     }
     i++;
   }
 
-#ifdef MC_DEBUG
-  if (is_diff == 0)
-    xbt_os_walltimer_stop(timer);
-  xbt_os_walltimer_start(timer);
-#endif
-
   /* Init heap information used in heap comparison algorithm */
   xbt_mheap_t heap1 = (xbt_mheap_t)s1->read_bytes(
     alloca(sizeof(struct mdesc)), sizeof(struct mdesc),
     remote(process->heap_address),
-    simgrid::mc::ProcessIndexMissing, simgrid::mc::AddressSpace::Lazy);
+    simgrid::mc::ProcessIndexMissing, simgrid::mc::ReadOptions::lazy());
   xbt_mheap_t heap2 = (xbt_mheap_t)s2->read_bytes(
     alloca(sizeof(struct mdesc)), sizeof(struct mdesc),
     remote(process->heap_address),
-    simgrid::mc::ProcessIndexMissing, simgrid::mc::AddressSpace::Lazy);
+    simgrid::mc::ProcessIndexMissing, simgrid::mc::ReadOptions::lazy());
   res_init = init_heap_information(heap1, heap2, &s1->to_ignore, &s2->to_ignore);
   if (res_init == -1) {
 #ifdef MC_DEBUG
@@ -479,20 +444,12 @@ int snapshot_compare(void *state1, void *state2)
     errors++;
 #else
 #ifdef MC_VERBOSE
-    XBT_TRACE3(mc, state_diff, num1, num2, "Different heap information");
     XBT_VERB("(%d - %d) Different heap information", num1, num2);
 #endif
 
-    xbt_os_walltimer_stop(global_timer);
-    mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-    xbt_os_timer_free(global_timer);
-
     return 1;
 #endif
   }
-#ifdef MC_DEBUG
-  xbt_os_walltimer_start(timer);
-#endif
 
   /* Stacks comparison */
   unsigned cursor = 0;
@@ -503,7 +460,7 @@ int snapshot_compare(void *state1, void *state2)
   mc_snapshot_stack_t stack1, stack2;
   while (cursor < s1->stacks.size()) {
     stack1 = &s1->stacks[cursor];
-    stack2 = &s1->stacks[cursor];
+    stack2 = &s2->stacks[cursor];
 
     if (stack1->process_index != stack2->process_index) {
       diff_local = 1;
@@ -513,12 +470,7 @@ int snapshot_compare(void *state1, void *state2)
     else diff_local =
         compare_local_variables(stack1->process_index, s1, s2, stack1, stack2);
     if (diff_local > 0) {
-      XBT_TRACE3(mc, state_diff, num1, num2, "Different local variables");
 #ifdef MC_DEBUG
-      if (is_diff == 0) {
-        xbt_os_walltimer_stop(timer);
-        mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer);
-      }
       XBT_DEBUG("(%d - %d) Different local variables between stacks %d", num1,
                 num2, cursor + 1);
       errors++;
@@ -531,11 +483,6 @@ int snapshot_compare(void *state1, void *state2)
 #endif
 
       reset_heap_information();
-      xbt_os_walltimer_stop(timer);
-      xbt_os_timer_free(timer);
-      xbt_os_walltimer_stop(global_timer);
-      mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-      xbt_os_timer_free(global_timer);
 
       return 1;
 #endif
@@ -547,8 +494,6 @@ int snapshot_compare(void *state1, void *state2)
   // TODO, raise a difference instead?
   xbt_assert(regions_count == s2->snapshot_regions.size());
 
-  mc_comp_times->global_variables_comparison_time = 0;
-
   for (size_t k = 0; k != regions_count; ++k) {
     mc_mem_region_t region1 = s1->snapshot_regions[k].get();
     mc_mem_region_t region2 = s2->snapshot_regions[k].get();
@@ -563,24 +508,15 @@ int snapshot_compare(void *state1, void *state2)
 
     std::string const& name = region1->object_info()->file_name;
 
-#ifdef MC_DEBUG
-    if (is_diff == 0)
-      xbt_os_walltimer_stop(timer);
-    xbt_os_walltimer_start(timer);
-#endif
-
     /* Compare global variables */
     is_diff =
-      compare_global_variables(region1->object_info(  ), simgrid::mc::AddressSpace::Normal,
+      compare_global_variables(region1->object_info(),
+        simgrid::mc::ProcessIndexDisabled,
         region1, region2,
         s1, s2);
 
     if (is_diff != 0) {
-      XBT_TRACE3(mc, state_diff, num1, num2, "Different global variables");
 #ifdef MC_DEBUG
-      xbt_os_walltimer_stop(timer);
-      mc_comp_times->global_variables_comparison_time
-        += xbt_os_timer_elapsed(timer);
       XBT_DEBUG("(%d - %d) Different global variables in %s",
         num1, num2, name.c_str());
       errors++;
@@ -590,29 +526,15 @@ int snapshot_compare(void *state1, void *state2)
         num1, num2, name.c_str());
 #endif
 
-      reset_heap_information();
-      xbt_os_walltimer_stop(timer);
-      xbt_os_timer_free(timer);
-      xbt_os_walltimer_stop(global_timer);
-      mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-      xbt_os_timer_free(global_timer);
-
       return 1;
 #endif
     }
   }
 
-#ifdef MC_DEBUG
-  xbt_os_walltimer_start(timer);
-#endif
-
   /* Compare heap */
   if (mmalloc_compare_heap(s1, s2) > 0) {
-    XBT_TRACE3(mc, state_diff, num1, num2, "Different heap");
 
 #ifdef MC_DEBUG
-    xbt_os_walltimer_stop(timer);
-    mc_comp_times->heap_comparison_time = xbt_os_timer_elapsed(timer);
     XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", num1, num2);
     errors++;
 #else
@@ -621,37 +543,12 @@ int snapshot_compare(void *state1, void *state2)
     XBT_VERB("(%d - %d) Different heap (mmalloc_compare)", num1, num2);
 #endif
 
-    reset_heap_information();
-    xbt_os_walltimer_stop(timer);
-    xbt_os_timer_free(timer);
-    xbt_os_walltimer_stop(global_timer);
-    mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-    xbt_os_timer_free(global_timer);
-
     return 1;
-#endif
-  } else {
-#ifdef MC_DEBUG
-    xbt_os_walltimer_stop(timer);
 #endif
   }
 
   reset_heap_information();
 
-  xbt_os_walltimer_stop(timer);
-  xbt_os_timer_free(timer);
-
-#ifdef MC_VERBOSE
-  xbt_os_walltimer_stop(global_timer);
-  mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-#endif
-
-  xbt_os_timer_free(global_timer);
-
-#ifdef MC_DEBUG
-  print_comparison_times();
-#endif
-
 #ifdef MC_VERBOSE
   if (errors || hash_result)
     XBT_VERB("(%d - %d) Difference found", num1, num2);
@@ -674,18 +571,4 @@ int snapshot_compare(void *state1, void *state2)
 
 }
 
-/***************************** Statistics *****************************/
-/*******************************************************************/
-
-void print_comparison_times()
-{
-  XBT_DEBUG("*** Comparison times ***");
-  XBT_DEBUG("- Nb processes : %f", mc_comp_times->nb_processes_comparison_time);
-  XBT_DEBUG("- Nb bytes used : %f", mc_comp_times->bytes_used_comparison_time);
-  XBT_DEBUG("- Stacks sizes : %f", mc_comp_times->stacks_sizes_comparison_time);
-  XBT_DEBUG("- GLobal variables : %f", mc_comp_times->global_variables_comparison_time);
-  XBT_DEBUG("- Heap : %f", mc_comp_times->heap_comparison_time);
-  XBT_DEBUG("- Stacks : %f", mc_comp_times->stacks_comparison_time);
-}
-
 }