From: Frederic Suter Date: Mon, 14 May 2018 18:23:51 +0000 (+0200) Subject: use signal to trace link usage X-Git-Tag: v3.20~230^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ff3ef77d2ef796e7e5e8c384672f3057997cec4b use signal to trace link usage + Still have to deal with NS3 + trigger the signal only when the state changes --- diff --git a/src/instr/instr_platform.cpp b/src/instr/instr_platform.cpp index e1b1fa85f6..c445875d57 100644 --- a/src/instr/instr_platform.cpp +++ b/src/instr/instr_platform.cpp @@ -240,6 +240,19 @@ static void instr_cpu_action_on_state_change(simgrid::surf::CpuAction* action, SIMIX_get_clock() - action->get_last_update()); } +static void instr_link_on_communication_state_change(simgrid::kernel::resource::NetworkAction* action) +{ + int n = action->get_variable()->get_number_of_constraint(); + + for (int i = 0; i < n; i++) { + simgrid::kernel::lmm::Constraint* constraint = action->get_variable()->get_constraint(i); + simgrid::kernel::resource::LinkImpl* link = static_cast(constraint->get_id()); + double value = action->get_variable()->get_value() * action->get_variable()->get_constraint_weight(i); + TRACE_surf_resource_set_utilization("LINK", "bandwidth_used", link->get_cname(), action->get_category(), 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()) @@ -363,6 +376,7 @@ void instr_define_callbacks() simgrid::kernel::routing::NetPoint::onCreation.connect(instr_netpoint_on_creation); simgrid::surf::CpuAction::onStateChange.connect(instr_cpu_action_on_state_change); + simgrid::s4u::Link::on_communication_state_change.connect(instr_link_on_communication_state_change); if (TRACE_actor_is_enabled()) { simgrid::s4u::Actor::on_creation.connect(instr_actor_on_creation); diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index 9e1db06625..4fde97afa7 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -9,7 +9,6 @@ #include "network_cm02.hpp" #include "simgrid/s4u/Host.hpp" #include "simgrid/sg_config.hpp" -#include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals #include "src/surf/surf_interface.hpp" #include "surf/surf.hpp" @@ -59,7 +58,6 @@ void surf_network_model_init_LegrandVelho() /* } */ void surf_network_model_init_CM02() { - if (surf_network_model) return; @@ -163,17 +161,6 @@ void NetworkCm02Model::update_actions_state_lazy(double now, double /*delta*/) NetworkCm02Action* action = static_cast(get_action_heap().pop()); XBT_DEBUG("Something happened to action %p", action); - if (TRACE_is_enabled()) { - int n = action->get_variable()->get_number_of_constraint(); - - for (int i = 0; i < n; i++){ - kernel::lmm::Constraint* constraint = action->get_variable()->get_constraint(i); - NetworkCm02Link* link = static_cast(constraint->get_id()); - double value = action->get_variable()->get_value() * action->get_variable()->get_constraint_weight(i); - TRACE_surf_link_set_utilization(link->get_cname(), action->get_category(), value, action->get_last_update(), - now - action->get_last_update()); - } - } // if I am wearing a latency hat if (action->get_type() == ActionHeap::Type::latency) { @@ -211,17 +198,7 @@ void NetworkCm02Model::update_actions_state_full(double now, double delta) if (action.latency_ <= 0.0 && not action.is_suspended()) get_maxmin_system()->update_variable_weight(action.get_variable(), action.weight_); } - if (TRACE_is_enabled()) { - int n = action.get_variable()->get_number_of_constraint(); - for (int i = 0; i < n; i++) { - kernel::lmm::Constraint* constraint = action.get_variable()->get_constraint(i); - NetworkCm02Link* link = static_cast(constraint->get_id()); - TRACE_surf_link_set_utilization( - link->get_cname(), action.get_category(), - (action.get_variable()->get_value() * action.get_variable()->get_constraint_weight(i)), - action.get_last_update(), now - action.get_last_update()); - } - } + if (not action.get_variable()->get_number_of_constraint()) { /* There is actually no link used, hence an infinite bandwidth. This happens often when using models like * vivaldi. In such case, just make sure that the action completes immediately. diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 7fdfce0d64..7391e1d8c4 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -216,8 +216,10 @@ void LinkImpl::setLatencyTrace(tmgr_trace_t trace) void NetworkAction::set_state(Action::State state) { + Action::State previous = get_state(); Action::set_state(state); - s4u::Link::on_communication_state_change(this); + if (previous != state) // Trigger only if the state changed + s4u::Link::on_communication_state_change(this); } /** @brief returns a list of all Links that this action is using */