X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bf893303cdcaf2d6a2a93116e6b86570a1d768e4..b6be4a786958974306e8f7b18eae6f1f77ebd4ee:/src/surf/plugins/host_load.cpp diff --git a/src/surf/plugins/host_load.cpp b/src/surf/plugins/host_load.cpp index 54761f1501..7005e62e6d 100644 --- a/src/surf/plugins/host_load.cpp +++ b/src/surf/plugins/host_load.cpp @@ -1,4 +1,4 @@ -/* 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. */ @@ -8,20 +8,21 @@ #include "src/plugins/vm/VirtualMachineImpl.hpp" #include "src/surf/cpu_interface.hpp" +#include "simgrid/s4u/Engine.hpp" + #include #include -#include #include #include #include -/** @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 { @@ -35,12 +36,14 @@ public: 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; }; @@ -48,7 +51,10 @@ private: simgrid::xbt::Extension 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())) { } @@ -73,6 +79,11 @@ double HostLoad::getCurrentLoad() return current_flops / (host->speed() * host->coreCount()); } +double HostLoad::getAverageLoad() +{ + return getComputedFlops() / (host->speed() * host->coreCount() * (surf_get_clock() - last_reset)); +} + double HostLoad::getComputedFlops() { update(); @@ -86,6 +97,7 @@ double HostLoad::getComputedFlops() void HostLoad::reset() { last_updated = surf_get_clock(); + last_reset = surf_get_clock(); computed_flops = 0; } } @@ -118,19 +130,18 @@ static void onActionStateChange(simgrid::surf::CpuAction* action, simgrid::surf: for (simgrid::surf::Cpu* cpu : action->cpus()) { simgrid::s4u::Host* host = cpu->getHost(); - if (host == nullptr) - continue; - - // Get the host_load extension for the relevant host - HostLoad* host_load = host->extension(); - host_load->update(); + if (host != nullptr) { + // Get the host_load extension for the relevant host + HostLoad* host_load = host->extension(); + host_load->update(); + } } } /* **************************** Public interface *************************** */ SG_BEGIN_DECL() -/** \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. */ @@ -149,7 +160,7 @@ void sg_host_load_plugin_init() /** @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) {