~HostEnergy();
double get_current_watts_value();
- double get_current_watts_value(double cpu_load);
+ double get_current_watts_value(double cpu_load) const;
double get_consumed_energy();
- double get_watt_idle_at(int pstate);
- double get_watt_min_at(int pstate);
- double get_watt_max_at(int pstate);
- double get_power_range_slope_at(int pstate);
- double get_last_update_time() { return last_updated_; }
+ double get_watt_idle_at(int pstate) const;
+ double get_watt_min_at(int pstate) const;
+ double get_watt_max_at(int pstate) const;
+ double get_power_range_slope_at(int pstate) const;
+ double get_last_update_time() const { return last_updated_; }
void update();
};
HostEnergy::~HostEnergy() = default;
-double HostEnergy::get_watt_idle_at(int pstate)
+double HostEnergy::get_watt_idle_at(int pstate) const
{
xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
host_->get_cname());
return power_range_watts_list_[pstate].idle_;
}
-double HostEnergy::get_watt_min_at(int pstate)
+double HostEnergy::get_watt_min_at(int pstate) const
{
xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
host_->get_cname());
return power_range_watts_list_[pstate].epsilon_;
}
-double HostEnergy::get_watt_max_at(int pstate)
+double HostEnergy::get_watt_max_at(int pstate) const
{
xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
host_->get_cname());
return power_range_watts_list_[pstate].max_;
}
-double HostEnergy::get_power_range_slope_at(int pstate)
+double HostEnergy::get_power_range_slope_at(int pstate) const
{
xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
host_->get_cname());
*
* Whether the host is ON or OFF is not taken into account.
*/
-double HostEnergy::get_current_watts_value(double cpu_load)
+double HostEnergy::get_current_watts_value(double cpu_load) const
{
xbt_assert(not power_range_watts_list_.empty(), "No power range properties specified for host %s",
host_->get_cname());
host_->get_pstate_count());
// XBT_ATTRIB_DEPRECATED_v328: putting this macro name here so that we find it during the deprecation cleanups
- std::string msg = std::string("DEPRECATION WARNING: Property 'watt_per_state' will only work until v3.28.\n");
+ std::string msg = "DEPRECATION WARNING: Property 'watt_per_state' will only work until v3.28.\n";
msg += std::string("The old syntax 'Idle:OneCore:AllCores' must be converted into 'Idle:Epsilon:AllCores' to "
"properly model the consumption of non-whole tasks on mono-core hosts. Here are the values to "
"use for host '") +
host = vm->get_pm();
// Get the host_energy extension for the relevant host
- HostEnergy* host_energy = host->extension<HostEnergy>();
+ auto* host_energy = host->extension<HostEnergy>();
if (host_energy->get_last_update_time() < surf_get_clock())
host_energy->update();
if (dynamic_cast<simgrid::s4u::VirtualMachine const*>(&host)) // Ignore virtual machines
return;
- HostEnergy* host_energy = host.extension<HostEnergy>();
+ auto* host_energy = host.extension<HostEnergy>();
host_energy->update();
}
static void on_simulation_end()
{
- std::vector<simgrid::s4u::Host*> hosts = simgrid::s4u::Engine::get_instance()->get_all_hosts();
-
double total_energy = 0.0; // Total energy consumption (whole platform)
double used_hosts_energy = 0.0; // Energy consumed by hosts that computed something
- for (size_t i = 0; i < hosts.size(); i++) {
- if (dynamic_cast<simgrid::s4u::VirtualMachine*>(hosts[i]) == nullptr) { // Ignore virtual machines
- double energy = hosts[i]->extension<HostEnergy>()->get_consumed_energy();
+ for (simgrid::s4u::Host const* host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) {
+ if (host && dynamic_cast<const simgrid::s4u::VirtualMachine*>(host) == nullptr) { // Ignore virtual machines
+ double energy = host->extension<HostEnergy>()->get_consumed_energy();
total_energy += energy;
- if (hosts[i]->extension<HostEnergy>()->host_was_used_)
+ if (host->extension<HostEnergy>()->host_was_used_)
used_hosts_energy += energy;
}
}
// that the next trigger would be the 2nd compute, hence ignoring the idle time
// during the recv call. By updating at the beginning of a compute, we can
// fix that. (If the cpu is not idle, this is not required.)
- simgrid::s4u::Exec::on_start.connect([](simgrid::s4u::Actor const&, simgrid::s4u::Exec const& activity) {
+ simgrid::s4u::Exec::on_start.connect([](simgrid::s4u::Exec const& activity) {
if (activity.get_host_number() == 1) { // We only run on one host
simgrid::s4u::Host* host = activity.get_host();
const simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);