-/* Copyright (c) 2010, 2012-2016. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2017. 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. */
#include "src/plugins/vm/VirtualMachineImpl.hpp"
#include "src/surf/cpu_interface.hpp"
+#include "simgrid/s4u/Engine.hpp"
+
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
-#include <simgrid/s4u/engine.hpp>
#include <string>
#include <utility>
#include <vector>
-/** @addtogroup SURF_plugin_load
+/** @addtogroup plugin_load
This plugin makes it very simple for users to obtain the current load for each host.
*/
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_plugin_load, surf, "Logging specific to the SURF HostLoad plugin");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_plugin_load, surf, "Logging specific to the HostLoad plugin");
namespace simgrid {
namespace plugin {
double getCurrentLoad();
double getComputedFlops();
+ double getAverageLoad();
void update();
void reset();
private:
simgrid::s4u::Host* host = nullptr;
double last_updated = 0;
+ double last_reset = 0;
double current_flops = 0;
double computed_flops = 0;
};
simgrid::xbt::Extension<simgrid::s4u::Host, HostLoad> HostLoad::EXTENSION_ID;
HostLoad::HostLoad(simgrid::s4u::Host* ptr)
- : host(ptr), last_updated(surf_get_clock()), current_flops(lmm_constraint_get_usage(host->pimpl_cpu->constraint()))
+ : host(ptr)
+ , last_updated(surf_get_clock())
+ , last_reset(surf_get_clock())
+ , current_flops(lmm_constraint_get_usage(host->pimpl_cpu->constraint()))
{
}
double HostLoad::getCurrentLoad()
{
- return current_flops / (host->speed() * host->coreCount());
+ return current_flops / (host->getSpeed() * host->getCoreCount());
+}
+
+double HostLoad::getAverageLoad()
+{
+ return getComputedFlops() / (host->getSpeed() * host->getCoreCount() * (surf_get_clock() - last_reset));
}
double HostLoad::getComputedFlops()
void HostLoad::reset()
{
last_updated = surf_get_clock();
+ last_reset = surf_get_clock();
computed_flops = 0;
}
}
/* This callback is called when an action (computation, idle, ...) terminates */
static void onActionStateChange(simgrid::surf::CpuAction* action, simgrid::surf::Action::State previous)
{
- for (simgrid::surf::Cpu* cpu : action->cpus()) {
+ for (simgrid::surf::Cpu* const& cpu : action->cpus()) {
simgrid::s4u::Host* host = cpu->getHost();
if (host != nullptr) {
}
/* **************************** Public interface *************************** */
-SG_BEGIN_DECL()
+extern "C" {
-/** \ingroup SURF_plugin_load
+/** \ingroup plugin_load
* \brief Initializes the HostLoad plugin
* \details The HostLoad plugin provides an API to get the current load of each host.
*/
/** @brief Returns the current load of the host passed as argument
*
- * See also @ref SURF_plugin_load
+ * See also @ref plugin_load
*/
double sg_host_get_current_load(sg_host_t host)
{
host->extension<HostLoad>()->reset();
}
-
-SG_END_DECL()
+}