Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make SIMIX_simcall_name() use the type of observer_ if it exists.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 22 Apr 2021 20:45:52 +0000 (22:45 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 23 Apr 2021 07:54:40 +0000 (09:54 +0200)
It gives more information about the kind of simcall being involved,
since most simcalls are nowadays of type RUN_KERNEL or RUN_BLOCKING.

src/kernel/actor/ActorImpl.cpp
src/mc/api.cpp
src/mc/checker/SafetyChecker.cpp
src/simix/libsmx.cpp
src/simix/popping_bodies.cpp
src/simix/popping_generated.cpp
src/simix/popping_private.hpp
src/simix/simcalls.py
src/simix/smx_global.cpp

index fe224fc..bd04da8 100644 (file)
@@ -446,8 +446,7 @@ void ActorImpl::throw_exception(std::exception_ptr e)
 void ActorImpl::simcall_answer()
 {
   if (this != simix_global->maestro_) {
-    XBT_DEBUG("Answer simcall %s (%d) issued by %s (%p)", SIMIX_simcall_name(simcall_.call_), (int)simcall_.call_,
-              get_cname(), this);
+    XBT_DEBUG("Answer simcall %s issued by %s (%p)", SIMIX_simcall_name(simcall_), get_cname(), this);
     xbt_assert(simcall_.call_ != simix::Simcall::NONE);
     simcall_.call_ = simix::Simcall::NONE;
     xbt_assert(not XBT_LOG_ISENABLED(simix_process, xbt_log_priority_debug) ||
index 0fe5c33..512c221 100644 (file)
@@ -828,7 +828,7 @@ std::string Api::request_to_string(smx_simcall_t req, int value) const
       break;
 
     default:
-      type = SIMIX_simcall_name(req->call_);
+      type = SIMIX_simcall_name(*req);
       args = "??";
       break;
   }
index 4943ad2..ac21b5f 100644 (file)
@@ -186,13 +186,12 @@ void SafetyChecker::backtrack()
     std::unique_ptr<State> state = std::move(stack_.back());
     stack_.pop_back();
     if (reductionMode_ == ReductionMode::dpor) {
-      auto call = state->executed_req_.call_;
       kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_);
       for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) {
         State* prev_state = i->get();
         if (state->executed_req_.issuer_ == prev_state->executed_req_.issuer_) {
-          XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(call),
-                    SIMIX_simcall_name(prev_state->executed_req_.call_));
+          XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(state->executed_req_),
+                    SIMIX_simcall_name(prev_state->executed_req_));
           break;
         } else if (api::get().simcall_check_dependency(&state->internal_req_, &prev_state->internal_req_)) {
           if (XBT_LOG_ISENABLED(mc_safety, xbt_log_priority_debug)) {
@@ -213,8 +212,8 @@ void SafetyChecker::backtrack()
         } else {
           const kernel::actor::ActorImpl* previous_issuer = api::get().simcall_get_issuer(&prev_state->executed_req_);
           XBT_DEBUG("Simcall %s, process %ld (state %d) and simcall %s, process %ld (state %d) are independent",
-                    SIMIX_simcall_name(call), issuer->get_pid(), state->num_,
-                    SIMIX_simcall_name(prev_state->executed_req_.call_), previous_issuer->get_pid(), prev_state->num_);
+                    SIMIX_simcall_name(state->executed_req_), issuer->get_pid(), state->num_,
+                    SIMIX_simcall_name(prev_state->executed_req_), previous_issuer->get_pid(), prev_state->num_);
         }
       }
     }
index 8203c2f..9bec9a4 100644 (file)
@@ -25,6 +25,9 @@
 
 #include "popping_bodies.cpp"
 
+#include <boost/core/demangle.hpp>
+#include <string>
+
 /**
  * @ingroup simix_host_management
  * @brief Waits for the completion of an execution synchro and destroy it.
@@ -369,9 +372,18 @@ int simcall_mc_random(int min, int max) // XBT_ATTRIB_DEPRECATD_v331
 /* ************************************************************************** */
 
 /** @brief returns a printable string representing a simcall */
-const char* SIMIX_simcall_name(Simcall kind)
-{
-  return simcall_names[static_cast<int>(kind)];
+const char* SIMIX_simcall_name(const s_smx_simcall& simcall)
+{
+  if (simcall.observer_ != nullptr) {
+    static std::string name;
+    name              = boost::core::demangle(typeid(*simcall.observer_).name());
+    const char* cname = name.c_str();
+    if (name.rfind("simgrid::kernel::", 0) == 0)
+      cname += 17; // strip prefix "simgrid::kernel::"
+    return cname;
+  } else {
+    return simcall_names[static_cast<int>(simcall.call_)];
+  }
 }
 
 namespace simgrid {
index 1bcba0a..6948f46 100644 (file)
@@ -32,8 +32,7 @@ inline static R simcall(Simcall call, T const&... t)
   smx_actor_t self = SIMIX_process_self();
   simgrid::simix::marshal(&self->simcall_, call, t...);
   if (self != simix_global->maestro_) {
-    XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->get_cname(), SIMIX_simcall_name(self->simcall_.call_),
-              (int)self->simcall_.call_);
+    XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_));
     self->yield();
   } else {
     self->simcall_handle(0);
index 3a736cb..9b9a7b5 100644 (file)
@@ -48,7 +48,7 @@ constexpr std::array<const char*, simgrid::simix::NUM_SIMCALLS> simcall_names{{
  */
 void simgrid::kernel::actor::ActorImpl::simcall_handle(int times_considered)
 {
-  XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_.call_));
+  XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_));
   simcall_.mc_value_ = times_considered;
   if (simcall_.observer_ != nullptr)
     simcall_.observer_->prepare(times_considered);
index 8b54a2c..745d0e6 100644 (file)
@@ -56,7 +56,7 @@ struct s_smx_simcall {
 
 /******************************** General *************************************/
 
-XBT_PRIVATE const char* SIMIX_simcall_name(simgrid::simix::Simcall kind);
+XBT_PRIVATE const char* SIMIX_simcall_name(const s_smx_simcall& simcall);
 XBT_PRIVATE void SIMIX_run_kernel(std::function<void()> const* code);
 XBT_PRIVATE void SIMIX_run_blocking(std::function<void()> const* code);
 
index 9872c19..2ed634d 100755 (executable)
@@ -336,7 +336,7 @@ if __name__ == '__main__':
     fd.write(' */\n')
     fd.write('void simgrid::kernel::actor::ActorImpl::simcall_handle(int times_considered)\n')
     fd.write('{\n')
-    fd.write('  XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_.call_));\n')
+    fd.write('  XBT_DEBUG("Handling simcall %p: %s", &simcall_, SIMIX_simcall_name(simcall_));\n')
     fd.write('  simcall_.mc_value_ = times_considered;\n')
     fd.write('  if (simcall_.observer_ != nullptr)\n')
     fd.write('    simcall_.observer_->prepare(times_considered);\n')
@@ -381,8 +381,7 @@ inline static R simcall(Simcall call, T const&... t)
   smx_actor_t self = SIMIX_process_self();
   simgrid::simix::marshal(&self->simcall_, call, t...);
   if (self != simix_global->maestro_) {
-    XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->get_cname(), SIMIX_simcall_name(self->simcall_.call_),
-              (int)self->simcall_.call_);
+    XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_));
     self->yield();
   } else {
     self->simcall_handle(0);
index cf91c83..b5f5b98 100644 (file)
@@ -263,7 +263,8 @@ void Global::display_all_actor_status() const
                (xbt_log_no_loc ? (size_t)0xDEADBEEF : (size_t)actor->waiting_synchro_.get()),
                actor->waiting_synchro_->get_cname(), (int)actor->waiting_synchro_->state_);
     } else {
-      XBT_INFO("Actor %ld (%s@%s) simcall %s", actor->get_pid(), actor->get_cname(), actor->get_host()->get_cname(), SIMIX_simcall_name(actor->simcall_.call_));
+      XBT_INFO("Actor %ld (%s@%s) simcall %s", actor->get_pid(), actor->get_cname(), actor->get_host()->get_cname(),
+               SIMIX_simcall_name(actor->simcall_));
     }
   }
 }