X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8baff708e757b3558ed33c6f0f83d20f868751f5..5198991bb329c947bd497b66b2d837959ce20ee6:/src/surf/plugins/host_dvfs.cpp diff --git a/src/surf/plugins/host_dvfs.cpp b/src/surf/plugins/host_dvfs.cpp index 6289449488..7ffaa7ca32 100644 --- a/src/surf/plugins/host_dvfs.cpp +++ b/src/surf/plugins/host_dvfs.cpp @@ -139,7 +139,6 @@ public: } } }; -} class HostDvfs { public: @@ -156,8 +155,9 @@ HostDvfs::HostDvfs(simgrid::s4u::Host* ptr) {} HostDvfs::~HostDvfs() = default; } } +} -using simgrid::plugin::HostDvfs; +using simgrid::plugin::dvfs::HostDvfs; /* **************************** events callback *************************** */ static void on_host_added(simgrid::s4u::Host& host) @@ -186,20 +186,26 @@ static void on_host_added(simgrid::s4u::Host& host) boost::algorithm::to_lower(dvfs_governor); } - // FIXME This is really ugly. When do we free the governor? Actually, never, because - // daemons never stop to run - they will be killed when the simulation is over. :( - simgrid::plugin::dvfs::Governor* governor; - if (dvfs_governor == "conservative") { - governor = new simgrid::plugin::dvfs::Conservative(daemonProc->getHost()); - } else if (dvfs_governor == "ondemand") { - governor = new simgrid::plugin::dvfs::OnDemand(daemonProc->getHost()); - } else if (dvfs_governor == "performance") { - governor = new simgrid::plugin::dvfs::Performance(daemonProc->getHost()); - } else if (dvfs_governor == "powersave") { - governor = new simgrid::plugin::dvfs::Powersave(daemonProc->getHost()); - } else { - XBT_CRITICAL("No governor specified for host %s", daemonProc->getHost()->getCname()); - } + auto governor = [&dvfs_governor, &daemonProc]() { + if (dvfs_governor == "conservative") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Conservative(daemonProc->getHost())); + } else if (dvfs_governor == "ondemand") { + return std::unique_ptr( + new simgrid::plugin::dvfs::OnDemand(daemonProc->getHost())); + } else if (dvfs_governor == "performance") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Performance(daemonProc->getHost())); + } else if (dvfs_governor == "powersave") { + return std::unique_ptr( + new simgrid::plugin::dvfs::Powersave(daemonProc->getHost())); + } else { + XBT_CRITICAL("No governor specified for host %s, falling back to Performance", + daemonProc->getHost()->getCname()); + return std::unique_ptr( + new simgrid::plugin::dvfs::Performance(daemonProc->getHost())); + } + }(); while (1) { // Sleep *before* updating; important for startup (i.e., t = 0).