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;
+ int new_pstate = max_pstate - load * max_pstate;
+ host->setPstate(new_pstate);
host->setPstate(max_pstate - load * max_pstate);
XBT_INFO("Changed to pstate %f -- check: %i", max_pstate - load * max_pstate, host->getPstate());
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();
};
}
/* **************************** 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()
+}