! timeout 60
$ ../../../smpi_script/bin/smpirun -wrapper "${bindir:=.}/../../../bin/simgrid-mc" --log=xbt_cfg.thresh:warning -hostfile ${srcdir:=.}/hostfile_only_send_deterministic -platform ${srcdir:=.}/../../platforms/cluster.xml --cfg=model-check/communications_determinism:1 --cfg=smpi/send_is_detached_thresh:0 --cfg=smpi/running_power:1e9 ./smpi_only_send_deterministic
> [0.000000] [mc_comm_determinism/INFO] Check communication determinism
-> [0.000000] [mc_global/INFO] ******************************************************
-> [0.000000] [mc_global/INFO] **** Only-send-deterministic communication pattern ****
-> [0.000000] [mc_global/INFO] ******************************************************
-> [0.000000] [mc_global/INFO] The recv communications pattern of the process 0 is different! Different source for communication #2
-> [0.000000] [mc_global/INFO] Expanded states = 520
-> [0.000000] [mc_global/INFO] Visited states = 1476
-> [0.000000] [mc_global/INFO] Executed transitions = 1312
-> [0.000000] [mc_global/INFO] Send-deterministic : Yes
-> [0.000000] [mc_global/INFO] Recv-deterministic : No
+> [0.000000] [mc_Session/INFO] ******************************************************
+> [0.000000] [mc_Session/INFO] **** Only-send-deterministic communication pattern ****
+> [0.000000] [mc_Session/INFO] ******************************************************
+> [0.000000] [mc_Session/INFO] The recv communications pattern of the process 0 is different! Different source for communication #2
+> [0.000000] [mc_Session/INFO] Expanded states = 520
+> [0.000000] [mc_Session/INFO] Visited states = 1476
+> [0.000000] [mc_Session/INFO] Executed transitions = 1312
+> [0.000000] [mc_Session/INFO] Send-deterministic : Yes
+> [0.000000] [mc_Session/INFO] Recv-deterministic : No
XBT_INFO("%s", simgrid::mc::initial_global_state->send_diff);
xbt_free(simgrid::mc::initial_global_state->send_diff);
simgrid::mc::initial_global_state->send_diff = nullptr;
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
}else if(_sg_mc_comms_determinism
&& (!simgrid::mc::initial_global_state->send_deterministic
simgrid::mc::initial_global_state->send_diff = nullptr;
xbt_free(simgrid::mc::initial_global_state->recv_diff);
simgrid::mc::initial_global_state->recv_diff = nullptr;
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
}
}
}
}
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
return SIMGRID_MC_EXIT_SUCCESS;
}
simgrid::mc::dumpRecordPath();
for (auto& s : this->getTextualTrace())
XBT_INFO("%s", s.c_str());
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
XBT_INFO("Counter-example depth : %zd", depth);
}
}
XBT_INFO("No property violation found.");
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
return SIMGRID_MC_EXIT_SUCCESS;
}
XBT_INFO("Counter-example execution trace:");
for (auto& s : mc_model_checker->getChecker()->getTextualTrace())
XBT_INFO("%s", s.c_str());
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
}
static int snapshot_compare(simgrid::mc::State* state1, simgrid::mc::State* state2)
}
XBT_INFO("No property violation found.");
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
initial_global_state = nullptr;
return SIMGRID_MC_EXIT_SUCCESS;
}
#include <functional>
+#include <xbt/log.h>
#include <xbt/system_error.hpp>
#include <simgrid/sg_config.h>
#include <simgrid/modelchecker.h>
+#include <mc/mc.h>
#include "src/mc/Session.hpp"
+#include "src/mc/mc_state.h"
+#include "src/mc/mc_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_Session, mc, "Model-checker session");
modelChecker_->wait_for_requests();
}
+void Session::logState()
+{
+ if(_sg_mc_comms_determinism) {
+ if (!simgrid::mc::initial_global_state->recv_deterministic &&
+ simgrid::mc::initial_global_state->send_deterministic){
+ XBT_INFO("******************************************************");
+ XBT_INFO("**** Only-send-deterministic communication pattern ****");
+ XBT_INFO("******************************************************");
+ XBT_INFO("%s", simgrid::mc::initial_global_state->recv_diff);
+ }else if(!simgrid::mc::initial_global_state->send_deterministic &&
+ simgrid::mc::initial_global_state->recv_deterministic) {
+ XBT_INFO("******************************************************");
+ XBT_INFO("**** Only-recv-deterministic communication pattern ****");
+ XBT_INFO("******************************************************");
+ XBT_INFO("%s", simgrid::mc::initial_global_state->send_diff);
+ }
+ }
+
+ if (mc_stats->expanded_pairs == 0) {
+ XBT_INFO("Expanded states = %lu", mc_stats->expanded_states);
+ XBT_INFO("Visited states = %lu", mc_stats->visited_states);
+ } else {
+ XBT_INFO("Expanded pairs = %lu", mc_stats->expanded_pairs);
+ XBT_INFO("Visited pairs = %lu", mc_stats->visited_pairs);
+ }
+ XBT_INFO("Executed transitions = %lu", mc_stats->executed_transitions);
+ if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0')) {
+ fprintf(dot_output, "}\n");
+ fclose(dot_output);
+ }
+ if (simgrid::mc::initial_global_state != nullptr
+ && (_sg_mc_comms_determinism || _sg_mc_send_determinism)) {
+ XBT_INFO("Send-deterministic : %s",
+ !simgrid::mc::initial_global_state->send_deterministic ? "No" : "Yes");
+ if (_sg_mc_comms_determinism)
+ XBT_INFO("Recv-deterministic : %s",
+ !simgrid::mc::initial_global_state->recv_deterministic ? "No" : "Yes");
+ }
+ if (getenv("SIMGRID_MC_SYSTEM_STATISTICS")){
+ int ret=system("free");
+ if(ret!=0)XBT_WARN("system call did not return 0, but %d",ret);
+ }
+}
+
// static
Session* Session::fork(std::function<void(void)> code)
{
public:
void execute(Transition const& transition);
+ void logState();
public: // static constructors
XBT_INFO("Counter-example execution trace:");
for (auto& s : mc_model_checker->getChecker()->getTextualTrace())
XBT_INFO("%s", s.c_str());
- MC_print_statistics(mc_stats);
-}
-
-void MC_print_statistics(mc_stats_t stats)
-{
- if(_sg_mc_comms_determinism) {
- if (!simgrid::mc::initial_global_state->recv_deterministic &&
- simgrid::mc::initial_global_state->send_deterministic){
- XBT_INFO("******************************************************");
- XBT_INFO("**** Only-send-deterministic communication pattern ****");
- XBT_INFO("******************************************************");
- XBT_INFO("%s", simgrid::mc::initial_global_state->recv_diff);
- }else if(!simgrid::mc::initial_global_state->send_deterministic &&
- simgrid::mc::initial_global_state->recv_deterministic) {
- XBT_INFO("******************************************************");
- XBT_INFO("**** Only-recv-deterministic communication pattern ****");
- XBT_INFO("******************************************************");
- XBT_INFO("%s", simgrid::mc::initial_global_state->send_diff);
- }
- }
-
- if (stats->expanded_pairs == 0) {
- XBT_INFO("Expanded states = %lu", stats->expanded_states);
- XBT_INFO("Visited states = %lu", stats->visited_states);
- } else {
- XBT_INFO("Expanded pairs = %lu", stats->expanded_pairs);
- XBT_INFO("Visited pairs = %lu", stats->visited_pairs);
- }
- XBT_INFO("Executed transitions = %lu", stats->executed_transitions);
- if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0')) {
- fprintf(dot_output, "}\n");
- fclose(dot_output);
- }
- if (simgrid::mc::initial_global_state != nullptr
- && (_sg_mc_comms_determinism || _sg_mc_send_determinism)) {
- XBT_INFO("Send-deterministic : %s",
- !simgrid::mc::initial_global_state->send_deterministic ? "No" : "Yes");
- if (_sg_mc_comms_determinism)
- XBT_INFO("Recv-deterministic : %s",
- !simgrid::mc::initial_global_state->recv_deterministic ? "No" : "Yes");
- }
- if (getenv("SIMGRID_MC_SYSTEM_STATISTICS")){
- int ret=system("free");
- if(ret!=0)XBT_WARN("system call did not return 0, but %d",ret);
- }
+ simgrid::mc::session->logState();
}
void MC_automaton_load(const char *file)
simgrid::mc::dumpRecordPath();
for (auto& s : mc_model_checker->getChecker()->getTextualTrace())
XBT_INFO("%s", s.c_str());
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
}
void MC_report_crash(int status)
simgrid::mc::dumpRecordPath();
for (auto& s : mc_model_checker->getChecker()->getTextualTrace())
XBT_INFO("%s", s.c_str());
- MC_print_statistics(mc_stats);
+ simgrid::mc::session->logState();
XBT_INFO("Stack trace:");
mc_model_checker->process().dumpStack();
}
XBT_PRIVATE extern mc_stats_t mc_stats;
-XBT_PRIVATE void MC_print_statistics(mc_stats_t stats);
-
/********************************** Snapshot comparison **********************************/
//#define MC_DEBUG 1