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 */
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)
{
select = true;
}
- set_maxmin_system(new lmm::System(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()
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())
}
/* WI-FI links needs special treatment, do it here */
- if (src_wifi_link != nullptr)
- get_maxmin_system()->expand(src_wifi_link->get_constraint(), action->get_variable(),
- 1.0 / src_wifi_link->get_host_rate(src));
- if (dst_wifi_link != nullptr)
- get_maxmin_system()->expand(dst_wifi_link->get_constraint(), action->get_variable(),
- 1.0 / dst_wifi_link->get_host_rate(dst));
+ if (src_wifi_link != nullptr) {
+ 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 {
+ 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 {
+ get_maxmin_system()->update_variable_penalty(action->get_variable(), 0);
+ }
+ }
for (auto const* link : route) {
if (link->get_sharing_policy() != s4u::Link::SharingPolicy::WIFI)
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)
}
}
set_last_value(get_rate());
}
-} // namespace resource
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::resource