Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Apply the default settings of 'smpi/buffering' too
[simgrid.git] / src / plugins / link_energy.cpp
index a0b7cd4..bdf842b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2017-2019. The SimGrid Team. All rights reserved.          */
 
 /* 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. */
@@ -22,12 +22,12 @@ SIMGRID_REGISTER_PLUGIN(link_energy, "Link energy consumption.", &sg_link_energy
  The energy consumption of a link depends directly on its current traffic load. Specify that consumption in your
  platform file as follows:
 
\verbatim
@verbatim
  <link id="SWITCH1" bandwidth="125Mbps" latency="5us" sharing_policy="SHARED" >
  <prop id="watt_range" value="100.0:200.0" />
  <prop id="watt_off" value="10" />
  </link>
\endverbatim
@endverbatim
 
  The first property means that when your link is switched on, but without anything to do, it will dissipate 100 Watts.
  If it's fully loaded, it will dissipate 200 Watts. If its load is at 50%, then it will dissipate 150 Watts.
@@ -72,6 +72,9 @@ simgrid::xbt::Extension<simgrid::s4u::Link, LinkEnergy> LinkEnergy::EXTENSION_ID
 
 void LinkEnergy::update()
 {
+  if (!inited_)
+    init_watts_range_list();
+
   double power = get_power();
   double now   = surf_get_clock();
   total_energy_ += power * (now - last_updated_);
@@ -80,7 +83,6 @@ void LinkEnergy::update()
 
 void LinkEnergy::init_watts_range_list()
 {
-
   if (inited_)
     return;
   inited_ = true;
@@ -105,17 +107,15 @@ void LinkEnergy::init_watts_range_list()
     /* max_power is the power consumed at 100% link load       */
     try {
       idle_ = std::stod(current_power_values.front());
-    } catch (std::invalid_argument& ia) {
+    } catch (const std::invalid_argument&) {
       throw std::invalid_argument(std::string("Invalid idle power value for link ") + this->link_->get_cname());
     }
 
     try {
       busy_ = std::stod(current_power_values.back());
-    } catch (std::invalid_argument& ia) {
+    } catch (const std::invalid_argument&) {
       throw std::invalid_argument(std::string("Invalid busy power value for link ") + this->link_->get_cname());
     }
-
-    update();
   }
 }
 
@@ -136,7 +136,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::simix::simcall(std::bind(&LinkEnergy::update, this));
+    simgrid::kernel::actor::simcall(std::bind(&LinkEnergy::update, this));
   return this->total_energy_;
 }
 } // namespace plugin
@@ -145,10 +145,11 @@ double LinkEnergy::get_consumed_energy()
 using simgrid::plugin::LinkEnergy;
 
 /* **************************** events  callback *************************** */
-static void on_communicate(simgrid::kernel::resource::NetworkAction* action, simgrid::s4u::Host*, simgrid::s4u::Host*)
+static void on_communicate(simgrid::kernel::resource::NetworkAction const& action, simgrid::s4u::Host*,
+                           simgrid::s4u::Host*)
 {
   XBT_DEBUG("onCommunicate is called");
-  for (simgrid::kernel::resource::LinkImpl* link : action->links()) {
+  for (simgrid::kernel::resource::LinkImpl* link : action.links()) {
 
     if (link == nullptr)
       continue;
@@ -178,9 +179,9 @@ int sg_link_energy_is_inited()
 {
   return LinkEnergy::EXTENSION_ID.valid();
 }
-/** \ingroup SURF_plugin_energy
- * \brief Enable energy plugin
- * \details Enable energy plugin to get joules consumption of each cpu. You should call this function before
+/** @ingroup SURF_plugin_energy
+ * @brief Enable energy plugin
+ * @details Enable energy plugin to get joules consumption of each cpu. You should call this function before
  * #MSG_init().
  */
 void sg_link_energy_plugin_init()
@@ -194,21 +195,22 @@ void sg_link_energy_plugin_init()
 
   simgrid::s4u::Link::on_creation.connect([](simgrid::s4u::Link& link) { link.extension_set(new LinkEnergy(&link)); });
 
-  simgrid::s4u::Link::on_state_change.connect([](simgrid::s4u::Link& link) { link.extension<LinkEnergy>()->update(); });
+  simgrid::s4u::Link::on_state_change.connect(
+      [](simgrid::s4u::Link const& link) { link.extension<LinkEnergy>()->update(); });
 
-  simgrid::s4u::Link::on_destruction.connect([](simgrid::s4u::Link& link) {
-    if (strcmp(link.get_cname(), "__loopback__"))
+  simgrid::s4u::Link::on_destruction.connect([](simgrid::s4u::Link const& link) {
+    if (link.get_name() != "__loopback__")
       XBT_INFO("Energy consumption of link '%s': %f Joules", link.get_cname(),
                link.extension<LinkEnergy>()->get_consumed_energy());
   });
 
-  simgrid::s4u::Link::on_communication_state_change.connect(
-      [](simgrid::kernel::resource::NetworkAction* action, simgrid::kernel::resource::Action::State /* previous */) {
-        for (simgrid::kernel::resource::LinkImpl* link : action->links()) {
-          if (link != nullptr)
-            link->piface_.extension<LinkEnergy>()->update();
-        }
-      });
+  simgrid::s4u::Link::on_communication_state_change.connect([](
+      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<LinkEnergy>()->update();
+    }
+  });
 
   simgrid::s4u::Link::on_communicate.connect(&on_communicate);
   simgrid::s4u::on_simulation_end.connect(&on_simulation_end);