Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
first compiling version
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 1 Aug 2018 02:06:02 +0000 (04:06 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 2 Aug 2018 22:00:13 +0000 (00:00 +0200)
include/simgrid/s4u/Storage.hpp
include/simgrid/simix.h
src/kernel/activity/IoImpl.cpp
src/s4u/s4u_Io.cpp
src/simix/smx_io.cpp
src/surf/StorageImpl.hpp
src/surf/storage_n11.cpp
src/surf/storage_n11.hpp

index f9d55c4..801f235 100644 (file)
@@ -34,7 +34,6 @@ public:
 
 protected:
   virtual ~Storage() = default;
-
 public:
   /** @brief Callback signal fired when a new Storage is created */
   static simgrid::xbt::signal<void(s4u::Storage&)> on_creation;
index d7c7525..2d65ccb 100644 (file)
@@ -286,7 +286,9 @@ XBT_PUBLIC void simcall_sem_acquire(smx_sem_t sem);
 XBT_PUBLIC int simcall_sem_acquire_timeout(smx_sem_t sem, double max_duration);
 
 /*****************************   Storage   **********************************/
-XBT_PUBLIC smx_activity_t simcall_io_start(sg_size_t size, sg_storage_t storage);
+#ifdef __cplusplus
+XBT_PUBLIC smx_activity_t simcall_io_start(std::string name, sg_size_t size, sg_storage_t storage);
+#endif
 XBT_PUBLIC sg_size_t simcall_storage_read(surf_storage_t st, sg_size_t size);
 XBT_PUBLIC sg_size_t simcall_storage_write(surf_storage_t fd, sg_size_t size);
 /************************** MC simcalls   **********************************/
index fd99cca..97d334c 100644 (file)
@@ -7,6 +7,8 @@
 #include "simgrid/kernel/resource/Action.hpp"
 #include "src/simix/smx_io_private.hpp"
 
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_io);
+
 simgrid::kernel::activity::IoImpl::IoImpl(std::string name, resource::Action* surf_action, s4u::Storage* storage)
     : ActivityImpl(name), storage_(storage), surf_action_(surf_action)
 {
@@ -17,6 +19,13 @@ simgrid::kernel::activity::IoImpl::IoImpl(std::string name, resource::Action* su
   XBT_DEBUG("Create exec %p", this);
 }
 
+simgrid::kernel::activity::IoImpl::~IoImpl()
+{
+  if (surf_action_)
+    surf_action_->unref();
+  XBT_DEBUG("Destroy exec %p", this);
+}
+
 void simgrid::kernel::activity::IoImpl::cancel()
 {
   XBT_VERB("This exec %p is canceled", this);
@@ -70,3 +79,8 @@ void simgrid::kernel::activity::IoImpl::post()
 
   SIMIX_io_finish(this);
 }
+/*************
+ * Callbacks *
+ *************/
+simgrid::xbt::signal<void(simgrid::kernel::activity::IoImplPtr)> simgrid::kernel::activity::IoImpl::on_creation;
+simgrid::xbt::signal<void(simgrid::kernel::activity::IoImplPtr)> simgrid::kernel::activity::IoImpl::on_completion;
index 1d99c57..4dfbfa2 100644 (file)
@@ -15,7 +15,7 @@ namespace s4u {
 
 Activity* Io::start()
 {
-  pimpl_ = simcall_io_start(size_, storage_);
+  pimpl_ = simcall_io_start("", size_, storage_);
   state_ = State::STARTED;
   return this;
 }
@@ -27,18 +27,18 @@ Activity* Io::cancel()
   return this;
 }
 
-// Activity* Exec::wait()
-//{
-//  simcall_execution_wait(pimpl_);
-//  state_ = State::FINISHED;
-//  return this;
-//}
-//
-// Activity* Exec::wait(double timeout)
-//{
-//  THROW_UNIMPLEMENTED;
-//  return this;
-//}
+Activity* Io::wait()
+{
+  //  simcall_execution_wait(pimpl_);
+  state_ = State::FINISHED;
+  return this;
+}
+
+Activity* Io::wait(double timeout)
+{
+  THROW_UNIMPLEMENTED;
+  return this;
+}
 //
 ///** @brief Returns whether the state of the exec is finished */
 // bool Exec::test()
index 1f9d6fd..4a0cb7e 100644 (file)
@@ -16,7 +16,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_io, simix, "Logging specific to SIMIX (io)
 simgrid::kernel::activity::IoImplPtr SIMIX_io_start(std::string name, sg_size_t size, sg_storage_t storage)
 {
   /* set surf's action */
-  simgrid::kernel::resource::Action* surf_action = storage->pimpl_->io_start(size);
+  // FIXME
+  simgrid::kernel::resource::Action* surf_action =
+      storage->get_impl()->io_start(size, (simgrid::surf::e_surf_action_storage_type_t)0);
 
   simgrid::kernel::activity::IoImplPtr io =
       simgrid::kernel::activity::IoImplPtr(new simgrid::kernel::activity::IoImpl(name, surf_action, storage));
@@ -36,13 +38,14 @@ void simcall_HANDLER_storage_read(smx_simcall_t simcall, surf_storage_t st, sg_s
 
 smx_activity_t SIMIX_storage_read(surf_storage_t st, sg_size_t size)
 {
-  simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
-  synchro->surf_action_                      = st->read(size);
-
-  synchro->surf_action_->set_data(synchro);
-  XBT_DEBUG("Create io synchro %p", synchro);
-
-  return synchro;
+  //  simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
+  //  synchro->surf_action_                      = st->read(size);
+  //
+  //  synchro->surf_action_->set_data(synchro);
+  //  XBT_DEBUG("Create io synchro %p", synchro);
+  //
+  //  return synchro;
+  return nullptr;
 }
 
 void simcall_HANDLER_storage_write(smx_simcall_t simcall, surf_storage_t st, sg_size_t size)
@@ -54,12 +57,13 @@ void simcall_HANDLER_storage_write(smx_simcall_t simcall, surf_storage_t st, sg_
 
 smx_activity_t SIMIX_storage_write(surf_storage_t st, sg_size_t size)
 {
-  simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
-  synchro->surf_action_                      = st->write(size);
-  synchro->surf_action_->set_data(synchro);
-  XBT_DEBUG("Create io synchro %p", synchro);
-
-  return synchro;
+  //  simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl();
+  //  synchro->surf_action_                      = st->write(size);
+  //  synchro->surf_action_->set_data(synchro);
+  //  XBT_DEBUG("Create io synchro %p", synchro);
+  //
+  //  return synchro;
+  return nullptr;
 }
 
 void SIMIX_io_destroy(smx_activity_t synchro)
index 6f50872..6d47c15 100644 (file)
@@ -24,6 +24,13 @@ namespace surf {
  ***********/
 
 class StorageAction;
+/** @ingroup SURF_storage_interface
+ * @brief The possible type of action for the storage component
+ */
+enum e_surf_action_storage_type_t {
+  READ = 0, /**< Read a file */
+  WRITE     /**< Write in a file */
+};
 
 /*************
  * Callbacks *
@@ -81,7 +88,7 @@ public:
   void turn_off() override;
 
   void destroy(); // Must be called instead of the destructor
-
+  virtual simgrid::kernel::resource::Action* io_start(sg_size_t size, e_surf_action_storage_type_t type) = 0;
   /**
    * @brief Read a file
    *
@@ -117,14 +124,6 @@ private:
  * Action *
  **********/
 
-/** @ingroup SURF_storage_interface
- * @brief The possible type of action for the storage component
- */
-enum e_surf_action_storage_type_t {
-  READ = 0, /**< Read a file */
-  WRITE     /**< Write in a file */
-};
-
 /** @ingroup SURF_storage_interface
  * @brief SURF storage action interface class
  */
index 6a1f0db..74ff08a 100644 (file)
@@ -99,6 +99,11 @@ StorageN11::StorageN11(StorageModel* model, std::string name, kernel::lmm::Syste
   simgrid::s4u::Storage::on_creation(this->piface_);
 }
 
+StorageAction* StorageN11::io_start(sg_size_t size, e_surf_action_storage_type_t type)
+{
+  return new StorageN11Action(get_model(), size, is_off(), this, type);
+}
+
 StorageAction* StorageN11::read(sg_size_t size)
 {
   return new StorageN11Action(get_model(), size, is_off(), this, READ);
index e595db3..4886507 100644 (file)
@@ -43,6 +43,7 @@ public:
   StorageN11(StorageModel* model, std::string name, kernel::lmm::System* maxminSystem, double bread, double bwrite,
              std::string type_id, std::string content_name, sg_size_t size, std::string attach);
   virtual ~StorageN11() = default;
+  StorageAction* io_start(sg_size_t size, e_surf_action_storage_type_t type);
   StorageAction* read(sg_size_t size);
   StorageAction* write(sg_size_t size);
 };