X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/13a2073e56f059a44fc91c128ca16aa0cf48e6b2..19e1048a7009c4144b0f361ad85fb9dff44761ea:/src/surf/network_interface.hpp diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index 8c643c7bb9..1f712a6e25 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -11,6 +11,7 @@ #include "simgrid/kernel/resource/Resource.hpp" #include "simgrid/s4u/Link.hpp" #include "src/kernel/lmm/maxmin.hpp" +#include "src/surf/LinkImpl.hpp" #include #include @@ -85,17 +86,6 @@ public: */ virtual double get_bandwidth_factor(double /* size*/) { return sg_bandwidth_factor; } - /** - * @brief Get definitive bandwidth. - * @details It gives the minimum bandwidth between the one that would occur if no limitation was enforced, and the - * one arbitrary limited. - * @param rate The desired maximum bandwidth. - * @param bound The bandwidth with only the network taken into account. - * @param size The size of the message. - * @return The new bandwidth. - */ - double get_bandwidth_constraint(double rate, double bound, double size) const; - double next_occurring_event_full(double now) override; void set_lat_factor_cb(const std::function& cb) override { THROW_UNIMPLEMENTED; } @@ -104,66 +94,6 @@ public: LinkImpl* loopback_ = nullptr; }; -/************ - * Resource * - ************/ -/** @ingroup SURF_network_interface - * @brief SURF network link interface class - * @details A Link represents the link between two [hosts](@ref simgrid::surf::HostImpl) - */ -class LinkImpl : public Resource_T, public xbt::PropertyHolder { - s4u::Link piface_; - -protected: - explicit LinkImpl(const std::string& name); - LinkImpl(const LinkImpl&) = delete; - LinkImpl& operator=(const LinkImpl&) = delete; - ~LinkImpl() override = default; // Use destroy() instead of this destructor. - -public: - void destroy(); // Must be called instead of the destructor - - void latency_check(double latency) const; - - /** @brief Public interface */ - const s4u::Link* get_iface() const { return &piface_; } - s4u::Link* get_iface() { return &piface_; } - - /** @brief Get the bandwidth in bytes per second of current Link */ - double get_bandwidth() const { return bandwidth_.peak * bandwidth_.scale; } - /** @brief Update the bandwidth in bytes per second of current Link */ - virtual void set_bandwidth(double value) = 0; - - /** @brief Get the latency in seconds of current Link */ - double get_latency() const { return latency_.peak * latency_.scale; } - /** @brief Update the latency in seconds of current Link */ - virtual LinkImpl* set_latency(double value) = 0; - - /** @brief The sharing policy */ - virtual LinkImpl* set_sharing_policy(s4u::Link::SharingPolicy policy); - virtual s4u::Link::SharingPolicy get_sharing_policy() const; - - /** @brief Check if the Link is used */ - bool is_used() const override; - - void turn_on() override; - void turn_off() override; - - void seal() override; - - void on_bandwidth_change() const; - - /* setup the profile file with bandwidth events (peak speed changes due to external load). - * Profile must contain percentages (value between 0 and 1). */ - virtual LinkImpl* set_bandwidth_profile(kernel::profile::Profile* profile); - /* setup the profile file with latency events (peak latency changes due to external load). - * Profile must contain absolute values */ - virtual LinkImpl* set_latency_profile(kernel::profile::Profile* profile); - - Metric latency_ = {0.0, 1, nullptr}; - Metric bandwidth_ = {1.0, 1, nullptr}; -}; - /********** * Action * **********/ @@ -208,6 +138,14 @@ public: s4u::Host& get_src() const { return src_; } s4u::Host& get_dst() const { return dst_; } }; + +/* Insert link(s) at the end of vector `result' (at the beginning, and reversed, for insert_link_latency()), and add + * link->get_latency() to *latency when latency is not null + */ +void add_link_latency(std::vector& result, LinkImpl* link, double* latency); +void add_link_latency(std::vector& result, const std::vector& links, double* latency); +void insert_link_latency(std::vector& result, const std::vector& links, double* latency); + } // namespace resource } // namespace kernel } // namespace simgrid