Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
start to use surf signals to trace resource usage
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 10 May 2018 18:17:15 +0000 (20:17 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 10 May 2018 18:17:15 +0000 (20:17 +0200)
Remarks:
 + one signal is missing (when remains is updated)
 + not sure examples capture this tracing (I had to use debug to check
   the validity of my changes)

src/instr/instr_platform.cpp
src/instr/instr_private.hpp
src/instr/instr_resource_utilization.cpp
src/surf/cpu_interface.cpp

index 2e13b1a..a6800a3 100644 (file)
@@ -11,6 +11,7 @@
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/s4u/VirtualMachine.hpp"
+#include "src/surf/cpu_interface.hpp"
 #include "src/surf/network_interface.hpp"
 #include "src/surf/xml/platf_private.hpp"
 #include "surf/surf.hpp"
@@ -230,6 +231,15 @@ static void instr_host_on_creation(simgrid::s4u::Host& host)
   }
 }
 
+static void instr_cpu_action_on_state_change(simgrid::surf::CpuAction* action,
+                                             simgrid::kernel::resource::Action::State previous)
+{
+  simgrid::surf::Cpu* cpu = static_cast<simgrid::surf::Cpu*>(action->get_variable()->get_constraint(0)->get_id());
+  TRACE_surf_resource_set_utilization("HOST", "power_used", cpu->get_cname(), action->get_category(),
+                                      action->get_variable()->get_value(), action->get_last_update(),
+                                      SIMIX_get_clock() - action->get_last_update());
+}
+
 static void instr_netpoint_on_creation(simgrid::kernel::routing::NetPoint* netpoint)
 {
   if (netpoint->is_router() && TRACE_needs_platform() && TRACE_is_enabled())
@@ -351,6 +361,8 @@ void instr_define_callbacks()
   simgrid::s4u::NetZone::onSeal.connect(instr_netzone_on_seal);
   simgrid::kernel::routing::NetPoint::onCreation.connect(instr_netpoint_on_creation);
 
+  simgrid::surf::CpuAction::onStateChange.connect(instr_cpu_action_on_state_change);
+
   if (TRACE_actor_is_enabled()) {
     simgrid::s4u::Actor::on_creation.connect(instr_actor_on_creation);
     simgrid::s4u::Actor::on_suspend.connect(instr_actor_on_suspend);
index 20aa187..4e69e78 100644 (file)
@@ -237,8 +237,8 @@ XBT_PUBLIC bool TRACE_smpi_is_sleeping();
 XBT_PUBLIC bool TRACE_smpi_view_internals();
 
 /* from resource_utilization.c */
-XBT_PRIVATE void TRACE_surf_host_set_utilization(const char* resource, const char* category, double value, double now,
-                                                 double delta);
+XBT_PRIVATE void TRACE_surf_resource_set_utilization(const char* type, const char* name, const char* resource,
+                                                     const char* category, double value, double now, double delta);
 XBT_PRIVATE void TRACE_surf_link_set_utilization(const char* resource, const char* category, double value, double now,
                                                  double delta);
 
index 6ad4889..a706875 100644 (file)
@@ -34,8 +34,8 @@ static void instr_event(double now, double delta, simgrid::instr::VariableType*
   variable->subEvent(now + delta, value);
 }
 
-static void TRACE_surf_resource_set_utilization(const char* type, const char* name, const char* resource,
-                                                const char* category, double value, double now, double delta)
+void TRACE_surf_resource_set_utilization(const char* type, const char* name, const char* resource, const char* category,
+                                         double value, double now, double delta)
 {
   // only trace resource utilization if resource is known by tracing mechanism
   container_t container = simgrid::instr::Container::byNameOrNull(resource);
@@ -65,9 +65,3 @@ void TRACE_surf_link_set_utilization(const char* resource, const char* category,
 {
   TRACE_surf_resource_set_utilization("LINK", "bandwidth_used", resource, category, value, now, delta);
 }
-
-/* TRACE_surf_host_set_utilization: entry point from SimGrid */
-void TRACE_surf_host_set_utilization(const char* resource, const char* category, double value, double now, double delta)
-{
-  TRACE_surf_resource_set_utilization("HOST", "power_used", resource, category, value, now, delta);
-}
index 320f777..bd2a534 100644 (file)
@@ -27,11 +27,6 @@ void CpuModel::update_actions_state_lazy(double now, double /*delta*/)
 
     CpuAction* action = static_cast<CpuAction*>(get_action_heap().pop());
     XBT_CDEBUG(surf_kernel, "Something happened to action %p", action);
-    if (TRACE_is_enabled()) {
-      Cpu* cpu = static_cast<Cpu*>(action->get_variable()->get_constraint(0)->get_id());
-      TRACE_surf_host_set_utilization(cpu->get_cname(), action->get_category(), action->get_variable()->get_value(),
-                                      action->get_last_update(), now - action->get_last_update());
-    }
 
     action->finish(kernel::resource::Action::State::done);
     XBT_CDEBUG(surf_kernel, "Action %p finished", action);
@@ -55,12 +50,6 @@ void CpuModel::update_actions_state_full(double now, double delta)
   for (auto it = std::begin(*get_running_action_set()); it != std::end(*get_running_action_set());) {
     CpuAction& action = static_cast<CpuAction&>(*it);
     ++it; // increment iterator here since the following calls to action.finish() may invalidate it
-    if (TRACE_is_enabled()) {
-      Cpu* cpu = static_cast<Cpu*>(action.get_variable()->get_constraint(0)->get_id());
-      TRACE_surf_host_set_utilization(cpu->get_cname(), action.get_category(), action.get_variable()->get_value(),
-                                      now - delta, delta);
-      TRACE_last_timestamp_to_dump = now - delta;
-    }
 
     action.update_remains(action.get_variable()->get_value() * delta);
 
@@ -189,8 +178,8 @@ void CpuAction::update_remains_lazy(double now)
 
     if (TRACE_is_enabled()) {
       Cpu* cpu = static_cast<Cpu*>(get_variable()->get_constraint(0)->get_id());
-      TRACE_surf_host_set_utilization(cpu->get_cname(), get_category(), get_last_value(), get_last_update(),
-                                      now - get_last_update());
+      TRACE_surf_resource_set_utilization("HOST", "power_used", cpu->get_cname(), get_category(), get_last_value(),
+                                          get_last_update(), now - get_last_update());
     }
     XBT_CDEBUG(surf_kernel, "Updating action(%p): remains is now %f", this, get_remains_no_update());
   }