X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4713af90ef9c023d84da321abc1f387d195b8d48..2d37e348a09783cda723c7019640ee69de168324:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 77ab45f7a5..80000607cb 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -1,11 +1,12 @@ -/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2019. 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 "simgrid/kernel/routing/NetPoint.hpp" +#include "simgrid/s4u/Actor.hpp" #include "simgrid/s4u/Engine.hpp" -#include "src/simix/smx_host_private.hpp" +#include "simgrid/s4u/Exec.hpp" #include "src/surf/HostImpl.hpp" #include @@ -48,7 +49,7 @@ Host::~Host() /** @brief Fire the required callbacks and destroy the object * - * Don't delete directly an Host, call h->destroy() instead. + * Don't delete directly a host, call h->destroy() instead. * * This is cumbersome but this is the simplest solution to ensure that the * onDestruction() callback receives a valid object (because of the destructor @@ -85,8 +86,8 @@ void Host::turn_on() { if (is_off()) { simgrid::simix::simcall([this] { - this->pimpl_->turn_on(); this->pimpl_cpu->turn_on(); + this->pimpl_->turn_on(); on_state_change(*this); }); } @@ -222,7 +223,9 @@ double Host::get_speed() const return this->pimpl_cpu->get_speed(1.0); } /** @brief Returns the current computation load (in flops per second) + * * The external load (coming from an availability trace) is not taken in account. + * You may also be interested in the load plugin. */ double Host::get_load() const { @@ -256,7 +259,7 @@ int Host::get_pstate() const /** * @ingroup simix_storage_management - * @brief Returns the list of storages attached to an host. + * @brief Returns the list of storages attached to a host. * @return a vector containing all storages attached to the host */ std::vector Host::get_attached_storages() const @@ -283,14 +286,19 @@ std::unordered_map const& Host::get_mounted_storages() return *mounts_; } +ExecPtr Host::exec_async(double flops) +{ + return this_actor::exec_init(flops)->set_host(this); +} + void Host::execute(double flops) { execute(flops, 1.0 /* priority */); } + void Host::execute(double flops, double priority) { - smx_activity_t s = simcall_execution_start("", "", flops, 1 / priority /*priority*/, 0. /*bound*/, this); - simcall_execution_wait(s); + this_actor::exec_init(flops)->set_host(this)->set_priority(1 / priority)->start()->wait(); } } // namespace s4u @@ -511,7 +519,7 @@ int sg_host_is_off(sg_host_t host) return host->is_off(); } -/** @brief Get the properties of an host */ +/** @brief Get the properties of a host */ xbt_dict_t sg_host_get_properties(sg_host_t host) { xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f); @@ -604,7 +612,7 @@ void sg_host_dump(sg_host_t host) } } -/** @brief Return the list of actors attached to an host. +/** @brief Return the list of actors attached to a host. * * @param host a host * @param whereto a dynar in which we should push actors living on that host @@ -621,3 +629,8 @@ sg_host_t sg_host_self() smx_actor_t process = SIMIX_process_self(); return (process == nullptr) ? nullptr : process->host_; } + +double sg_host_load(sg_host_t host) +{ + return host->get_load(); +}