X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6260d187764dc644d699e1a53454f7efdcc682df..596e36117322c22fd31372e7803bc197bcd4a016:/src/kernel/resource/HostImpl.cpp diff --git a/src/kernel/resource/HostImpl.cpp b/src/kernel/resource/HostImpl.cpp index e72375a18b..da11f9aa1e 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 * ************/ @@ -53,9 +76,6 @@ HostImpl::~HostImpl() delete arg; actors_at_boot_.clear(); - for (auto const& [_, d] : disks_) - d->destroy(); - for (auto const& [_, vm] : vms_) vm->vm_destroy(); } @@ -128,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(); @@ -207,8 +228,8 @@ std::vector HostImpl::get_vms() const s4u::Disk* HostImpl::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth) { - auto disk = piface_.get_netpoint()->get_englobing_zone()->get_disk_model()->create_disk(name, read_bandwidth, - write_bandwidth); + auto* disk = piface_.get_netpoint()->get_englobing_zone()->get_disk_model()->create_disk(name, read_bandwidth, + write_bandwidth); if (sealed_) disk->seal(); return disk->set_host(&piface_)->get_iface(); @@ -216,7 +237,7 @@ s4u::Disk* HostImpl::create_disk(const std::string& name, double read_bandwidth, void HostImpl::add_disk(const s4u::Disk* disk) { - disks_[disk->get_name()] = disk->get_impl(); + disks_.insert({disk->get_name(), kernel::resource::DiskImplPtr(disk->get_impl())}); } void HostImpl::remove_disk(const std::string& name)