Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The creation of the pimpl needs no simcall
[simgrid.git] / src / plugins / host_energy.cpp
index ec14e75..3a81ebe 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2010-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. */
@@ -134,6 +134,7 @@ public:
   double get_current_watts_value();
   double get_current_watts_value(double cpu_load);
   double get_consumed_energy();
+  double get_idle_consumption();
   double get_watt_min_at(int pstate);
   double get_watt_max_at(int pstate);
   void update();
@@ -212,6 +213,14 @@ HostEnergy::HostEnergy(simgrid::s4u::Host* ptr) : host_(ptr), last_updated_(surf
 
 HostEnergy::~HostEnergy() = default;
 
+double HostEnergy::get_idle_consumption()
+{
+  xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
+             host_->get_cname());
+
+  return power_range_watts_list_[0].idle_;
+}
+
 double HostEnergy::get_watt_min_at(int pstate)
 {
   xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
@@ -488,8 +497,9 @@ void sg_host_energy_plugin_init()
   simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
-      if (dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_))
-        host = dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_)->get_pm();
+      simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+      if (vm != nullptr)
+        host = vm->get_pm();
 
       host->extension<HostEnergy>()->update();
     }
@@ -526,6 +536,16 @@ double sg_host_get_consumed_energy(sg_host_t host)
   return host->extension<HostEnergy>()->get_consumed_energy();
 }
 
+/** @ingroup plugin_energy
+ *  @brief Get the amount of watt dissipated when the host is idling
+ */
+double sg_host_get_idle_consumption(sg_host_t host)
+{
+  xbt_assert(HostEnergy::EXTENSION_ID.valid(),
+             "The Energy plugin is not active. Please call sg_host_energy_plugin_init() during initialization.");
+  return host->extension<HostEnergy>()->get_idle_consumption();
+}
+
 /** @ingroup plugin_energy
  *  @brief Get the amount of watt dissipated at the given pstate when the host is idling
  */