From: Frederic Suter Date: Thu, 10 May 2018 18:17:15 +0000 (+0200) Subject: start to use surf signals to trace resource usage X-Git-Tag: v3.20~257 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/043d89009e86d407912e1165c43eb92c96dcbcbe start to use surf signals to trace resource usage 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) --- diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index 2e13b1a0f1..a6800a3e1a 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -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(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); diff --git a/src/instr/instr_private.hpp b/src/instr/instr_private.hpp index 20aa187c61..4e69e7875d 100644 --- a/src/instr/instr_private.hpp +++ b/src/instr/instr_private.hpp @@ -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); diff --git a/src/instr/instr_resource_utilization.cpp b/src/instr/instr_resource_utilization.cpp index 6ad48891ec..a7068756cf 100644 --- a/src/instr/instr_resource_utilization.cpp +++ b/src/instr/instr_resource_utilization.cpp @@ -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); -} diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index 320f77771f..bd2a534913 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -27,11 +27,6 @@ void CpuModel::update_actions_state_lazy(double now, double /*delta*/) CpuAction* action = static_cast(get_action_heap().pop()); XBT_CDEBUG(surf_kernel, "Something happened to action %p", action); - if (TRACE_is_enabled()) { - Cpu* cpu = static_cast(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(*it); ++it; // increment iterator here since the following calls to action.finish() may invalidate it - if (TRACE_is_enabled()) { - Cpu* cpu = static_cast(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(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()); }