X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/67d66b0cf79b9fc02c0450f254584693dbf21d3b..230f14e9e54194231417a6afe68983b67693ed6d:/include/simgrid/s4u/Host.hpp diff --git a/include/simgrid/s4u/Host.hpp b/include/simgrid/s4u/Host.hpp index b59ec85d10..d29468ece9 100644 --- a/include/simgrid/s4u/Host.hpp +++ b/include/simgrid/s4u/Host.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2023. 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. */ @@ -7,9 +7,9 @@ #define SIMGRID_S4U_HOST_HPP #include +#include #include #include -#include #include #include @@ -47,6 +47,9 @@ class XBT_PUBLIC Host : public xbt::Extendable { kernel::resource::CpuImpl* pimpl_cpu_ = nullptr; kernel::routing::NetPoint* pimpl_netpoint_ = nullptr; +#ifndef DOXYGEN + friend kernel::resource::CpuAction; // signal exec_state_changed +#endif public: explicit Host(kernel::resource::HostImpl* pimpl) : pimpl_(pimpl) {} @@ -57,20 +60,55 @@ protected: static xbt::signal on_creation; static xbt::signal on_destruction; + xbt::signal on_this_destruction; + static xbt::signal on_exec_state_change; public: static xbt::signal on_speed_change; - static xbt::signal on_state_change; + xbt::signal on_this_speed_change; + static xbt::signal on_onoff; + xbt::signal on_this_onoff; + #endif - /** Add a callback fired on each newly created host */ + /** \static Add a callback fired on each newly created host */ static void on_creation_cb(const std::function& cb) { on_creation.connect(cb); } - /** Add a callback fired when the machine is turned on or off (called AFTER the change) */ - static void on_state_change_cb(const std::function& cb) { on_state_change.connect(cb); } - /** Add a callback fired when the speed of the machine is changed (called AFTER the change) + /** \static Add a callback fired when any machine is turned on or off (called AFTER the change) */ + static void on_onoff_cb(const std::function& cb) + { + on_onoff.connect(cb); + } + XBT_ATTRIB_DEPRECATED_v337("Please use on_onoff_cb() instead") static void on_state_change_cb( + const std::function& cb) + { + on_onoff.connect(cb); + } + /** Add a callback fired when this specific machine is turned on or off (called AFTER the change) */ + void on_this_onoff_cb(const std::function& cb) + { + on_this_onoff.connect(cb); + } + /** \static Add a callback fired when the speed of any machine is changed (called AFTER the change) * (either because of a pstate switch or because of an external load event coming from the profile) */ static void on_speed_change_cb(const std::function& cb) { on_speed_change.connect(cb); } - /** Add a callback fired just before destructing a host */ + /** Add a callback fired when the speed of this specific machine is changed (called AFTER the change) + * (either because of a pstate switch or because of an external load event coming from the profile) */ + void on_this_speed_change_cb(const std::function& cb) + { + on_this_speed_change.connect(cb); + } + /** \static Add a callback fired just before destructing any host */ static void on_destruction_cb(const std::function& cb) { on_destruction.connect(cb); } + /** Add a callback fired just before destructing this specific host */ + void on_this_destruction_cb(const std::function& cb) + { + on_this_destruction.connect(cb); + } + /** \static Add a callback fired when the state of any exec activity changes */ + static void on_exec_state_change_cb( + const std::function& cb) + { + on_exec_state_change.connect(cb); + } virtual void destroy(); #ifndef DOXYGEN @@ -79,15 +117,15 @@ public: Host& operator=(Host const&) = delete; #endif - /** Retrieve a host from its name, or return nullptr */ + /** \static Retrieve a host from its name, or return nullptr */ static Host* by_name_or_null(const std::string& name); - /** Retrieve a host from its name, or die */ + /** \static Retrieve a host from its name, or die */ static Host* by_name(const std::string& name); - /** Retrieves the host on which the running actor is located */ + /** \static Retrieves the host on which the running actor is located */ static Host* current(); /** Retrieves the name of that host as a C++ string */ - xbt::string const& get_name() const; + std::string const& get_name() const; /** Retrieves the name of that host as a C string */ const char* get_cname() const; @@ -134,7 +172,15 @@ public: Host* set_state_profile(kernel::profile::Profile* p); Host* set_speed_profile(kernel::profile::Profile* p); - /** @brief Convert the CPU's speed from string to double */ + /** + * @brief Set the max amount of executions that can take place on this host at the same time + * + * Use -1 to set no limit. + */ + Host* set_concurrency_limit(int limit); + int get_concurrency_limit() const; + + /** \static @brief Convert the CPU's speed from string to double */ static std::vector convert_pstate_speed_vector(const std::vector& speed_per_state); /** * @brief Set the CPU's speed @@ -152,13 +198,19 @@ public: /** @brief Get the peak computing speed in flops/s at the current pstate, NOT taking the external load into account. * * 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 (with @ref set_speed_profile()), you must multiply the - * result of get_speed() by get_available_speed() to retrieve what a new computation would get. + * - The current pstate determines the maximal peak computing speed (use + * @verbatim embed:rst:inline :cpp:func:`get_pstate_speed() ` @endverbatim + * to retrieve the computing speed you would get at another pstate) + * - If you declared an external load (with + * @verbatim embed:rst:inline :cpp:func:`set_speed_profile() ` @endverbatim ), + * you must multiply the result of + * @verbatim embed:rst:inline :cpp:func:`get_speed() ` @endverbatim by + * @verbatim embed:rst:inline :cpp:func:`get_available_speed() ` @endverbatim + * to retrieve what a new computation would get. * * 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(). + * You can retrieve the amount of tasks currently running on this host with + * @verbatim embed:rst:inline :cpp:func:`get_load() ` @endverbatim . * * The host may have multiple cores, and your executions may be able to use more than a single core. * @@ -167,7 +219,8 @@ public: double get_speed() const; /** @brief Get the available speed ratio, between 0 and 1. * - * This accounts for external load (see @ref set_speed_profile()). + * This accounts for external load (see + * @verbatim embed:rst:inline :cpp:func:`set_speed_profile() ` @endverbatim ). */ double get_available_speed() const; @@ -220,9 +273,12 @@ public: VirtualMachine* create_vm(const std::string& name, int core_amount); VirtualMachine* create_vm(const std::string& name, int core_amount, size_t ramsize); + /** Retrieve a VM running on this host from its name, or return nullptr */ + VirtualMachine* vm_by_name_or_null(const std::string& name); void route_to(const Host* dest, std::vector& links, double* latency) const; - void route_to(const Host* dest, std::vector& links, double* latency) const; + void route_to(const Host* dest, std::vector& links, double* latency) const; + std::pair, double> route_to(const Host* dest) const; /** * @brief Seal this host @@ -230,11 +286,6 @@ public: */ Host* seal(); -#ifndef DOXYGEN - XBT_ATTRIB_DEPRECATED_v331("Please use Comm::sendto()") void sendto(Host* dest, double byte_amount); - XBT_ATTRIB_DEPRECATED_v331("Please use Comm::sendto_async()") CommPtr sendto_async(Host* dest, double byte_amount); -#endif - NetZone* get_englobing_zone() const; /** Block the calling actor on an execution located on the called host *