X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b2cea5e0f341f776a37e18ba0b5ecf1bc68c1af8..6d004c352f7b26fba38486001f874e65466b5bee:/src/plugins/host_load.cpp diff --git a/src/plugins/host_load.cpp b/src/plugins/host_load.cpp index 0769bd2dec..f3f7e3c3d8 100644 --- a/src/plugins/host_load.cpp +++ b/src/plugins/host_load.cpp @@ -96,12 +96,13 @@ void HostLoad::update() while (iter != end(current_activities)) { auto& activity = iter->first; // Just an alias auto& remaining_cost_after_last_update = iter->second; // Just an alias + auto& action = activity->surf_action_; auto current_iter = iter; ++iter; - if (activity->surf_action_->get_finish_time() != now && activity->state_ == e_smx_state_t::SIMIX_RUNNING) { + if (action != nullptr && action->get_finish_time() != now && activity->state_ == e_smx_state_t::SIMIX_RUNNING) { if (remaining_cost_after_last_update == activity_uninitialized_remaining_cost) { - remaining_cost_after_last_update = activity->surf_action_->get_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; @@ -144,7 +145,7 @@ void HostLoad::update() double HostLoad::get_current_load() { // We don't need to call update() here because it is called every time an action terminates or starts - return current_flops_ / static_cast(host_->get_speed() * host_->get_core_count()); + return current_flops_ / (host_->get_speed() * host_->get_core_count()); } /* @@ -168,9 +169,9 @@ using simgrid::plugin::HostLoad; /* **************************** events callback *************************** */ /* This callback is fired either when the host changes its state (on/off) or its speed * (because the user changed the pstate, or because of external trace events) */ -static void on_host_change(simgrid::s4u::Host& host) +static void on_host_change(simgrid::s4u::Host const& host) { - if (dynamic_cast(&host)) // Ignore virtual machines + if (dynamic_cast(&host)) // Ignore virtual machines return; host.extension()->update(); @@ -204,13 +205,14 @@ void sg_host_load_plugin_init() host.extension_set(new HostLoad(&host)); }); - simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){ - if (activity->host_ != nullptr) { // We only run on one host - simgrid::s4u::Host* host = activity->host_; - if (dynamic_cast(activity->host_)) - host = dynamic_cast(activity->host_)->get_pm(); - - host->extension()->add_activity(activity); + simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImpl& 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(host); + if (vm != nullptr) + host = vm->get_pm(); + xbt_assert(host != nullptr); + host->extension()->add_activity(&activity); host->extension()->update(); // If the system was idle until now, we need to update *before* // this computation starts running so we can keep track of the // idle time. (Communication operations don't trigger this hook!) @@ -219,12 +221,13 @@ void sg_host_load_plugin_init() XBT_DEBUG("HostLoad plugin currently does not support executions on several hosts"); } }); - simgrid::kernel::activity::ExecImpl::on_completion.connect([](simgrid::kernel::activity::ExecImplPtr activity){ - if (activity->host_ != nullptr) { // We only run on one host - simgrid::s4u::Host* host = activity->host_; - if (dynamic_cast(activity->host_)) - host = dynamic_cast(activity->host_)->get_pm(); - + simgrid::kernel::activity::ExecImpl::on_completion.connect([](simgrid::kernel::activity::ExecImpl 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(host); + if (vm != nullptr) + host = vm->get_pm(); + xbt_assert(host != nullptr); host->extension()->update(); } else { // This runs on multiple hosts