From cfec929028ae4f307cde2056c4b7458730e51bf0 Mon Sep 17 00:00:00 2001 From: Fred Suter Date: Thu, 12 Oct 2023 15:12:20 +0300 Subject: [PATCH 1/1] enable use of IO streams with Ptask model --- src/kernel/resource/HostImpl.cpp | 26 +++++++++++++++++++++- src/kernel/resource/HostImpl.hpp | 4 ++-- src/kernel/resource/VirtualMachineImpl.hpp | 1 - src/kernel/resource/models/host_clm03.cpp | 22 ------------------ src/kernel/resource/models/host_clm03.hpp | 2 -- src/kernel/resource/models/ptask_L07.cpp | 3 ++- src/kernel/resource/models/ptask_L07.hpp | 5 ----- 7 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/kernel/resource/HostImpl.cpp b/src/kernel/resource/HostImpl.cpp index 4a0c728943..b4c78c5721 100644 --- a/src/kernel/resource/HostImpl.cpp +++ b/src/kernel/resource/HostImpl.cpp @@ -8,6 +8,7 @@ #include #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 HostImpl::get_all_actors() res.emplace_back(actor.get_ciface()); return res; } + size_t HostImpl::get_actor_count() const { return actor_list_.size(); diff --git a/src/kernel/resource/HostImpl.hpp b/src/kernel/resource/HostImpl.hpp index 2701e3bf51..506a3d6b5a 100644 --- a/src/kernel/resource/HostImpl.hpp +++ b/src/kernel/resource/HostImpl.hpp @@ -29,8 +29,8 @@ public: virtual Action* execute_parallel(const std::vector& 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); }; /************ diff --git a/src/kernel/resource/VirtualMachineImpl.hpp b/src/kernel/resource/VirtualMachineImpl.hpp index 8d51c7df04..781a33be18 100644 --- a/src/kernel/resource/VirtualMachineImpl.hpp +++ b/src/kernel/resource/VirtualMachineImpl.hpp @@ -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 diff --git a/src/kernel/resource/models/host_clm03.cpp b/src/kernel/resource/models/host_clm03.cpp index c5b47a11e6..5050b1fd2e 100644 --- a/src/kernel/resource/models/host_clm03.cpp +++ b/src/kernel/resource/models/host_clm03.cpp @@ -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& host_list, const double* flops_amount, const double* bytes_amount, double rate) { diff --git a/src/kernel/resource/models/host_clm03.hpp b/src/kernel/resource/models/host_clm03.hpp index 65715c4d36..cc5fc9f8ab 100644 --- a/src/kernel/resource/models/host_clm03.hpp +++ b/src/kernel/resource/models/host_clm03.hpp @@ -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& 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 diff --git a/src/kernel/resource/models/ptask_L07.cpp b/src/kernel/resource/models/ptask_L07.cpp index d0344f972b..13f4986b7d 100644 --- a/src/kernel/resource/models/ptask_L07.cpp +++ b/src/kernel/resource/models/ptask_L07.cpp @@ -204,7 +204,8 @@ L07Action::L07Action(Model* model, const std::vector& 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); diff --git a/src/kernel/resource/models/ptask_L07.hpp b/src/kernel/resource/models/ptask_L07.hpp index 7bac5d6bca..0683aff609 100644 --- a/src/kernel/resource/models/ptask_L07.hpp +++ b/src/kernel/resource/models/ptask_L07.hpp @@ -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& 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 { -- 2.20.1