Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add minimal signals on Exec to trace them
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 15 Aug 2018 23:06:27 +0000 (01:06 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 15 Aug 2018 23:24:20 +0000 (01:24 +0200)
examples/msg/trace-process-migration/trace-process-migration.tesh
include/simgrid/s4u/Exec.hpp
src/instr/instr_platform.cpp
src/msg/instr_msg_task.cpp
src/s4u/s4u_Exec.cpp

index 279b14f..620a1d8 100644 (file)
@@ -250,7 +250,7 @@ $ tail -n +3 procmig.trace
 > 5 9 7 sleep "1 1 0"
 > 5 10 7 receive "1 0 0"
 > 5 11 7 send "0 0 1"
 > 5 9 7 sleep "1 1 0"
 > 5 10 7 receive "1 0 0"
 > 5 11 7 send "0 0 1"
-> 5 12 7 task_execute "0 1 1"
+> 5 12 7 execute "0 1 1"
 > 4 13 0 6 6 ACTOR_LINK
 > 4 14 0 6 6 ACTOR_TASK_LINK
 > 6 0.000000 33 6 1 "policeman-2"
 > 4 13 0 6 6 ACTOR_LINK
 > 4 14 0 6 6 ACTOR_TASK_LINK
 > 6 0.000000 33 6 1 "policeman-2"
index 26af5d0..c50118d 100644 (file)
@@ -28,6 +28,9 @@ public:
 
   ~Exec() = default;
 
 
   ~Exec() = default;
 
+  static simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> on_start;
+  static simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> on_completion;
+
   Activity* start() override;
   Activity* wait() override;
   Activity* wait(double timeout) override;
   Activity* start() override;
   Activity* wait() override;
   Activity* wait(double timeout) override;
index 6a564f9..244240c 100644 (file)
@@ -9,6 +9,7 @@
 #include "simgrid/kernel/routing/NetZoneImpl.hpp"
 #include "simgrid/s4u/Actor.hpp"
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/kernel/routing/NetZoneImpl.hpp"
 #include "simgrid/s4u/Actor.hpp"
 #include "simgrid/s4u/Engine.hpp"
+#include "simgrid/s4u/Exec.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/s4u/VirtualMachine.hpp"
 #include "src/surf/cpu_interface.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/s4u/VirtualMachine.hpp"
 #include "src/surf/cpu_interface.hpp"
@@ -298,7 +299,7 @@ static void instr_actor_on_creation(simgrid::s4u::ActorPtr actor)
   state->add_entity_value("sleep", "1 1 0");
   state->add_entity_value("receive", "1 0 0");
   state->add_entity_value("send", "0 0 1");
   state->add_entity_value("sleep", "1 1 0");
   state->add_entity_value("receive", "1 0 0");
   state->add_entity_value("send", "0 0 1");
-  state->add_entity_value("task_execute", "0 1 1");
+  state->add_entity_value("execute", "0 1 1");
   root->type_->by_name_or_create("ACTOR_LINK", actor_type, actor_type);
   root->type_->by_name_or_create("ACTOR_TASK_LINK", actor_type, actor_type);
 
   root->type_->by_name_or_create("ACTOR_LINK", actor_type, actor_type);
   root->type_->by_name_or_create("ACTOR_TASK_LINK", actor_type, actor_type);
 
@@ -345,7 +346,7 @@ static void instr_vm_on_creation(simgrid::s4u::Host& host)
   state->add_entity_value("sleep", "1 1 0");
   state->add_entity_value("receive", "1 0 0");
   state->add_entity_value("send", "0 0 1");
   state->add_entity_value("sleep", "1 1 0");
   state->add_entity_value("receive", "1 0 0");
   state->add_entity_value("send", "0 0 1");
-  state->add_entity_value("task_execute", "0 1 1");
+  state->add_entity_value("execute", "0 1 1");
   root->type_->by_name_or_create("VM_LINK", vm, vm);
   root->type_->by_name_or_create("VM_ACTOR_LINK", vm, vm);
 }
   root->type_->by_name_or_create("VM_LINK", vm, vm);
   root->type_->by_name_or_create("VM_ACTOR_LINK", vm, vm);
 }
@@ -382,6 +383,12 @@ void instr_define_callbacks()
     simgrid::s4u::Actor::on_wake_up.connect([](simgrid::s4u::ActorPtr actor) {
       simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->pop_event();
     });
     simgrid::s4u::Actor::on_wake_up.connect([](simgrid::s4u::ActorPtr actor) {
       simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->pop_event();
     });
+    simgrid::s4u::Exec::on_start.connect([](simgrid::s4u::ActorPtr actor) {
+      simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->push_event("execute");
+    });
+    simgrid::s4u::Exec::on_completion.connect([](simgrid::s4u::ActorPtr actor) {
+      simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->pop_event();
+    });
     simgrid::s4u::Actor::on_migration_start.connect(instr_actor_on_migration_start);
     simgrid::s4u::Actor::on_migration_end.connect(instr_actor_on_migration_end);
   }
     simgrid::s4u::Actor::on_migration_start.connect(instr_actor_on_migration_start);
     simgrid::s4u::Actor::on_migration_end.connect(instr_actor_on_migration_end);
   }
index e455118..39e3f33 100644 (file)
@@ -49,9 +49,7 @@ void TRACE_msg_task_execute_start(msg_task_t task)
   XBT_DEBUG("EXEC,in %p, %lld, %s", task, task->counter, task->category);
 
   if (TRACE_actor_is_enabled())
   XBT_DEBUG("EXEC,in %p, %lld, %s", task, task->counter, task->category);
 
   if (TRACE_actor_is_enabled())
-    simgrid::instr::Container::by_name(instr_pid(MSG_process_self()))
-        ->get_state("ACTOR_STATE")
-        ->push_event("task_execute");
+    simgrid::instr::Container::by_name(instr_pid(MSG_process_self()))->get_state("ACTOR_STATE")->push_event("execute");
 }
 
 void TRACE_msg_task_execute_end(msg_task_t task)
 }
 
 void TRACE_msg_task_execute_end(msg_task_t task)
index fda9b5b..5f1d222 100644 (file)
@@ -12,11 +12,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_exec, s4u_activity, "S4U asynchronous execut
 
 namespace simgrid {
 namespace s4u {
 
 namespace simgrid {
 namespace s4u {
+simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> s4u::Exec::on_start;
+simgrid::xbt::signal<void(simgrid::s4u::ActorPtr)> s4u::Exec::on_completion;
 
 Activity* Exec::start()
 {
   pimpl_ = simcall_execution_start(name_, tracing_category_, flops_amount_, 1. / priority_, bound_, host_);
   state_ = State::STARTED;
 
 Activity* Exec::start()
 {
   pimpl_ = simcall_execution_start(name_, tracing_category_, flops_amount_, 1. / priority_, bound_, host_);
   state_ = State::STARTED;
+  on_start(Actor::self());
   return this;
 }
 
   return this;
 }
 
@@ -31,6 +34,7 @@ Activity* Exec::wait()
 {
   simcall_execution_wait(pimpl_);
   state_ = State::FINISHED;
 {
   simcall_execution_wait(pimpl_);
   state_ = State::FINISHED;
+  on_completion(Actor::self());
   return this;
 }
 
   return this;
 }