X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/53f36dc53dfef67528460488c6d8ee3913153968..a9442180e9103da547f06d6a5d826cb4c9af3627:/src/plugins/link_energy.cpp
diff --git a/src/plugins/link_energy.cpp b/src/plugins/link_energy.cpp
index 20c9873599..9653438d8f 100644
--- a/src/plugins/link_energy.cpp
+++ b/src/plugins/link_energy.cpp
@@ -3,6 +3,7 @@
/* 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/Exception.hpp"
#include "simgrid/plugins/energy.h"
#include "simgrid/s4u/Engine.hpp"
#include "src/surf/network_interface.hpp"
@@ -14,8 +15,7 @@
SIMGRID_REGISTER_PLUGIN(link_energy, "Link energy consumption.", &sg_link_energy_plugin_init)
-/** @addtogroup SURF_plugin_energy
-
+/** @defgroup plugin_link_energy
This is the link energy plugin, accounting for the dissipated energy in the simulated platform.
@@ -24,8 +24,8 @@ SIMGRID_REGISTER_PLUGIN(link_energy, "Link energy consumption.", &sg_link_energy
@verbatim
-
-
+
+
@endverbatim
@@ -34,8 +34,7 @@ SIMGRID_REGISTER_PLUGIN(link_energy, "Link energy consumption.", &sg_link_energy
The second property means that when your host is turned off, it will dissipate only 10 Watts (please note that these
values are arbitrary).
- To simulate the energy-related elements, first call the simgrid#energy#sg_link_energy_plugin_init() before your
- #MSG_init(),
+ To simulate the energy-related elements, first call the sg_link_energy_plugin_init() before loading the platform
and then use the following function to retrieve the consumption of a given link: sg_link_get_consumed_energy().
*/
@@ -58,7 +57,7 @@ public:
private:
double get_power();
- simgrid::s4u::Link* link_{};
+ s4u::Link* link_{};
bool inited_{false};
double idle_{0.0};
@@ -68,7 +67,7 @@ private:
double last_updated_{0.0}; /*< Timestamp of the last energy update event*/
};
-simgrid::xbt::Extension LinkEnergy::EXTENSION_ID;
+xbt::Extension LinkEnergy::EXTENSION_ID;
void LinkEnergy::update()
{
@@ -87,7 +86,12 @@ void LinkEnergy::init_watts_range_list()
return;
inited_ = true;
- const char* all_power_values_str = this->link_->get_property("watt_range");
+ const char* all_power_values_str = this->link_->get_property("wattage_range");
+ if (all_power_values_str == nullptr) {
+ all_power_values_str = this->link_->get_property("watt_range");
+ if (all_power_values_str != nullptr)
+ XBT_WARN("Please rename the 'watt_range' property of link %s into 'wattage_range'.", link_->get_cname());
+ }
if (all_power_values_str == nullptr)
return;
@@ -121,7 +125,6 @@ void LinkEnergy::init_watts_range_list()
double LinkEnergy::get_power()
{
-
if (!inited_)
return 0.0;
@@ -136,7 +139,7 @@ double LinkEnergy::get_power()
double LinkEnergy::get_consumed_energy()
{
if (last_updated_ < surf_get_clock()) // We need to simcall this as it modifies the environment
- simgrid::kernel::actor::simcall(std::bind(&LinkEnergy::update, this));
+ kernel::actor::simcall(std::bind(&LinkEnergy::update, this));
return this->total_energy_;
}
} // namespace plugin
@@ -150,12 +153,11 @@ static void on_communicate(simgrid::kernel::resource::NetworkAction const& actio
{
XBT_DEBUG("onCommunicate is called");
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
-
if (link == nullptr)
continue;
XBT_DEBUG("Update link %s", link->get_cname());
- LinkEnergy* link_energy = link->piface_.extension();
+ LinkEnergy* link_energy = link->get_iface()->extension();
link_energy->init_watts_range_list();
link_energy->update();
}
@@ -179,10 +181,10 @@ int sg_link_energy_is_inited()
{
return LinkEnergy::EXTENSION_ID.valid();
}
-/** @ingroup SURF_plugin_energy
+/** @ingroup plugin_link_energy
* @brief Enable energy plugin
* @details Enable energy plugin to get joules consumption of each cpu. You should call this function before
- * #MSG_init().
+ * loading your platform.
*/
void sg_link_energy_plugin_init()
{
@@ -207,7 +209,7 @@ void sg_link_energy_plugin_init()
simgrid::kernel::resource::NetworkAction const& action, simgrid::kernel::resource::Action::State /* previous */) {
for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
if (link != nullptr)
- link->piface_.extension()->update();
+ link->get_iface()->extension()->update();
}
});
@@ -215,7 +217,7 @@ void sg_link_energy_plugin_init()
simgrid::s4u::Engine::on_simulation_end.connect(&on_simulation_end);
}
-/** @ingroup plugin_energy
+/** @ingroup plugin_link_energy
* @brief Returns the total energy consumed by the link so far (in Joules)
*
* Please note that since the consumption is lazily updated, it may require a simcall to update it.
@@ -224,5 +226,8 @@ void sg_link_energy_plugin_init()
*/
double sg_link_get_consumed_energy(sg_link_t link)
{
+ if (not LinkEnergy::EXTENSION_ID.valid())
+ throw simgrid::xbt::InitializationError("The Energy plugin is not active. Please call sg_link_energy_plugin_init() "
+ "before calling sg_link_get_consumed_energy().");
return link->extension()->get_consumed_energy();
}