-/* Copyright (c) 2010-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2021. 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. */
SIMGRID_REGISTER_PLUGIN(host_dvfs, "Dvfs support", &sg_host_dvfs_plugin_init)
-static simgrid::config::Flag<double> cfg_sampling_rate("plugin/dvfs/sampling-rate", {"plugin/dvfs/sampling_rate"},
- "How often should the dvfs plugin check whether the frequency needs to be changed?", 0.1,
- [](double val){if (val != 0.1) sg_host_dvfs_plugin_init();});
+static simgrid::config::Flag<double>
+ cfg_sampling_rate("plugin/dvfs/sampling-rate",
+ "How often should the dvfs plugin check whether the frequency needs to be changed?", 0.1,
+ [](double val) {
+ if (val != 0.1)
+ sg_host_dvfs_plugin_init();
+ });
static simgrid::config::Flag<std::string> cfg_governor("plugin/dvfs/governor",
"Which Governor should be used that adapts the CPU frequency?",
"performance",
- std::map<std::string, std::string>({
+ std::map<std::string, std::string, std::less<>>({
#if HAVE_SMPI
{"adagio", "TODO: Doc"},
#endif
});
static simgrid::config::Flag<int>
- cfg_min_pstate("plugin/dvfs/min-pstate", {"plugin/dvfs/min_pstate"},
+ cfg_min_pstate("plugin/dvfs/min-pstate",
"Which pstate is the minimum (and hence fastest) pstate for this governor?", 0);
static const int max_pstate_not_limited = -1;
static simgrid::config::Flag<int>
- cfg_max_pstate("plugin/dvfs/max-pstate", {"plugin/dvfs/max_pstate"},
+ cfg_max_pstate("plugin/dvfs/max-pstate",
"Which pstate is the maximum (and hence slowest) pstate for this governor?", max_pstate_not_limited);
/** @addtogroup SURF_plugin_load
const char* local_max_pstate_config = host_->get_property(cfg_max_pstate.get_name());
if (local_max_pstate_config != nullptr) {
- max_pstate = std::stod(local_max_pstate_config);
+ max_pstate = std::stoi(local_max_pstate_config);
}
xbt_assert(max_pstate <= host_->get_pstate_count() - 1, "Value for max_pstate too large!");
xbt_assert(min_pstate <= max_pstate, "min_pstate is larger than max_pstate!");
*/
class Performance : public Governor {
public:
- explicit Performance(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ using Governor::Governor;
std::string get_name() const override { return "Performance"; }
void update() override { get_host()->set_pstate(get_min_pstate()); }
*/
class Powersave : public Governor {
public:
- explicit Powersave(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ using Governor::Governor;
std::string get_name() const override { return "Powersave"; }
void update() override { get_host()->set_pstate(get_max_pstate()); }
double freq_up_threshold_ = 0.80;
public:
- explicit OnDemand(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ using Governor::Governor;
std::string get_name() const override { return "OnDemand"; }
void update() override
*/
// Load is now < freq_up_threshold; exclude pstate 0 (the fastest)
// because pstate 0 can only be selected if load > freq_up_threshold_
- int new_pstate = get_max_pstate() - load * (get_max_pstate() + 1);
+ int new_pstate = static_cast<int>(get_max_pstate() - load * (get_max_pstate() + 1));
if (new_pstate < get_min_pstate())
new_pstate = get_min_pstate();
get_host()->set_pstate(new_pstate);
double freq_down_threshold_ = .2;
public:
- explicit Conservative(simgrid::s4u::Host* ptr) : Governor(ptr) {}
+ using Governor::Governor;
std::string get_name() const override { return "Conservative"; }
void update() override
task_id = 0;
}
});
- simgrid::s4u::Exec::on_start.connect([this](simgrid::s4u::Actor const&, simgrid::s4u::Exec const& activity) {
+ simgrid::s4u::Exec::on_start.connect([this](simgrid::s4u::Exec const& activity) {
if (activity.get_host() == get_host())
pre_task();
});
- simgrid::s4u::Exec::on_completion.connect([this](simgrid::s4u::Actor const&, simgrid::s4u::Exec const& activity) {
+ simgrid::s4u::Exec::on_completion.connect([this](simgrid::s4u::Exec const& activity) {
// For more than one host (not yet supported), we can access the host via
- // simcalls_.front()->issuer->iface()->get_host()
+ // simcalls_.front()->issuer->get_iface()->get_host()
if (activity.get_host() == get_host() && iteration_running) {
comp_timer += activity.get_finish_time() - activity.get_start_time();
}
boost::algorithm::to_lower(dvfs_governor);
}
- auto governor = [&dvfs_governor, &daemon_proc]() {
- if (dvfs_governor == "conservative") {
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::Conservative(daemon_proc->get_host()));
- } else if (dvfs_governor == "ondemand") {
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::OnDemand(daemon_proc->get_host()));
- }
+ auto governor = [&dvfs_governor, &daemon_proc]() -> std::unique_ptr<simgrid::plugin::dvfs::Governor> {
+ if (dvfs_governor == "conservative")
+ return std::make_unique<simgrid::plugin::dvfs::Conservative>(daemon_proc->get_host());
+ if (dvfs_governor == "ondemand")
+ return std::make_unique<simgrid::plugin::dvfs::OnDemand>(daemon_proc->get_host());
#if HAVE_SMPI
- else if (dvfs_governor == "adagio") {
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::Adagio(daemon_proc->get_host()));
- }
+ if (dvfs_governor == "adagio")
+ return std::make_unique<simgrid::plugin::dvfs::Adagio>(daemon_proc->get_host());
#endif
- else if (dvfs_governor == "performance") {
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::Performance(daemon_proc->get_host()));
- } else if (dvfs_governor == "powersave") {
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::Powersave(daemon_proc->get_host()));
- } else {
+ if (dvfs_governor == "powersave")
+ return std::make_unique<simgrid::plugin::dvfs::Powersave>(daemon_proc->get_host());
+ if (dvfs_governor != "performance")
XBT_CRITICAL("No governor specified for host %s, falling back to Performance",
daemon_proc->get_host()->get_cname());
- return std::unique_ptr<simgrid::plugin::dvfs::Governor>(
- new simgrid::plugin::dvfs::Performance(daemon_proc->get_host()));
- }
+ return std::make_unique<simgrid::plugin::dvfs::Performance>(daemon_proc->get_host());
}();
while (true) {