From e88fcca408491a220b09ee34cad8afa872b0ceaa Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 1 Nov 2022 22:29:27 +0100 Subject: [PATCH] MC: display the status of all actors in case of deadlock --- examples/smpi/mc/sendsend.tesh | 4 ++++ examples/sthread/pthread-mc-mutex-simpledeadlock.tesh | 5 +++++ src/mc/api/RemoteApp.cpp | 3 --- src/mc/remote/AppSide.cpp | 10 +++++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/examples/smpi/mc/sendsend.tesh b/examples/smpi/mc/sendsend.tesh index 26c90a3e1c..8a826560a2 100644 --- a/examples/smpi/mc/sendsend.tesh +++ b/examples/smpi/mc/sendsend.tesh @@ -19,6 +19,10 @@ $ ../../../smpi_script/bin/smpirun -quiet -wrapper "${bindir:=.}/../../../bin/si > [0.000000] [mc_global/INFO] ************************** > [0.000000] [mc_global/INFO] *** DEADLOCK DETECTED *** > [0.000000] [mc_global/INFO] ************************** +> [0.000000] [ker_engine/INFO] 2 actors are still running, waiting for something. +> [0.000000] [ker_engine/INFO] Legend of the following listing: "Actor (@): " +> [0.000000] [ker_engine/INFO] Actor 1 (0@node-0.simgrid.org) simcall CommWait(comm_id:1 src:1 dst:-1 mbox:2 srcbuf:1 dstbuf:2 bufsize:4) +> [0.000000] [ker_engine/INFO] Actor 2 (1@node-1.simgrid.org) simcall CommWait(comm_id:2 src:2 dst:-1 mbox:0 srcbuf:3 dstbuf:2 bufsize:4) > [0.000000] [mc_global/INFO] Counter-example execution trace: > [0.000000] [mc_global/INFO] 1: iSend(mbox=2) > [0.000000] [mc_global/INFO] 2: iSend(mbox=0) diff --git a/examples/sthread/pthread-mc-mutex-simpledeadlock.tesh b/examples/sthread/pthread-mc-mutex-simpledeadlock.tesh index eba99b78b4..8070caa6a8 100644 --- a/examples/sthread/pthread-mc-mutex-simpledeadlock.tesh +++ b/examples/sthread/pthread-mc-mutex-simpledeadlock.tesh @@ -15,6 +15,11 @@ $ ${bindir:=.}/../../bin/simgrid-mc --cfg=model-check/setenv:LD_PRELOAD=${libdir > [0.000000] [mc_global/INFO] ************************** > [0.000000] [mc_global/INFO] *** DEADLOCK DETECTED *** > [0.000000] [mc_global/INFO] ************************** +> [0.000000] [ker_engine/INFO] 3 actors are still running, waiting for something. +> [0.000000] [ker_engine/INFO] Legend of the following listing: "Actor (@): " +> [0.000000] [ker_engine/INFO] Actor 1 (main thread@Lilibeth) simcall ActorJoin(pid:2) +> [0.000000] [ker_engine/INFO] Actor 2 (0:1@Lilibeth) simcall MUTEX_WAIT(mutex_id: 1owner:3) +> [0.000000] [ker_engine/INFO] Actor 3 (0:2@Lilibeth) simcall MUTEX_WAIT(mutex_id: 0owner:2) > [0.000000] [mc_global/INFO] Counter-example execution trace: > [0.000000] [mc_global/INFO] 2: MUTEX_ASYNC_LOCK(mutex: 0, owner:2) > [0.000000] [mc_global/INFO] 2: MUTEX_WAIT(mutex: 0, owner:2) diff --git a/src/mc/api/RemoteApp.cpp b/src/mc/api/RemoteApp.cpp index 08e5c851fc..64aed11e6e 100644 --- a/src/mc/api/RemoteApp.cpp +++ b/src/mc/api/RemoteApp.cpp @@ -198,9 +198,6 @@ void RemoteApp::check_deadlock() const (int)sizeof(message)); if (message.value != 0) { - XBT_CINFO(mc_global, "**************************"); - XBT_CINFO(mc_global, "*** DEADLOCK DETECTED ***"); - XBT_CINFO(mc_global, "**************************"); XBT_CINFO(mc_global, "Counter-example execution trace:"); for (auto const& frame : model_checker_->get_exploration()->get_textual_trace()) XBT_CINFO(mc_global, " %s", frame.c_str()); diff --git a/src/mc/remote/AppSide.cpp b/src/mc/remote/AppSide.cpp index cbc819b407..56de882c90 100644 --- a/src/mc/remote/AppSide.cpp +++ b/src/mc/remote/AppSide.cpp @@ -30,6 +30,7 @@ #include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_client, mc, "MC client logic"); +XBT_LOG_EXTERNAL_CATEGORY(mc_global); namespace simgrid::mc { @@ -84,11 +85,18 @@ AppSide* AppSide::initialize() void AppSide::handle_deadlock_check(const s_mc_message_t*) const { - const auto& actor_list = kernel::EngineImpl::get_instance()->get_actor_list(); + auto* engine = kernel::EngineImpl::get_instance(); + const auto& actor_list = engine->get_actor_list(); bool deadlock = not actor_list.empty() && std::none_of(begin(actor_list), end(actor_list), [](const auto& kv) { return mc::actor_is_enabled(kv.second); }); + if (deadlock) { + XBT_CINFO(mc_global, "**************************"); + XBT_CINFO(mc_global, "*** DEADLOCK DETECTED ***"); + XBT_CINFO(mc_global, "**************************"); + engine->display_all_actor_status(); + } // Send result: s_mc_message_int_t answer{MessageType::DEADLOCK_CHECK_REPLY, deadlock}; xbt_assert(channel_.send(answer) == 0, "Could not send response"); -- 2.20.1