X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9e34d715bca0465a05c87301f6d0238d1a516c74..4dd8ed849c18cee8b5ed26fbfc2d48846158d7ed:/src/kernel/activity/IoImpl.cpp?ds=sidebyside diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index 07dff0fd84..30b4ee8e9b 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -12,16 +12,14 @@ #include "src/kernel/activity/IoImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" #include "src/kernel/actor/SimcallObserver.hpp" -#include "src/kernel/context/Context.hpp" #include "src/kernel/resource/CpuImpl.hpp" #include "src/kernel/resource/DiskImpl.hpp" #include "src/mc/mc_replay.hpp" +#include "src/surf/HostImpl.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_io, kernel, "Kernel io-related synchronization"); -namespace simgrid { -namespace kernel { -namespace activity { +namespace simgrid::kernel::activity { IoImpl::IoImpl() { @@ -72,12 +70,37 @@ IoImpl& IoImpl::set_disk(resource::DiskImpl* disk) return *this; } +IoImpl& IoImpl::set_host(s4u::Host* host) +{ + host_ = host; + return *this; +} + +IoImpl& IoImpl::set_dst_disk(resource::DiskImpl* disk) +{ + dst_disk_ = disk; + return *this; +} + +IoImpl& IoImpl::set_dst_host(s4u::Host* host) +{ + dst_host_ = host; + return *this; +} + IoImpl* IoImpl::start() { set_state(State::RUNNING); - surf_action_ = - disk_->get_host()->get_netpoint()->get_englobing_zone()->get_disk_model()->io_start(disk_, size_, type_); - surf_action_->set_sharing_penalty(sharing_penalty_); + if (dst_host_ == nullptr) { + XBT_DEBUG("Starting regular I/O"); + surf_action_ = disk_->io_start(size_, type_); + surf_action_->set_sharing_penalty(sharing_penalty_); + } else { + XBT_DEBUG("Starting streaming I/O"); + auto host_model = dst_host_->get_netpoint()->get_englobing_zone()->get_host_model(); + surf_action_ = host_model->io_stream(host_, disk_, dst_host_, dst_disk_, size_); + } + surf_action_->set_activity(this); set_start_time(surf_action_->get_start_time()); @@ -118,7 +141,7 @@ void IoImpl::set_exception(actor::ActorImpl* issuer) { switch (get_state()) { case State::FAILED: - issuer->context_->set_wannadie(); + issuer->set_wannadie(); static_cast(get_iface())->complete(s4u::Activity::State::FAILED); issuer->exception_ = std::make_exception_ptr(StorageFailureException(XBT_THROW_POINT, "Storage failed")); break; @@ -157,6 +180,4 @@ void IoImpl::finish() } } -} // namespace activity -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::activity