X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f23b0fb864cb60978c1fcfd48d50f62dd054fe31..03e7fbe7bab4bab050435eeac609d80458e36bb7:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index e321de2074..85840a4194 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -28,9 +28,9 @@ simgrid::xbt::signal Host::on_destruction; simgrid::xbt::signal Host::on_state_change; simgrid::xbt::signal Host::on_speed_change; -Host::Host(const char* name) : name_(name) +Host::Host(std::string name) : name_(name) { - xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name); + xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name.c_str()); Engine::get_instance()->host_register(std::string(name_), this); new simgrid::surf::HostImpl(this); } @@ -68,14 +68,6 @@ Host* Host::by_name(std::string name) { return Engine::get_instance()->host_by_name(name); } -Host* Host::by_name(const char* name) -{ - return Engine::get_instance()->host_by_name(std::string(name)); -} -Host* Host::by_name_or_null(const char* name) -{ - return Engine::get_instance()->host_by_name_or_null(std::string(name)); -} Host* Host::by_name_or_null(std::string name) { return Engine::get_instance()->host_by_name_or_null(name); @@ -86,14 +78,14 @@ Host* Host::current() smx_actor_t smx_proc = SIMIX_process_self(); if (smx_proc == nullptr) xbt_die("Cannot call Host::current() from the maestro context"); - return smx_proc->host; + return smx_proc->host_; } void Host::turn_on() { if (is_off()) { simgrid::simix::simcall([this] { - this->extension()->turnOn(); + this->pimpl_->turn_on(); this->pimpl_cpu->turn_on(); on_state_change(*this); }); @@ -104,29 +96,16 @@ void Host::turn_on() void Host::turn_off() { if (is_on()) { - smx_actor_t self = SIMIX_process_self(); - simgrid::simix::simcall([this, self] { - simgrid::simix::Host* host = this->extension(); - - xbt_assert((host != nullptr), "Invalid parameters"); - + simgrid::simix::simcall([this] { this->pimpl_cpu->turn_off(); - - /* Clean Simulator data */ - if (not host->process_list.empty()) { - for (auto& process : host->process_list) { - SIMIX_process_kill(&process, self); - XBT_DEBUG("Killing %s@%s on behalf of %s which turned off that host.", process.get_cname(), - process.host->get_cname(), self->get_cname()); - } - } + this->pimpl_->turn_off(); on_state_change(*this); }); } } -bool Host::is_on() +bool Host::is_on() const { return this->pimpl_cpu->is_on(); } @@ -143,32 +122,29 @@ int Host::get_pstate_count() const */ std::vector Host::get_all_actors() { - std::vector res; - for (auto& actor : this->extension()->process_list) - res.push_back(actor.ciface()); - return res; + return pimpl_->get_all_actors(); } /** @brief Returns how many actors (daemonized or not) have been launched on this host */ int Host::get_actor_count() { - return this->extension()->process_list.size(); + return pimpl_->get_actor_count(); } /** @deprecated */ void Host::getProcesses(std::vector* list) { - for (auto& actor : this->extension()->process_list) { - list->push_back(actor.iface()); - } + auto actors = get_all_actors(); + for (auto& actor : actors) + list->push_back(actor); } /** @deprecated */ void Host::actorList(std::vector* whereto) { - for (auto& actor : this->extension()->process_list) { - whereto->push_back(actor.ciface()); - } + auto actors = get_all_actors(); + for (auto& actor : actors) + whereto->push_back(actor); } /** @@ -210,7 +186,7 @@ std::unordered_map* Host::get_properties() } /** Retrieve the property value (or nullptr if not set) */ -const char* Host::get_property(const char* key) +const char* Host::get_property(std::string key) const { return this->pimpl_->get_property(key); } @@ -221,7 +197,7 @@ void Host::set_property(std::string key, std::string value) } /** @brief Get the peak processor speed (in flops/s), at the specified pstate */ -double Host::get_pstate_speed(int pstate_index) +double Host::get_pstate_speed(int pstate_index) const { return simgrid::simix::simcall([this, pstate_index] { return this->pimpl_cpu->get_pstate_peak_speed(pstate_index); }); } @@ -231,7 +207,8 @@ double Host::get_pstate_speed(int pstate_index) * The amount of flops per second available for computing depends on several things: * - The current pstate determines the maximal peak computing speed (use @ref get_pstate_speed() to retrieve the * computing speed you would get at another pstate) - * - If you declared an external load, then this reduces the available computing speed (see @ref set_speed_trace()) + * - If you declared an external load, then this reduces the available computing speed + * (see @ref simgrid::surf::Cpu::set_speed_trace()) * * The remaining speed is then shared between the executions located on this host. * You can retrieve the amount of tasks currently running on this host with @ref get_load(). @@ -240,28 +217,28 @@ double Host::get_pstate_speed(int pstate_index) * * Finally, executions of priority 2 get twice the amount of flops than executions of priority 1. */ -double Host::get_speed() +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. */ -double Host::get_load() +double Host::get_load() const { return this->pimpl_cpu->get_load(); } /** @brief Get the available speed ratio, between 0 and 1. * - * This accounts for external load (see @ref set_speed_trace()). + * This accounts for external load (see @ref simgrid::surf::Cpu::set_speed_trace()). */ -double Host::get_available_speed() +double Host::get_available_speed() const { return this->pimpl_cpu->get_speed_ratio(); } /** @brief Returns the number of core of the processor. */ -int Host::get_core_count() +int Host::get_core_count() const { return this->pimpl_cpu->get_core_count(); } @@ -272,7 +249,7 @@ void Host::set_pstate(int pstate_index) simgrid::simix::simcall([this, pstate_index] { this->pimpl_cpu->set_pstate(pstate_index); }); } /** @brief Retrieve the pstate at which the host is currently running */ -int Host::get_pstate() +int Host::get_pstate() const { return this->pimpl_cpu->get_pstate(); } @@ -282,7 +259,7 @@ int Host::get_pstate() * \brief Returns the list of storages attached to an host. * \return a vector containing all storages attached to the host */ -std::vector Host::get_attached_storages() +std::vector Host::get_attached_storages() const { return simgrid::simix::simcall([this] { return this->pimpl_->get_attached_storages(); }); } @@ -634,14 +611,13 @@ void sg_host_dump(sg_host_t host) */ void sg_host_get_actor_list(sg_host_t host, xbt_dynar_t whereto) { - for (auto& actor : host->extension()->process_list) { - s4u_Actor* p = actor.ciface(); - xbt_dynar_push(whereto, &p); - } + auto actors = host->get_all_actors(); + for (auto& actor : actors) + xbt_dynar_push(whereto, &actor); } sg_host_t sg_host_self() { smx_actor_t process = SIMIX_process_self(); - return (process == nullptr) ? nullptr : process->host; + return (process == nullptr) ? nullptr : process->host_; }