X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/39c935d6d5ee86d153f6f7e6a10d723ae7c57f6f..4669bd296b7e363e8b25cf53990622c51c33c373:/src/plugins/link_load.cpp diff --git a/src/plugins/link_load.cpp b/src/plugins/link_load.cpp index 2794b47659..5f60b67b8d 100644 --- a/src/plugins/link_load.cpp +++ b/src/plugins/link_load.cpp @@ -3,12 +3,11 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "simgrid/host.h" -#include "simgrid/plugins/load.h" -#include "simgrid/s4u/Link.hpp" +#include +#include + +#include "src/kernel/activity/CommImpl.hpp" #include "src/surf/network_interface.hpp" -#include "src/surf/surf_interface.hpp" -#include "surf/surf.hpp" #include @@ -39,11 +38,19 @@ namespace simgrid { namespace plugin { class LinkLoad { + s4u::Link* link_{}; /*< The link onto which this data is attached*/ + bool is_tracked_{false}; /* EXTENSION_ID; + static xbt::Extension EXTENSION_ID; - explicit LinkLoad(simgrid::s4u::Link* ptr); - ~LinkLoad() = default; + explicit LinkLoad(s4u::Link* ptr); void track(); void untrack(); @@ -52,32 +59,22 @@ public: double get_average_bytes(); /// Getter methods. - bool is_tracked() const; + bool is_tracked() const { return is_tracked_; } double get_cumulated_bytes(); double get_min_bytes_per_second(); double get_max_bytes_per_second(); - -private: - s4u::Link* link_{}; /*< The link onto which this data is attached*/ - bool is_tracked_{false}; /* LinkLoad::EXTENSION_ID; -LinkLoad::LinkLoad(simgrid::s4u::Link* ptr) : link_(ptr), is_tracked_(false) +LinkLoad::LinkLoad(s4u::Link* ptr) : link_(ptr), is_tracked_(false) { XBT_DEBUG("Instantiating a LinkLoad for link '%s'", link_->get_cname()); } void LinkLoad::track() { - xbt_assert(!is_tracked_, "Trying to track load of link '%s' while it is already tracked, aborting.", + xbt_assert(not is_tracked_, "Trying to track load of link '%s' while it is already tracked, aborting.", link_->get_cname()); XBT_DEBUG("Tracking load of link '%s'", link_->get_cname()); @@ -102,7 +99,7 @@ void LinkLoad::reset() max_bytes_per_second_ = std::numeric_limits::lowest(); XBT_DEBUG("min_bytes_per_second_ = %g", min_bytes_per_second_); XBT_DEBUG("max_bytes_per_second_ = %g", max_bytes_per_second_); - last_reset_ = surf_get_clock(); + last_reset_ = simgrid::s4u::Engine::get_clock(); last_updated_ = last_reset_; } @@ -115,7 +112,7 @@ void LinkLoad::update() link_->get_cname()); double current_instantaneous_bytes_per_second = link_->get_usage(); - double now = surf_get_clock(); + double now = simgrid::s4u::Engine::get_clock(); // Update minimum/maximum observed values if needed min_bytes_per_second_ = std::min(min_bytes_per_second_, current_instantaneous_bytes_per_second); @@ -132,10 +129,6 @@ void LinkLoad::update() last_updated_ = now; } -bool LinkLoad::is_tracked() const -{ - return is_tracked_; -} double LinkLoad::get_cumulated_bytes() { update(); @@ -156,7 +149,7 @@ double LinkLoad::get_average_bytes() { update(); - double now = surf_get_clock(); + double now = simgrid::s4u::Engine::get_clock(); if (now > last_reset_) return cumulated_bytes_ / (now - last_reset_); else @@ -169,16 +162,14 @@ double LinkLoad::get_average_bytes() using simgrid::plugin::LinkLoad; /* **************************** events callback *************************** */ -static void on_communicate(const simgrid::kernel::resource::NetworkAction& action) +static void on_communication(const simgrid::kernel::activity::CommImpl& comm) { - XBT_DEBUG("on_communicate is called"); - for (auto* link : action.get_links()) { - if (link == nullptr || link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) - continue; - - auto link_load = link->get_iface()->extension(); - if (link_load->is_tracked()) { - link_load->update(); + for (const auto* link : comm.get_traversed_links()) { + if (link != nullptr && link->get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI) { + auto* link_load = link->extension(); + XBT_DEBUG("Update %s on Comm Start/End", link->get_cname()); + if (link_load->is_tracked()) + link_load->update(); } } } @@ -192,8 +183,9 @@ static void on_communicate(const simgrid::kernel::resource::NetworkAction& actio */ void sg_link_load_plugin_init() { - xbt_assert(sg_host_count() == 0, "Please call sg_link_load_plugin_init() BEFORE initializing the platform."); - xbt_assert(!LinkLoad::EXTENSION_ID.valid(), "Double call to sg_link_load_plugin_init. Aborting."); + xbt_assert(simgrid::s4u::Engine::get_instance()->get_host_count() == 0, + "Please call sg_link_load_plugin_init() BEFORE initializing the platform."); + xbt_assert(not LinkLoad::EXTENSION_ID.valid(), "Double call to sg_link_load_plugin_init. Aborting."); LinkLoad::EXTENSION_ID = simgrid::s4u::Link::extension_create(); // Attach new LinkLoad links created in the future. @@ -207,7 +199,9 @@ void sg_link_load_plugin_init() }); // Call this plugin on some of the links' events. - simgrid::s4u::Link::on_communicate.connect(&on_communicate); + simgrid::kernel::activity::CommImpl::on_start.connect(&on_communication); + simgrid::kernel::activity::CommImpl::on_completion.connect(&on_communication); + simgrid::s4u::Link::on_state_change.connect([](simgrid::s4u::Link const& link) { if (link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI) { auto link_load = link.extension();