From: Frederic Suter Date: Mon, 10 Jul 2017 08:55:08 +0000 (+0200) Subject: disentangle file opening X-Git-Tag: v3_17~416^2~6 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6e1bfe4b91bd83b1bf4f09b20d5781c3aa4f7562 disentangle file opening --- diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index 8c57c13cc4..6a117c159a 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -291,7 +291,6 @@ XBT_PUBLIC(int) simcall_sem_get_capacity(smx_sem_t sem); /***************************** File **********************************/ XBT_PUBLIC(sg_size_t) simcall_file_read(surf_file_t fd, sg_size_t size, sg_host_t host); XBT_PUBLIC(sg_size_t) simcall_file_write(surf_file_t fd, sg_size_t size, sg_host_t host); -XBT_PUBLIC(surf_file_t) simcall_file_open(const char* mount, const char* path, sg_storage_t st); /************************** MC simcalls **********************************/ XBT_PUBLIC(int) simcall_mc_random(int min, int max); diff --git a/src/kernel/activity/SynchroIo.cpp b/src/kernel/activity/SynchroIo.cpp index d09bd1ddeb..e954fae5a6 100644 --- a/src/kernel/activity/SynchroIo.cpp +++ b/src/kernel/activity/SynchroIo.cpp @@ -25,11 +25,6 @@ void simgrid::kernel::activity::IoImpl::post() { for (smx_simcall_t simcall : simcalls) { switch (simcall->call) { - case SIMCALL_FILE_OPEN: { - surf_file_t tmp = static_cast(surf_io)->file_; - simcall_file_open__set__result(simcall, tmp); - break; - } case SIMCALL_FILE_WRITE: simcall_file_write__set__result(simcall, surf_io->getCost()); break; diff --git a/src/s4u/s4u_file.cpp b/src/s4u/s4u_file.cpp index a60d35fc30..ad9f63403b 100644 --- a/src/s4u/s4u_file.cpp +++ b/src/s4u/s4u_file.cpp @@ -43,7 +43,8 @@ File::File(const char* fullpath, sg_host_t host, void* userdata) : path_(fullpat } else xbt_die("Can't find mount point for '%s' on '%s'", fullpath, host->getCname()); - pimpl_ = simcall_file_open(mount_point.c_str(), path.c_str(), st); + pimpl_ = + simgrid::simix::kernelImmediate([this, st, path] { return new simgrid::surf::FileImpl(st, path, mount_point); }); storage_type = st->getType(); storageId = st->getName(); } diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index a8b1a010cc..d5c9811256 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -623,15 +623,6 @@ sg_size_t simcall_file_write(surf_file_t fd, sg_size_t size, sg_host_t host) return simcall_BODY_file_write(fd, size, host); } -/** - * \ingroup simix_file_management - * \brief - */ -surf_file_t simcall_file_open(const char* mount, const char* path, sg_storage_t st) -{ - return simcall_BODY_file_open(mount, path, st); -} - void simcall_run_kernel(std::function const& code) { simcall_BODY_run_kernel(&code); diff --git a/src/simix/popping_accessors.h b/src/simix/popping_accessors.h index 71c0857eee..9bdee4771a 100644 --- a/src/simix/popping_accessors.h +++ b/src/simix/popping_accessors.h @@ -1552,55 +1552,6 @@ static inline void simcall_file_write__set__result(smx_simcall_t simcall, sg_siz simgrid::simix::marshal(simcall->result, result); } -static inline const char* simcall_file_open__get__mount(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args[0]); -} -static inline const char* simcall_file_open__getraw__mount(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args[0]); -} -static inline void simcall_file_open__set__mount(smx_simcall_t simcall, const char* arg) -{ - simgrid::simix::marshal(simcall->args[0], arg); -} -static inline const char* simcall_file_open__get__path(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args[1]); -} -static inline const char* simcall_file_open__getraw__path(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args[1]); -} -static inline void simcall_file_open__set__path(smx_simcall_t simcall, const char* arg) -{ - simgrid::simix::marshal(simcall->args[1], arg); -} -static inline sg_storage_t simcall_file_open__get__st(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args[2]); -} -static inline sg_storage_t simcall_file_open__getraw__st(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args[2]); -} -static inline void simcall_file_open__set__st(smx_simcall_t simcall, sg_storage_t arg) -{ - simgrid::simix::marshal(simcall->args[2], arg); -} -static inline surf_file_t simcall_file_open__get__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->result); -} -static inline surf_file_t simcall_file_open__getraw__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->result); -} -static inline void simcall_file_open__set__result(smx_simcall_t simcall, surf_file_t result) -{ - simgrid::simix::marshal(simcall->result, result); -} - static inline int simcall_mc_random__get__min(smx_simcall_t simcall) { return simgrid::simix::unmarshal(simcall->args[0]); @@ -1740,5 +1691,4 @@ XBT_PRIVATE void simcall_HANDLER_sem_acquire_timeout(smx_simcall_t simcall, smx_ XBT_PRIVATE int simcall_HANDLER_sem_get_capacity(smx_simcall_t simcall, smx_sem_t sem); XBT_PRIVATE void simcall_HANDLER_file_read(smx_simcall_t simcall, surf_file_t fd, sg_size_t size, sg_host_t host); XBT_PRIVATE void simcall_HANDLER_file_write(smx_simcall_t simcall, surf_file_t fd, sg_size_t size, sg_host_t host); -XBT_PRIVATE void simcall_HANDLER_file_open(smx_simcall_t simcall, const char* mount, const char* path, sg_storage_t st); XBT_PRIVATE int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max); \ No newline at end of file diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index 3d8785c61d..8d0c849d40 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -328,14 +328,6 @@ inline static int simcall_BODY_sem_get_capacity(smx_sem_t sem) { return simcall(SIMCALL_FILE_WRITE, fd, size, host); } - inline static surf_file_t simcall_BODY_file_open(const char* mount, const char* path, sg_storage_t st) - { - /* Go to that function to follow the code flow through the simcall barrier */ - if (0) - simcall_HANDLER_file_open(&SIMIX_process_self()->simcall, mount, path, st); - return simcall(SIMCALL_FILE_OPEN, mount, path, st); - } - inline static int simcall_BODY_mc_random(int min, int max) { /* Go to that function to follow the code flow through the simcall barrier */ if (0) simcall_HANDLER_mc_random(&SIMIX_process_self()->simcall, min, max); diff --git a/src/simix/popping_enum.h b/src/simix/popping_enum.h index 4317f36191..eede34ffb7 100644 --- a/src/simix/popping_enum.h +++ b/src/simix/popping_enum.h @@ -60,7 +60,6 @@ typedef enum { SIMCALL_SEM_GET_CAPACITY, SIMCALL_FILE_READ, SIMCALL_FILE_WRITE, - SIMCALL_FILE_OPEN, SIMCALL_MC_RANDOM, SIMCALL_SET_CATEGORY, SIMCALL_RUN_KERNEL, diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index d9ee96208d..cf1384703b 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -66,7 +66,6 @@ const char* simcall_names[] = { "SIMCALL_SEM_GET_CAPACITY", "SIMCALL_FILE_READ", "SIMCALL_FILE_WRITE", - "SIMCALL_FILE_OPEN", "SIMCALL_MC_RANDOM", "SIMCALL_SET_CATEGORY", "SIMCALL_RUN_KERNEL", @@ -324,12 +323,6 @@ case SIMCALL_FILE_WRITE: simgrid::simix::unmarshal(simcall->args[2])); break; -case SIMCALL_FILE_OPEN: - simcall_HANDLER_file_open(simcall, simgrid::simix::unmarshal(simcall->args[0]), - simgrid::simix::unmarshal(simcall->args[1]), - simgrid::simix::unmarshal(simcall->args[2])); - break; - case SIMCALL_MC_RANDOM: simgrid::simix::marshal(simcall->result, simcall_HANDLER_mc_random(simcall, simgrid::simix::unmarshal(simcall->args[0]), simgrid::simix::unmarshal(simcall->args[1]))); SIMIX_simcall_answer(simcall); diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index 109f207406..d5b7cc19bd 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -83,7 +83,6 @@ int sem_get_capacity(smx_sem_t sem); sg_size_t file_read(surf_file_t fd, sg_size_t size, sg_host_t host) [[block]]; sg_size_t file_write(surf_file_t fd, sg_size_t size, sg_host_t host) [[block]]; -surf_file_t file_open(const char* mount, const char* path, sg_storage_t st) [[block]]; int mc_random(int min, int max); void set_category(boost::intrusive_ptr synchro, const char* category) [[nohandler]]; diff --git a/src/simix/smx_io.cpp b/src/simix/smx_io.cpp index 0287a64218..1b31af03b5 100644 --- a/src/simix/smx_io.cpp +++ b/src/simix/smx_io.cpp @@ -67,28 +67,6 @@ smx_activity_t SIMIX_file_write(surf_file_t file, sg_size_t size, sg_host_t host return synchro; } -//SIMIX FILE OPEN -void simcall_HANDLER_file_open(smx_simcall_t simcall, const char* mount, const char* path, sg_storage_t st) -{ - smx_activity_t synchro = SIMIX_file_open(mount, path, st); - synchro->simcalls.push_back(simcall); - simcall->issuer->waiting_synchro = synchro; -} - -smx_activity_t SIMIX_file_open(const char* mount, const char* path, sg_storage_t st) -{ - if (st->getHost()->isOff()) - THROWF(host_error, 0, "Host %s failed, you cannot call this function", st->getHost()->getCname()); - - simgrid::kernel::activity::IoImpl* synchro = new simgrid::kernel::activity::IoImpl(); - synchro->host = st->getHost(); - synchro->surf_io = st->pimpl_->open(mount, path); - synchro->surf_io->setData(synchro); - XBT_DEBUG("Create io synchro %p", synchro); - - return synchro; -} - void SIMIX_io_destroy(smx_activity_t synchro) { simgrid::kernel::activity::IoImplPtr io = boost::static_pointer_cast(synchro); diff --git a/src/surf/FileImpl.cpp b/src/surf/FileImpl.cpp index 59530a92de..5c7cda05ea 100644 --- a/src/surf/FileImpl.cpp +++ b/src/surf/FileImpl.cpp @@ -11,6 +11,20 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_file, surf, "Logging specific to the SURF f namespace simgrid { namespace surf { +FileImpl::FileImpl(sg_storage_t st, std::string path, std::string mount) : path_(path), mount_point_(mount) +{ + XBT_DEBUG("\tOpen file '%s'", path.c_str()); + std::map* content = st->pimpl_->content_; + // if file does not exist create an empty file + if (content->find(path) != content->end()) + size_ = content->at(path); + else { + size_ = 0; + content->insert({path, size_}); + XBT_DEBUG("File '%s' was not found, file created.", path.c_str()); + } +} + int FileImpl::seek(sg_offset_t offset, int origin) { switch (origin) { diff --git a/src/surf/FileImpl.hpp b/src/surf/FileImpl.hpp index 98cb3433fa..b23a10f6bb 100644 --- a/src/surf/FileImpl.hpp +++ b/src/surf/FileImpl.hpp @@ -15,7 +15,7 @@ namespace surf { class FileImpl { public: - FileImpl(const char* path, const char* mount, sg_size_t size) : path_(path), mount_point_(mount), size_(size) {} + FileImpl(sg_storage_t st, std::string path, std::string mount); ~FileImpl() = default; std::string name() { return path_; } diff --git a/src/surf/StorageImpl.hpp b/src/surf/StorageImpl.hpp index 8a1d515beb..8091af1b8d 100644 --- a/src/surf/StorageImpl.hpp +++ b/src/surf/StorageImpl.hpp @@ -109,15 +109,6 @@ public: std::string attach_; // Name of the host to which this storage is attached. // Only used until the platform is fully parsed only. // Then the interface stores the Host directly. - /** - * @brief Open a file - * - * @param mount The mount point - * @param path The path to the file - * - * @return The StorageAction corresponding to the opening - */ - virtual StorageAction* open(const char* mount, const char* path) = 0; /** * @brief Read a file @@ -175,9 +166,7 @@ public: */ typedef enum { READ = 0, /**< Read a file */ - WRITE, /**< Write in a file */ - OPEN, /**< Open a file */ - CLOSE /**< Close a file */ + WRITE /**< Write in a file */ } e_surf_action_storage_type_t; /** @ingroup SURF_storage_interface diff --git a/src/surf/storage_n11.cpp b/src/surf/storage_n11.cpp index e430af2649..6b5addb4c3 100644 --- a/src/surf/storage_n11.cpp +++ b/src/surf/storage_n11.cpp @@ -137,27 +137,6 @@ StorageN11::StorageN11(StorageModel* model, const char* name, lmm_system_t maxmi simgrid::s4u::Storage::onCreation(this->piface_); } -StorageAction *StorageN11::open(const char* mount, const char* path) -{ - XBT_DEBUG("\tOpen file '%s'",path); - - sg_size_t size; - // if file does not exist create an empty file - if (content_->find(path) != content_->end()) - size = content_->at(path); - else { - size = 0; - content_->insert({path, size}); - XBT_DEBUG("File '%s' was not found, file created.",path); - } - FileImpl* file = new FileImpl(path, mount, size); - - StorageAction* action = new StorageN11Action(model(), 0, isOff(), this, OPEN); - action->file_ = file; - - return action; -} - StorageAction *StorageN11::read(surf_file_t fd, sg_size_t size) { if (fd->tell() + size > fd->size()) { @@ -203,8 +182,6 @@ StorageN11Action::StorageN11Action(Model* model, double cost, bool failed, Stora // Must be less than the max bandwidth for all actions lmm_expand(model->getMaxminSystem(), storage->constraint(), getVariable(), 1.0); switch(type) { - case OPEN: - break; case READ: lmm_expand(model->getMaxminSystem(), storage->constraintRead_, getVariable(), 1.0); break;