-/* Copyright (c) 2010, 2012-2016. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010, 2012-2018. 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. */
public:
double sampling_rate;
- Governor(simgrid::s4u::Host* ptr) : host(ptr) { init(); }
+ explicit Governor(simgrid::s4u::Host* ptr) : host(ptr) { init(); }
+ virtual ~Governor() = default;
void init()
{
class Performance : public Governor {
public:
- Performance(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ explicit Performance(simgrid::s4u::Host* ptr) : Governor(ptr) {}
void update() { host->setPstate(0); }
};
class Powersave : public Governor {
public:
- Powersave(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ explicit Powersave(simgrid::s4u::Host* ptr) : Governor(ptr) {}
void update() { host->setPstate(host->getPstatesCount() - 1); }
};
double freq_up_threshold = 0.95;
public:
- OnDemand(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ explicit OnDemand(simgrid::s4u::Host* ptr) : Governor(ptr) {}
void update()
{
double load = sg_host_get_current_load(host);
- if (load > freq_up_threshold) {
+ // FIXME I don't like that we multiply with the getCoreCount() just here...
+ if (load*host->getCoreCount() > freq_up_threshold) {
host->setPstate(0); /* Run at max. performance! */
XBT_INFO("Changed to pstate %f", 0.0);
} else {
/* The actual implementation uses a formula here: (See Kernel file cpufreq_ondemand.c:158)
*
- * freq_next = min_f + load * (max_f - min_f) / 100;
+ * freq_next = min_f + load * (max_f - min_f) / 100
*
* So they assume that frequency increases by 100 MHz. We will just use
- * lowest_pstate - load*pstatesCount();
+ * lowest_pstate - load*pstatesCount()
*/
int max_pstate = host->getPstatesCount() - 1;
double freq_down_threshold = .2;
public:
- Conservative(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ explicit Conservative(simgrid::s4u::Host* ptr) : Governor(ptr) {}
void update()
{
- double load = sg_host_get_current_load(host);
+ double load = sg_host_get_current_load(host)*host->getCoreCount();
int pstate = host->getPstate();
if (load > freq_up_threshold) {
public:
static simgrid::xbt::Extension<simgrid::s4u::Host, HostDvfs> EXTENSION_ID;
- explicit HostDvfs(simgrid::s4u::Host* ptr);
+ explicit HostDvfs(simgrid::s4u::Host*);
~HostDvfs();
};
if (dynamic_cast<simgrid::s4u::VirtualMachine*>(&host)) // Ignore virtual machines
return;
- std::string name = "dvfs-daemon-" + host.getName();
+ std::string name = std::string("dvfs-daemon-") + host.getCname();
simgrid::s4u::ActorPtr daemon = simgrid::s4u::Actor::createActor(name.c_str(), &host, []() {
/**
* This lambda function is the function the actor (daemon) will execute
}
/* **************************** Public interface *************************** */
-SG_BEGIN_DECL()
+extern "C" {
/** \ingroup SURF_plugin_load
* \brief Initializes the HostDvfs plugin
xbt_cfg_register_string("plugin/dvfs/governor", "performance", nullptr,
"Which Governor should be used that adapts the CPU frequency?");
}
-
-SG_END_DECL()
+}