double sampling_rate;
explicit Governor(simgrid::s4u::Host* ptr) : host(ptr) { init(); }
+ virtual ~Governor() = default;
void init()
{
{
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());
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 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()
+}