-/* Copyright (c) 2010-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2020. 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. */
// Makes sure that this plugin can be activated from the command line with ``--cfg=plugin:host_load``
SIMGRID_REGISTER_PLUGIN(host_load, "Cpu load", &sg_host_load_plugin_init)
-/** @defgroup plugin_host_load
-
- @rst
-
-Simple plugin that monitors the current load for each host.
+/** @defgroup plugin_host_load Simple plugin that monitors the current load for each host.
+ @beginrst
In addition, this constitutes a good introductory example on how to write a plugin.
It attaches an extension to each host to store some data, and places callbacks in the following signals:
- :cpp:member:`simgrid::s4u::Host::on_creation`: Attach a new extension to the newly created host.
- :cpp:member:`simgrid::s4u::Exec::on_start`: Make note that a new execution started, increasing the load.
- :cpp:member:`simgrid::s4u::Exec::on_completion`: Make note that an execution completed, decreasing the load.
- - :cpp:member:`simgrid::s4u::Host::on_state_change`: Do what is appropriate when the host gets suspended, turned off or similar.
+ - :cpp:member:`simgrid::s4u::Host::on_state_change`: Do what is appropriate when the host gets suspended, turned off
+ or similar.
- :cpp:member:`simgrid::s4u::Host::on_speed_change`: Do what is appropriate when the DVFS is modified.
Note that extensions are automatically destroyed when the host gets destroyed.
, last_updated_(surf_get_clock())
, last_reset_(surf_get_clock())
, current_speed_(host_->get_speed())
- , current_flops_(host_->pimpl_cpu->get_constraint()->get_usage())
- , theor_max_flops_(0)
+ , current_flops_(host_->get_load())
{
}
~HostLoad() = default;
auto current_iter = iter;
++iter;
- if (action != nullptr && action->get_finish_time() != now && activity->state_ == e_smx_state_t::SIMIX_RUNNING) {
+ if (action != nullptr && action->get_finish_time() != now && activity->state_ == kernel::activity::State::RUNNING) {
if (remaining_cost_after_last_update == activity_uninitialized_remaining_cost) {
remaining_cost_after_last_update = action->get_cost();
}
double computed_flops_since_last_update = remaining_cost_after_last_update - /*remaining now*/activity->get_remaining();
computed_flops_ += computed_flops_since_last_update;
remaining_cost_after_last_update = activity->get_remaining();
- }
- else if (activity->state_ == e_smx_state_t::SIMIX_DONE) {
+ } else if (activity->state_ == kernel::activity::State::DONE) {
computed_flops_ += remaining_cost_after_last_update;
current_activities.erase(current_iter);
}
/* Current flop per second computed by the cpu; current_flops = k * pstate_speed_in_flops, k @in {0, 1, ..., cores-1}
* designates number of active cores; will be 0 if CPU is currently idle */
- current_flops_ = host_->pimpl_cpu->get_constraint()->get_usage();
+ current_flops_ = host_->get_load();
if (current_flops_ == 0) {
idle_time_ += (now - last_updated_);
idle_time_ = 0;
computed_flops_ = 0;
theor_max_flops_ = 0;
- current_flops_ = host_->pimpl_cpu->get_constraint()->get_usage();
+ current_flops_ = host_->get_load();
current_speed_ = host_->get_speed();
}
} // namespace plugin
simgrid::s4u::Exec::on_start.connect([](simgrid::s4u::Actor const&, simgrid::s4u::Exec const& activity) {
if (activity.get_host_number() == 1) { // We only run on one host
simgrid::s4u::Host* host = activity.get_host();
- simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+ const simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
if (vm != nullptr)
host = vm->get_pm();
xbt_assert(host != nullptr);
simgrid::s4u::Exec::on_completion.connect([](simgrid::s4u::Actor const&, simgrid::s4u::Exec const& activity) {
if (activity.get_host_number() == 1) { // We only run on one host
simgrid::s4u::Host* host = activity.get_host();
- simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+ const simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
if (vm != nullptr)
host = vm->get_pm();
xbt_assert(host != nullptr);
/** @brief Returns the current load of that host, as a ratio = achieved_flops / (core_current_speed * core_amount)
* @ingroup plugin_host_load
*/
-double sg_host_get_current_load(sg_host_t host)
+double sg_host_get_current_load(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");
/** @brief Returns the current load of that host
* @ingroup plugin_host_load
*/
-double sg_host_get_avg_load(sg_host_t host)
+double sg_host_get_avg_load(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");
/** @brief Returns the time this host was idle since the last reset
* @ingroup plugin_host_load
*/
-double sg_host_get_idle_time(sg_host_t host)
+double sg_host_get_idle_time(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");
/** @brief Returns the time this host was idle since the beginning of the simulation
* @ingroup plugin_host_load
*/
-double sg_host_get_total_idle_time(sg_host_t host)
+double sg_host_get_total_idle_time(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");
/** @brief Returns the amount of flops computed by that host since the last reset
* @ingroup plugin_host_load
*/
-double sg_host_get_computed_flops(sg_host_t host)
+double sg_host_get_computed_flops(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");
/** @brief Resets the idle time and flops amount of that host
* @ingroup plugin_host_load
*/
-void sg_host_load_reset(sg_host_t host)
+void sg_host_load_reset(const_sg_host_t host)
{
xbt_assert(HostLoad::EXTENSION_ID.valid(), "Please sg_host_load_plugin_init() to initialize this plugin.");