Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Misc sonar and codefactor.io issues.
[simgrid.git] / src / surf / network_cm02.cpp
index d55ad89..73e4ba8 100644 (file)
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(res_network);
 
+/***********
+ * Options *
+ ***********/
+static simgrid::config::Flag<std::string> cfg_network_solver("network/solver",
+                                                             "Set linear equations solver used by network model",
+                                                             "maxmin", &simgrid::kernel::lmm::System::validate_solver);
+
 double sg_latency_factor     = 1.0; /* default value; can be set by model or from command line */
 double sg_bandwidth_factor   = 1.0; /* default value; can be set by model or from command line */
 double sg_weight_S_parameter = 0.0; /* default value; can be set by model or from command line */
@@ -72,9 +79,7 @@ void surf_network_model_init_CM02()
   engine->get_netzone_root()->set_network_model(net_model);
 }
 
-namespace simgrid {
-namespace kernel {
-namespace resource {
+namespace simgrid::kernel::resource {
 
 NetworkCm02Model::NetworkCm02Model(const std::string& name) : NetworkModel(name)
 {
@@ -88,11 +93,12 @@ NetworkCm02Model::NetworkCm02Model(const std::string& name) : NetworkModel(name)
     select = true;
   }
 
-  set_maxmin_system(lmm::System::build("maxmin", select));
-  loopback_ = create_link("__loopback__", {config::get_value<double>("network/loopback-bw")});
+  set_maxmin_system(lmm::System::build(cfg_network_solver.get(), select));
+
+  loopback_.reset(create_link("__loopback__", {config::get_value<double>("network/loopback-bw")}));
   loopback_->set_sharing_policy(s4u::Link::SharingPolicy::FATPIPE, {});
   loopback_->set_latency(config::get_value<double>("network/loopback-lat"));
-  loopback_->seal();
+  loopback_->get_iface()->seal();
 }
 
 void NetworkCm02Model::check_lat_factor_cb()
@@ -174,13 +180,10 @@ void NetworkCm02Model::update_actions_state_full(double /*now*/, double delta)
     auto& action = static_cast<NetworkCm02Action&>(*it);
     ++it; // increment iterator here since the following calls to action.finish() may invalidate it
     XBT_DEBUG("Something happened to action %p", &action);
-    double deltap = delta;
     if (action.latency_ > 0) {
-      if (action.latency_ > deltap) {
-        double_update(&action.latency_, deltap, sg_surf_precision);
-        deltap = 0.0;
+      if (action.latency_ > delta) {
+        double_update(&action.latency_, delta, sg_surf_precision);
       } else {
-        double_update(&deltap, action.latency_, sg_surf_precision);
         action.latency_ = 0.0;
       }
       if (action.latency_ <= 0.0 && not action.is_suspended())
@@ -222,19 +225,21 @@ void NetworkCm02Model::comm_action_expand_constraints(const s4u::Host* src, cons
 
   /* WI-FI links needs special treatment, do it here */
   if (src_wifi_link != nullptr) {
-    /* In case of 0Mbps data rate, don't consider it in the LMM */
     if (src_wifi_link->get_host_rate(src) > 0)
       get_maxmin_system()->expand(src_wifi_link->get_constraint(), action->get_variable(),
                                   1.0 / src_wifi_link->get_host_rate(src));
-    else
+    else {
       get_maxmin_system()->update_variable_penalty(action->get_variable(), 0);
+    }
   }
+
   if (dst_wifi_link != nullptr) {
     if (dst_wifi_link->get_host_rate(dst) > 0)
       get_maxmin_system()->expand(dst_wifi_link->get_constraint(), action->get_variable(),
                                   1.0 / dst_wifi_link->get_host_rate(dst));
-    else
+    else {
       get_maxmin_system()->update_variable_penalty(action->get_variable(), 0);
+    }
   }
 
   for (auto const* link : route) {
@@ -255,9 +260,6 @@ void NetworkCm02Model::comm_action_expand_constraints(const s4u::Host* src, cons
       if (link->get_sharing_policy() != s4u::Link::SharingPolicy::WIFI)
         get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), .05);
     }
-    // Change concurrency_share here, if you want that cross-traffic is included in the SURF concurrency
-    // (You would also have to change simgrid::kernel::lmm::Element::get_concurrency())
-    // action->getVariable()->set_concurrency_share(2)
   }
 }
 
@@ -578,6 +580,4 @@ void NetworkCm02Action::update_remains_lazy(double now)
   set_last_value(get_rate());
 }
 
-} // namespace resource
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::resource