Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Move set_lat_factor_cb and friends to NetworkModelFactors
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 23 Oct 2022 20:40:57 +0000 (22:40 +0200)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 23 Oct 2022 20:47:27 +0000 (22:47 +0200)
MANIFEST.in
src/kernel/resource/NetworkModel.hpp
src/kernel/resource/NetworkModelFactors.cpp [new file with mode: 0644]
src/kernel/resource/NetworkModelFactors.hpp
src/surf/network_cm02.cpp
src/surf/network_cm02.hpp
tools/cmake/DefinePackages.cmake

index 8d2e301..c3f5610 100644 (file)
@@ -2245,6 +2245,7 @@ include src/kernel/resource/LinkImpl.hpp
 include src/kernel/resource/Model.cpp
 include src/kernel/resource/NetworkModel.cpp
 include src/kernel/resource/NetworkModel.hpp
+include src/kernel/resource/NetworkModelFactors.cpp
 include src/kernel/resource/NetworkModelFactors.hpp
 include src/kernel/resource/NetworkModelFactors_test.cpp
 include src/kernel/resource/Resource.hpp
index 73de863..76aa5e6 100644 (file)
@@ -79,9 +79,6 @@ public:
 
   double next_occurring_event_full(double now) override;
 
-  void set_lat_factor_cb(const std::function<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
-  void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb) override { THROW_UNIMPLEMENTED; }
-
   std::unique_ptr<StandardLinkImpl, StandardLinkImpl::Deleter> loopback_;
 };
 
diff --git a/src/kernel/resource/NetworkModelFactors.cpp b/src/kernel/resource/NetworkModelFactors.cpp
new file mode 100644 (file)
index 0000000..28f3d75
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (c) 2013-2022. 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. */
+
+#include "src/kernel/resource/NetworkModelFactors.hpp"
+#include "simgrid/sg_config.hpp"
+#include "src/kernel/resource/FactorSet.hpp"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_network);
+
+/*********
+ * Model *
+ *********/
+
+namespace simgrid::kernel::resource {
+#if 0
+static FactorSet cfg_latency_factor("network/latency-factor");
+static FactorSet cfg_bandwidth_factor("network/bandwidth-factor");
+
+config::Flag<std::string> cfg_latency_factor_str(
+    "network/latency-factor", std::initializer_list<const char*>{"smpi/lat-factor"},
+    "Correction factor to apply to the provided latency (default value overridden by network model)", "1.0");
+static config::Flag<std::string> cfg_bandwidth_factor_str(
+    "network/bandwidth-factor", std::initializer_list<const char*>{"smpi/bw-factor"},
+    "Correction factor to apply to the provided bandwidth (default value overridden by network model)", "1.0");
+
+double NetworkModelFactors::get_latency_factor()
+{
+  xbt_assert(not lat_factor_cb_,
+             "Cannot access the global latency factor since a callback is used. Please go for the advanced API.");
+
+  if (not cfg_latency_factor.is_initialized()) // lazy initiaization to avoid initialization fiasco
+    cfg_latency_factor.parse(cfg_latency_factor_str.get());
+
+  return cfg_latency_factor(0);
+}
+
+double NetworkModelFactors::get_latency_factor(double size, const s4u::Host* src, const s4u::Host* dst,
+                                               const std::vector<s4u::Link*>& links,
+                                               const std::unordered_set<s4u::NetZone*>& netzones)
+{
+  if (lat_factor_cb_)
+    return lat_factor_cb_(size, src, dst, links, netzones);
+
+  if (not cfg_latency_factor.is_initialized()) // lazy initiaization to avoid initialization fiasco
+    cfg_latency_factor.parse(cfg_latency_factor_str.get());
+
+  return cfg_latency_factor(size);
+}
+double NetworkModelFactors::get_bandwidth_factor()
+{
+  xbt_assert(not bw_factor_cb_,
+             "Cannot access the global bandwidth factor since a callback is used. Please go for the advanced API.");
+
+  if (not cfg_bandwidth_factor.is_initialized())
+    cfg_bandwidth_factor.parse(cfg_bandwidth_factor_str.get());
+
+  return cfg_bandwidth_factor(0);
+}
+
+double NetworkModelFactors::get_bandwidth_factor(double size, const s4u::Host* src, const s4u::Host* dst,
+                                                 const std::vector<s4u::Link*>& links,
+                                                 const std::unordered_set<s4u::NetZone*>& netzones)
+{
+  if (bw_factor_cb_)
+    return bw_factor_cb_(size, src, dst, links, netzones);
+
+  if (not cfg_bandwidth_factor.is_initialized())
+    cfg_bandwidth_factor.parse(cfg_bandwidth_factor_str.get());
+
+  return cfg_bandwidth_factor(size);
+}
+#endif
+
+void NetworkModelIntf::set_lat_factor_cb(const std::function<NetworkFactorCb>& cb)
+{
+  if (not cb)
+    throw std::invalid_argument("NetworkModelFactors: Invalid callback");
+  if (not simgrid::config::is_default("network/latency-factor"))
+    throw std::invalid_argument("You must choose between network/latency-factor and callback configuration.");
+
+  lat_factor_cb_ = cb;
+}
+
+void NetworkModelIntf::set_bw_factor_cb(const std::function<NetworkFactorCb>& cb)
+{
+  if (not cb)
+    throw std::invalid_argument("NetworkModelFactors: Invalid callback");
+  if (not simgrid::config::is_default("network/bandwidth-factor"))
+    throw std::invalid_argument("You must choose between network/bandwidth-factor and callback configuration.");
+
+  bw_factor_cb_ = cb;
+}
+
+} // namespace simgrid::kernel::resource
index 407b31b..76aaf22 100644 (file)
@@ -6,21 +6,26 @@
 #ifndef SIMGRID_KERNEL_RESOURCE_NETWORKMODELFACTORS_HPP
 #define SIMGRID_KERNEL_RESOURCE_NETWORKMODELFACTORS_HPP
 
+#include "simgrid/sg_config.hpp"
+#include "xbt/asserts.h"
 #include <simgrid/forward.h>
 
 #include <unordered_set>
 #include <vector>
 
-namespace simgrid {
-namespace kernel {
-namespace resource {
+namespace simgrid::kernel::resource {
 
 /** @ingroup SURF_interface
  * @brief Network Model interface class
  */
 class XBT_PUBLIC NetworkModelIntf {
+  using NetworkFactorCb = double(double size, const s4u::Host* src, const s4u::Host* dst,
+                                 const std::vector<s4u::Link*>& links,
+                                 const std::unordered_set<s4u::NetZone*>& netzones);
+
 protected:
-  ~NetworkModelIntf() = default;
+  std::function<NetworkFactorCb> lat_factor_cb_;
+  std::function<NetworkFactorCb> bw_factor_cb_;
 
 public:
   /**
@@ -37,17 +42,13 @@ public:
    * @param netzones Set with NetZones involved in the comm
    * @return Multiply factor
    */
-  using NetworkFactorCb = double(double size, const s4u::Host* src, const s4u::Host* dst,
-                                 const std::vector<s4u::Link*>& links,
-                                 const std::unordered_set<s4u::NetZone*>& netzones);
   /** @brief Configure the latency factor callback */
-  virtual void set_lat_factor_cb(const std::function<NetworkFactorCb>& cb) = 0;
+  void set_lat_factor_cb(const std::function<NetworkFactorCb>& cb);
+
   /** @brief Configure the bandwidth factor callback */
-  virtual void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb) = 0;
+  void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb);
 };
 
-} // namespace resource
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::resource
 
 #endif /* SIMGRID_KERNEL_RESOURCE_NETWORKMODELINTF_HPP */
index 725c7da..c0f1e0f 100644 (file)
@@ -113,24 +113,6 @@ void NetworkCm02Model::check_bw_factor_cb()
   }
 }
 
-void NetworkCm02Model::set_lat_factor_cb(const std::function<NetworkFactorCb>& cb)
-{
-  if (not cb)
-    throw std::invalid_argument("NetworkModelIntf: Invalid callback");
-  check_lat_factor_cb();
-
-  lat_factor_cb_ = cb;
-}
-
-void NetworkCm02Model::set_bw_factor_cb(const std::function<NetworkFactorCb>& cb)
-{
-  if (not cb)
-    throw std::invalid_argument("NetworkModelIntf: Invalid callback");
-  check_bw_factor_cb();
-
-  bw_factor_cb_ = cb;
-}
-
 StandardLinkImpl* NetworkCm02Model::create_link(const std::string& name, const std::vector<double>& bandwidths)
 {
   xbt_assert(bandwidths.size() == 1, "Non-WIFI links must use only 1 bandwidth.");
index 2fb8af7..130c4f3 100644 (file)
@@ -54,16 +54,10 @@ public:
   void update_actions_state_lazy(double now, double delta) override;
   void update_actions_state_full(double now, double delta) override;
   Action* communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) override;
-  void set_lat_factor_cb(const std::function<NetworkFactorCb>& cb) override;
-  void set_bw_factor_cb(const std::function<NetworkFactorCb>& cb) override;
 
 protected:
   virtual void check_lat_factor_cb();
   virtual void check_bw_factor_cb();
-
-private:
-  std::function<NetworkFactorCb> lat_factor_cb_;
-  std::function<NetworkFactorCb> bw_factor_cb_;
 };
 
 /************
index 723d2f4..d24edd9 100644 (file)
@@ -320,6 +320,7 @@ set(SURF_SRC
   src/kernel/resource/FactorSet.hpp
   src/kernel/resource/Model.cpp
   src/kernel/resource/NetworkModel.cpp
+  src/kernel/resource/NetworkModelFactors.cpp
   src/kernel/resource/Resource.hpp
   src/kernel/resource/SplitDuplexLinkImpl.cpp
   src/kernel/resource/StandardLinkImpl.cpp