From: Martin Quinson Date: Sun, 4 Oct 2020 14:25:39 +0000 (+0200) Subject: Let netzones know about the links created in their realm X-Git-Tag: v3.26~389 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/554f67929e499dfdcc3a4e2cb2a644ce066d0e68?ds=sidebyside Let netzones know about the links created in their realm --- diff --git a/include/simgrid/kernel/routing/NetZoneImpl.hpp b/include/simgrid/kernel/routing/NetZoneImpl.hpp index 0c7b96f90c..8ac13ab9c5 100644 --- a/include/simgrid/kernel/routing/NetZoneImpl.hpp +++ b/include/simgrid/kernel/routing/NetZoneImpl.hpp @@ -7,6 +7,7 @@ #define SIMGRID_ROUTING_NETZONEIMPL_HPP #include +#include #include #include #include @@ -119,7 +120,11 @@ public: /** @brief Make a host within that NetZone */ s4u::Host* create_host(const std::string& name, const std::vector& speed_per_pstate, int core_count, - const std::map* props); + const std::unordered_map* props); + /** @brief Make a link within that NetZone */ + virtual s4u::Link* create_link(const std::string& name, const std::vector& bandwidths, double latency, + s4u::Link::SharingPolicy policy, + const std::unordered_map* props); /** @brief Creates a new route in this NetZone */ virtual void add_bypass_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, std::vector& link_list, bool symmetrical); diff --git a/include/simgrid/s4u/Host.hpp b/include/simgrid/s4u/Host.hpp index 1e7bd8ac53..d9044938a2 100644 --- a/include/simgrid/s4u/Host.hpp +++ b/include/simgrid/s4u/Host.hpp @@ -105,7 +105,7 @@ public: const char* get_property(const std::string& key) const; void set_property(const std::string& key, const std::string& value); const std::unordered_map* get_properties() const; - void set_properties(const std::map& properties); + void set_properties(const std::unordered_map& properties); void set_state_profile(kernel::profile::Profile* p); void set_speed_profile(kernel::profile::Profile* p); diff --git a/src/kernel/routing/NetZoneImpl.cpp b/src/kernel/routing/NetZoneImpl.cpp index f3ee075cff..f41f37de5f 100644 --- a/src/kernel/routing/NetZoneImpl.cpp +++ b/src/kernel/routing/NetZoneImpl.cpp @@ -65,8 +65,27 @@ int NetZoneImpl::get_host_count() const return count; } +s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector& bandwidths, double latency, + s4u::Link::SharingPolicy policy, + const std::unordered_map* props) +{ + static double last_warned_latency = sg_surf_precision; + if (latency != 0.0 && latency < last_warned_latency) { + XBT_WARN("Latency for link %s is smaller than surf/precision (%g < %g)." + " For more accuracy, consider setting \"--cfg=surf/precision:%g\".", + name.c_str(), latency, sg_surf_precision, latency); + last_warned_latency = latency; + } + + simgrid::kernel::resource::LinkImpl* l = surf_network_model->create_link(name, bandwidths, latency, policy); + + if (props) + l->set_properties(*props); + + return l->get_iface(); +} s4u::Host* NetZoneImpl::create_host(const std::string& name, const std::vector& speed_per_pstate, - int coreAmount, const std::map* props) + int coreAmount, const std::unordered_map* props) { auto* res = new s4u::Host(name); diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 3dba929a30..702b1c8867 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -204,7 +204,7 @@ void Host::set_property(const std::string& key, const std::string& value) kernel::actor::simcall([this, &key, &value] { this->pimpl_->set_property(key, value); }); } -void Host::set_properties(const std::map& properties) +void Host::set_properties(const std::unordered_map& properties) { kernel::actor::simcall([this, &properties] { this->pimpl_->set_properties(properties); }); } diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 1a57123677..dffd56e450 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -69,7 +69,7 @@ void sg_platf_exit() { /** @brief Add a host to the current AS */ void sg_platf_new_host(const simgrid::kernel::routing::HostCreationArgs* args) { - std::map props; + std::unordered_map props; if (args->properties) { for (auto const& elm : *args->properties) props.insert({elm.first, elm.second}); @@ -114,27 +114,23 @@ simgrid::kernel::routing::NetPoint* sg_platf_new_router(const std::string& name, return netpoint; } -static void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* link, const std::string& link_name) +static void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* args, const std::string& link_name) { - static double last_warned_latency = sg_surf_precision; - if (link->latency != 0.0 && link->latency < last_warned_latency) { - XBT_WARN("Latency for link %s is smaller than surf/precision (%g < %g)." - " For more accuracy, consider setting \"--cfg=surf/precision:%g\".", - link_name.c_str(), link->latency, sg_surf_precision, link->latency); - last_warned_latency = link->latency; - } - simgrid::kernel::resource::LinkImpl* l = - surf_network_model->create_link(link_name, link->bandwidths, link->latency, link->policy); - - if (link->properties) - l->set_properties(*link->properties); - - if (link->latency_trace) - l->set_latency_profile(link->latency_trace); - if (link->bandwidth_trace) - l->set_bandwidth_profile(link->bandwidth_trace); - if (link->state_trace) - l->set_state_profile(link->state_trace); + std::unordered_map props; + if (args->properties) + for (auto const& elm : *args->properties) + props.insert({elm.first, elm.second}); + + simgrid::s4u::Link* link = + routing_get_current()->create_link(link_name, args->bandwidths, args->latency, args->policy, &props); + + simgrid::kernel::resource::LinkImpl* l = link->get_impl(); + if (args->latency_trace) + l->set_latency_profile(args->latency_trace); + if (args->bandwidth_trace) + l->set_bandwidth_profile(args->bandwidth_trace); + if (args->state_trace) + l->set_state_profile(args->state_trace); } void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* link)