Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Might be interesting to have start and finish time for Comm, Exec, and Io activities
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 23 Dec 2021 14:37:35 +0000 (15:37 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 23 Dec 2021 14:37:35 +0000 (15:37 +0100)
MANIFEST.in
include/simgrid/s4u/Activity.hpp
include/simgrid/s4u/Exec.hpp
src/kernel/EngineImpl.cpp
src/kernel/activity/ActivityImpl.hpp
src/kernel/activity/CommImpl.cpp
src/kernel/activity/ExecImpl.cpp
src/kernel/activity/ExecImpl.hpp
src/kernel/activity/IoImpl.cpp
src/s4u/s4u_Activity.cpp
src/s4u/s4u_Exec.cpp

index 70382b6..39c2313 100644 (file)
@@ -207,8 +207,8 @@ include examples/cpp/dag-comm/s4u-dag-comm.tesh
 include examples/cpp/dag-failure/s4u-dag-failure.cpp
 include examples/cpp/dag-failure/s4u-dag-failure.tesh
 include examples/cpp/dag-from-dot/dag.dot
-include examples/cpp/dag-from-dot/s4u_dag-frm-dot.cpp
-include examples/cpp/dag-from-dot/s4u_dag-frm-dot.tesh
+include examples/cpp/dag-from-dot/s4u_dag-from-dot.cpp
+include examples/cpp/dag-from-dot/s4u_dag-from-dot.tesh
 include examples/cpp/dag-io/s4u-dag-io.cpp
 include examples/cpp/dag-io/s4u-dag-io.tesh
 include examples/cpp/dag-simple/s4u-dag-simple.cpp
index 9875e12..45caaae 100644 (file)
@@ -166,6 +166,9 @@ public:
    * It is forbidden to change the amount of work once the Activity is started */
   Activity* set_remaining(double remains);
 
+  double get_start_time() const;
+  double get_finish_time() const;
+
   /** Returns the internal implementation of this Activity */
   kernel::activity::ActivityImpl* get_impl() const { return pimpl_.get(); }
 
index 09af6ea..e030b5a 100644 (file)
@@ -85,8 +85,6 @@ public:
 
   Host* get_host() const;
   unsigned int get_host_number() const;
-  double get_start_time() const;
-  double get_finish_time() const;
   double get_cost() const;
   bool is_parallel() const { return parallel_; }
   bool is_assigned() const override;
index b1904b4..9017884 100644 (file)
@@ -433,10 +433,7 @@ void EngineImpl::wake_all_waiting_actors() const
       else {
         // If nobody told the interface that the activity is finished, that's because no actor waits on it (maestro
         // started it). SimDAG I see you!
-        // The finish time of an Exec has to be set before the emission of the on_completion signal by complete
-        auto* exec = dynamic_cast<activity::ExecImpl*>(action->get_activity());
-        if (exec != nullptr)
-          exec->set_finish_time(action->get_finish_time());
+        action->get_activity()->set_finish_time(action->get_finish_time());
 
         if (action->get_activity()->get_actor() == maestro_)
           action->get_activity()->get_iface()->complete(s4u::Activity::State::FINISHED);
index 5ba6e15..f136cc4 100644 (file)
@@ -35,6 +35,8 @@ public:
   resource::Action* surf_action_ = nullptr;
   actor::ActorImpl* actor_       = nullptr;
   s4u::Activity* piface_         = nullptr;
+  double start_time_             = -1.0;
+  double finish_time_            = -1.0;
 
 protected:
   void inline set_name(const std::string& name)
@@ -54,6 +56,10 @@ public:
   void set_iface(s4u::Activity* iface) { piface_ = iface; }
   s4u::Activity* get_iface() { return piface_; }
 
+  double get_start_time() const { return start_time_; }
+  void set_finish_time(double finish_time) { finish_time_ = finish_time; }
+  double get_finish_time() const { return finish_time_; }
+
   virtual bool test();
   virtual void wait_for(actor::ActorImpl* issuer, double timeout);
   virtual ActivityImpl& set_timeout(double) { THROW_UNIMPLEMENTED; }
index 52b81a7..be78f3b 100644 (file)
@@ -310,6 +310,7 @@ CommImpl* CommImpl::start()
     surf_action_ = net_model->communicate(from_, to_, size_, rate_);
     surf_action_->set_activity(this);
     surf_action_->set_category(get_tracing_category());
+    start_time_ = surf_action_->get_start_time();
     state_ = State::RUNNING;
     on_start(*this);
 
index d5a019c..1edb6ad 100644 (file)
@@ -154,8 +154,6 @@ void ExecImpl::post()
     state_ = State::DONE;
   }
 
-  finish_time_ = surf_action_->get_finish_time();
-
   clean_action();
   timeout_detector_.reset();
   if (get_actor() != nullptr) {
index c5780a2..622940c 100644 (file)
@@ -20,8 +20,6 @@ class XBT_PUBLIC ExecImpl : public ActivityImpl_T<ExecImpl> {
       nullptr, [](resource::Action* a) { a->unref(); }};
   double sharing_penalty_             = 1.0;
   double bound_                       = 0.0;
-  double start_time_                  = -1.0;
-  double finish_time_                 = -1.0;
   std::vector<s4u::Host*> hosts_;
   std::vector<double> flops_amounts_;
   std::vector<double> bytes_amounts_;
@@ -37,10 +35,6 @@ public:
 
   void set_cb_id(unsigned int cb_id) { cb_id_ = cb_id; }
 
-  double get_start_time() const { return start_time_; }
-  void set_finish_time(double finish_time) { finish_time_ = finish_time; }
-  double get_finish_time() const { return finish_time_; }
-
   ExecImpl& set_flops_amount(double flop_amount);
   ExecImpl& set_host(s4u::Host* host);
   s4u::Host* get_host() const { return hosts_.front(); }
index 874ea95..2d27c1a 100644 (file)
@@ -79,6 +79,7 @@ IoImpl* IoImpl::start()
       disk_->get_host()->get_netpoint()->get_englobing_zone()->get_disk_model()->io_start(disk_, size_, type_);
   surf_action_->set_sharing_penalty(sharing_penalty_);
   surf_action_->set_activity(this);
+  start_time_ = surf_action_->get_start_time();
 
   XBT_DEBUG("Create IO synchro %p %s", this, get_cname());
 
index 1ea5899..8c22f58 100644 (file)
@@ -10,6 +10,7 @@
 #include <simgrid/s4u/Io.hpp>
 #include <xbt/log.h>
 
+#include "src/kernel/activity/ActivityImpl.hpp"
 #include "src/kernel/actor/ActorImpl.hpp"
 #include "src/kernel/actor/SimcallObserver.hpp"
 
@@ -116,6 +117,14 @@ double Activity::get_remaining() const
   else
     return pimpl_->get_remaining();
 }
+double Activity::get_start_time() const
+{
+  return pimpl_->get_start_time();
+}
+double Activity::get_finish_time() const
+{
+  return pimpl_->get_finish_time();
+}
 
 Activity* Activity::set_remaining(double remains)
 {
index 4efdc11..c742291 100644 (file)
@@ -159,16 +159,6 @@ unsigned int Exec::get_host_number() const
   return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_host_number();
 }
 
-double Exec::get_start_time() const
-{
-  return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_start_time();
-}
-
-double Exec::get_finish_time() const
-{
-  return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_finish_time();
-}
-
 /** @brief Change the host on which this activity takes place.
  *
  * The activity cannot be terminated already (but it may be started). */