Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Let netzones know about the links created in their realm
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 4 Oct 2020 14:25:39 +0000 (16:25 +0200)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 4 Oct 2020 22:53:39 +0000 (00:53 +0200)
include/simgrid/kernel/routing/NetZoneImpl.hpp
include/simgrid/s4u/Host.hpp
src/kernel/routing/NetZoneImpl.cpp
src/s4u/s4u_Host.cpp
src/surf/sg_platf.cpp

index 0c7b96f..8ac13ab 100644 (file)
@@ -7,6 +7,7 @@
 #define SIMGRID_ROUTING_NETZONEIMPL_HPP
 
 #include <simgrid/forward.h>
+#include <simgrid/s4u/Link.hpp>
 #include <simgrid/s4u/NetZone.hpp>
 #include <xbt/PropertyHolder.hpp>
 #include <xbt/graph.h>
@@ -119,7 +120,11 @@ public:
 
   /** @brief Make a host within that NetZone */
   s4u::Host* create_host(const std::string& name, const std::vector<double>& speed_per_pstate, int core_count,
-                         const std::map<std::string, std::string>* props);
+                         const std::unordered_map<std::string, std::string>* props);
+  /** @brief Make a link within that NetZone */
+  virtual s4u::Link* create_link(const std::string& name, const std::vector<double>& bandwidths, double latency,
+                                 s4u::Link::SharingPolicy policy,
+                                 const std::unordered_map<std::string, std::string>* 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<resource::LinkImpl*>& link_list, bool symmetrical);
index 1e7bd8a..d904493 100644 (file)
@@ -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<std::string, std::string>* get_properties() const;
-  void set_properties(const std::map<std::string, std::string>& properties);
+  void set_properties(const std::unordered_map<std::string, std::string>& properties);
 
   void set_state_profile(kernel::profile::Profile* p);
   void set_speed_profile(kernel::profile::Profile* p);
index f3ee075..f41f37d 100644 (file)
@@ -65,8 +65,27 @@ int NetZoneImpl::get_host_count() const
   return count;
 }
 
+s4u::Link* NetZoneImpl::create_link(const std::string& name, const std::vector<double>& bandwidths, double latency,
+                                    s4u::Link::SharingPolicy policy,
+                                    const std::unordered_map<std::string, std::string>* 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<double>& speed_per_pstate,
-                                    int coreAmount, const std::map<std::string, std::string>* props)
+                                    int coreAmount, const std::unordered_map<std::string, std::string>* props)
 {
   auto* res = new s4u::Host(name);
 
index 3dba929..702b1c8 100644 (file)
@@ -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<std::string, std::string>& properties)
+void Host::set_properties(const std::unordered_map<std::string, std::string>& properties)
 {
   kernel::actor::simcall([this, &properties] { this->pimpl_->set_properties(properties); });
 }
index 1a57123..dffd56e 100644 (file)
@@ -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<std::string, std::string> props;
+  std::unordered_map<std::string, std::string> 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<std::string, std::string> 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)