Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
enable use of IO streams with Ptask model
authorFred Suter <suterf@ornl.gov>
Thu, 12 Oct 2023 12:12:20 +0000 (15:12 +0300)
committerFred Suter <suterf@ornl.gov>
Thu, 12 Oct 2023 12:12:20 +0000 (15:12 +0300)
src/kernel/resource/HostImpl.cpp
src/kernel/resource/HostImpl.hpp
src/kernel/resource/VirtualMachineImpl.hpp
src/kernel/resource/models/host_clm03.cpp
src/kernel/resource/models/host_clm03.hpp
src/kernel/resource/models/ptask_L07.cpp
src/kernel/resource/models/ptask_L07.hpp

index 4a0c728..b4c78c5 100644 (file)
@@ -8,6 +8,7 @@
 #include <simgrid/s4u/Host.hpp>
 
 #include "src/kernel/EngineImpl.hpp"
+#include "src/kernel/resource/NetworkModel.hpp"
 #include "src/kernel/resource/VirtualMachineImpl.hpp"
 #include "xbt/asserts.hpp"
 
@@ -16,7 +17,7 @@
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_host, ker_resource, "Host resources agregate CPU, networking and I/O features");
 
 /*************
- * Callbacks *t
+ * Callbacks *
  *************/
 
 namespace simgrid::kernel::resource {
@@ -24,6 +25,28 @@ namespace simgrid::kernel::resource {
 /*********
  * Model *
  *********/
+Action* HostModel::io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
+                                double size)
+{
+  auto* net_model = src_host->get_englobing_zone()->get_network_model();
+  auto* system    = net_model->get_maxmin_system();
+  auto* action   = net_model->communicate(src_host, dst_host, size, -1, true);
+
+  // We don't want to apply the network model bandwidth factor to the I/O constraints
+  double bw_factor = net_model->get_bandwidth_factor();
+  if (src_disk != nullptr) {
+    // FIXME: if the stream starts from a disk, we might not want to pay the network latency
+    system->expand(src_disk->get_constraint(), action->get_variable(), bw_factor);
+    system->expand(src_disk->get_read_constraint(), action->get_variable(), bw_factor);
+  }
+  if (dst_disk != nullptr) {
+    system->expand(dst_disk->get_constraint(), action->get_variable(), bw_factor);
+    system->expand(dst_disk->get_write_constraint(), action->get_variable(), bw_factor);
+  }
+
+  return action;
+}
+
 /************
  * Resource *
  ************/
@@ -125,6 +148,7 @@ std::vector<s4u::ActorPtr> HostImpl::get_all_actors()
     res.emplace_back(actor.get_ciface());
   return res;
 }
+
 size_t HostImpl::get_actor_count() const
 {
   return actor_list_.size();
index 2701e3b..506a3d6 100644 (file)
@@ -29,8 +29,8 @@ public:
 
   virtual Action* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
                                    const double* bytes_amount, double rate) = 0;
-  virtual Action* io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
-                            double size)                                    = 0;
+  Action* io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
+                            double size);
 };
 
 /************
index 8d51c7d..781a33b 100644 (file)
@@ -99,7 +99,6 @@ public:
   {
     return nullptr;
   };
-  Action* io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk, double size) override { return nullptr; }
 };
 } // namespace kernel::resource
 } // namespace simgrid
index c5b47a1..5050b1f 100644 (file)
@@ -50,28 +50,6 @@ static inline double has_cost(const double* array, size_t pos)
   return -1.0;
 }
 
-Action* HostCLM03Model::io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
-                                  double size)
-{
-  auto* net_model = src_host->get_englobing_zone()->get_network_model();
-  auto* system    = net_model->get_maxmin_system();
-  auto* action   = net_model->communicate(src_host, dst_host, size, -1, true);
-
-  // We don't want to apply the network model bandwidth factor to the I/O constraints
-  double bw_factor = net_model->get_bandwidth_factor();
-  if (src_disk != nullptr) {
-    // FIXME: if the stream starts from a disk, we might not want to pay the network latency
-    system->expand(src_disk->get_constraint(), action->get_variable(), bw_factor);
-    system->expand(src_disk->get_read_constraint(), action->get_variable(), bw_factor);
-  }
-  if (dst_disk != nullptr) {
-    system->expand(dst_disk->get_constraint(), action->get_variable(), bw_factor);
-    system->expand(dst_disk->get_write_constraint(), action->get_variable(), bw_factor);
-  }
-
-  return action;
-}
-
 Action* HostCLM03Model::execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
                                          const double* bytes_amount, double rate)
 {
index 65715c4..cc5fc9f 100644 (file)
@@ -22,8 +22,6 @@ public:
   Action* execute_thread(const s4u::Host* host, double flops_amount, int thread_count) override;
   Action* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
                            const double* bytes_amount, double rate) override;
-  Action* io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
-                    double size) override;
 };
 } // namespace simgrid::kernel::resource
 
index d0344f9..13f4986 100644 (file)
@@ -204,7 +204,8 @@ L07Action::L07Action(Model* model, const std::vector<s4u::Host*>& host_list, con
   XBT_DEBUG("Creating a parallel task (%p) with %zu hosts and %zu unique links.", this, host_nb, link_nb);
   latency_ = latency;
 
-  set_variable(model->get_maxmin_system()->variable_new(this, 1.0, (rate > 0 ? rate : -1.0), host_nb + link_nb));
+  // Allocate more space for constraints (+4) in case users want to mix ptasks and io streams
+  set_variable(model->get_maxmin_system()->variable_new(this, 1.0, (rate > 0 ? rate : -1.0), host_nb + link_nb + 4));
 
   if (latency_ > 0)
     model->get_maxmin_system()->update_variable_penalty(get_variable(), 0.0);
index 7bac5d6..0683aff 100644 (file)
@@ -42,11 +42,6 @@ public:
   Action* execute_thread(const s4u::Host* host, double flops_amount, int thread_count) override { return nullptr; }
   CpuAction* execute_parallel(const std::vector<s4u::Host*>& host_list, const double* flops_amount,
                               const double* bytes_amount, double rate) override;
-  Action* io_stream(s4u::Host* src_host, DiskImpl* src_disk, s4u::Host* dst_host, DiskImpl* dst_disk,
-                    double size) override
-  {
-    return nullptr;
-  }
 };
 
 class CpuL07Model : public CpuModel {