From: Arnaud Giersch Date: Fri, 3 May 2019 10:15:47 +0000 (+0200) Subject: Kill never implemented option "model-check/snapshot_fds". X-Git-Tag: v3.22.2~9 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c65a2fd02f74c12e469150dfbae04366f4be484c?hp=7aa058f61406a26cf8ff9f1a04bfca254c775c62 Kill never implemented option "model-check/snapshot_fds". --- diff --git a/src/mc/mc_config.cpp b/src/mc/mc_config.cpp index 5f7e1dcf6b..e9e4f6655a 100644 --- a/src/mc/mc_config.cpp +++ b/src/mc/mc_config.cpp @@ -108,13 +108,6 @@ simgrid::config::Flag _sg_mc_hash{ "model-check/hash", "Whether to enable state hash for state comparison (experimental)", false, [](bool) { _mc_cfg_cb_check("value to enable/disable the use of global hash to speedup state comparaison"); }}; -simgrid::config::Flag _sg_mc_snapshot_fds{ - "model-check/snapshot-fds", - {"model-check/snapshot_fds"}, - "Whether file descriptors must be snapshoted (currently unusable)", - false, - [](bool) { _mc_cfg_cb_check("value to enable/disable the use of FD snapshotting"); }}; - simgrid::config::Flag _sg_mc_max_depth{"model-check/max-depth", {"model-check/max_depth"}, "Maximal exploration depth (default: 1000)", diff --git a/src/mc/mc_config.hpp b/src/mc/mc_config.hpp index b04cf846c8..6ee0daf0fe 100644 --- a/src/mc/mc_config.hpp +++ b/src/mc/mc_config.hpp @@ -20,7 +20,6 @@ extern XBT_PUBLIC simgrid::config::Flag _sg_mc_comms_determinism; extern XBT_PUBLIC simgrid::config::Flag _sg_mc_send_determinism; extern XBT_PRIVATE simgrid::config::Flag _sg_mc_timeout; extern XBT_PRIVATE simgrid::config::Flag _sg_mc_hash; -extern XBT_PRIVATE simgrid::config::Flag _sg_mc_snapshot_fds; extern XBT_PRIVATE simgrid::config::Flag _sg_mc_max_depth; extern "C" XBT_PUBLIC int _sg_mc_max_visited_states; extern XBT_PRIVATE simgrid::config::Flag _sg_mc_dot_output_file; diff --git a/src/mc/sosp/mc_checkpoint.cpp b/src/mc/sosp/mc_checkpoint.cpp index 26e07f5c19..e918993a67 100644 --- a/src/mc/sosp/mc_checkpoint.cpp +++ b/src/mc/sosp/mc_checkpoint.cpp @@ -5,11 +5,6 @@ #include -#include -#include -#include -#include - #ifndef WIN32 #include #endif @@ -415,87 +410,6 @@ static void snapshot_ignore_restore(simgrid::mc::Snapshot* snapshot) snapshot->process()->write_bytes(ignored_data.data.data(), ignored_data.data.size(), remote(ignored_data.start)); } -static std::vector get_current_fds(pid_t pid) -{ - const size_t fd_dir_path_size = 20; - char fd_dir_path[fd_dir_path_size]; - int res; - res = snprintf(fd_dir_path, fd_dir_path_size, "/proc/%lli/fd", (long long int)pid); - xbt_assert(res >= 0); - if ((size_t)res > fd_dir_path_size) - xbt_die("Unexpected buffer is too small for fd_dir_path"); - - DIR* fd_dir = opendir(fd_dir_path); - if (fd_dir == nullptr) - xbt_die("Cannot open directory '/proc/self/fd'\n"); - - std::vector fds; - - struct dirent* fd_number; - while ((fd_number = readdir(fd_dir))) { - - int fd_value = xbt_str_parse_int(fd_number->d_name, "Found a non-numerical FD: %s. Freaking out!"); - - if (fd_value < 3) - continue; - - const size_t source_size = 25; - char source[25]; - res = snprintf(source, source_size, "/proc/%lli/fd/%s", (long long int)pid, fd_number->d_name); - xbt_assert(res >= 0); - if ((size_t)res > source_size) - xbt_die("Unexpected buffer is too small for fd %s", fd_number->d_name); - - const size_t link_size = 200; - char link[200]; - res = readlink(source, link, link_size); - - if (res < 0) - xbt_die("Could not read link for %s", source); - if (res == 200) - xbt_die("Buffer to small for link of %s", source); - - link[res] = '\0'; - -#if HAVE_SMPI - if (smpi_is_privatization_file(link)) - continue; -#endif - - // This is (probably) the DIR* we are reading: - // TODO, read all the file entries at once and close the DIR.* - if (strcmp(fd_dir_path, link) == 0) - continue; - - // We don't handle them. - // It does not mean we should silently ignore them however. - if (strncmp(link, "pipe:", std::strlen("pipe:")) == 0 || strncmp(link, "socket:", std::strlen("socket:")) == 0) - continue; - - // If dot_output enabled, do not handle the corresponding file - if (dot_output != nullptr) { - std::string link_basename = simgrid::xbt::Path(link).get_base_name(); - if (link_basename == _sg_mc_dot_output_file.get()) - continue; - } - - // This is probably a shared memory used by lttng-ust: - if (strncmp("/dev/shm/ust-shm-tmp-", link, std::strlen("/dev/shm/ust-shm-tmp-")) == 0) - continue; - - // Add an entry for this FD in the snapshot: - s_fd_infos_t fd; - fd.filename = std::string(link); - fd.number = fd_value; - fd.flags = fcntl(fd_value, F_GETFL) | fcntl(fd_value, F_GETFD); - fd.current_position = lseek(fd_value, 0, SEEK_CUR); - fds.push_back(std::move(fd)); - } - - closedir(fd_dir); - return fds; -} - std::shared_ptr take_snapshot(int num_state) { XBT_DEBUG("Taking snapshot %i", num_state); @@ -509,9 +423,6 @@ std::shared_ptr take_snapshot(int num_state) snapshot_handle_ignore(snapshot.get()); - if (_sg_mc_snapshot_fds) - snapshot->current_fds = get_current_fds(mc_model_checker->process().pid()); - /* Save the std heap and the writable mapped pages of libsimgrid and binary */ get_memory_regions(mc_process, snapshot.get()); @@ -547,29 +458,10 @@ static inline void restore_snapshot_regions(simgrid::mc::Snapshot* snapshot) #endif } -static inline void restore_snapshot_fds(simgrid::mc::Snapshot* snapshot) -{ - xbt_die("FD snapshot not implemented in client/server mode."); - - for (auto const& fd : snapshot->current_fds) { - - int new_fd = open(fd.filename.c_str(), fd.flags); - if (new_fd < 0) - xbt_die("Could not reopen the file %s fo restoring the file descriptor", fd.filename.c_str()); - if (new_fd != fd.number) { - dup2(new_fd, fd.number); - close(new_fd); - } - lseek(fd.number, fd.current_position, SEEK_SET); - } -} - void restore_snapshot(std::shared_ptr snapshot) { XBT_DEBUG("Restore snapshot %i", snapshot->num_state); restore_snapshot_regions(snapshot.get()); - if (_sg_mc_snapshot_fds) - restore_snapshot_fds(snapshot.get()); snapshot_ignore_restore(snapshot.get()); mc_model_checker->process().clear_cache(); } diff --git a/src/mc/sosp/mc_snapshot.hpp b/src/mc/sosp/mc_snapshot.hpp index 92a4325c7e..692990cc6b 100644 --- a/src/mc/sosp/mc_snapshot.hpp +++ b/src/mc/sosp/mc_snapshot.hpp @@ -59,13 +59,6 @@ struct s_mc_snapshot_ignored_data_t { std::vector data; }; -struct s_fd_infos_t { - std::string filename; - int number; - off_t current_position; - int flags; -}; - /** Information about a given stack frame */ struct s_mc_stack_frame_t { /** Instruction pointer */ @@ -118,7 +111,6 @@ public: std::vector to_ignore; std::uint64_t hash; std::vector ignored_data; - std::vector current_fds; }; } // namespace mc } // namespace simgrid diff --git a/src/smpi/include/private.hpp b/src/smpi/include/private.hpp index 5a212c1516..9b276231ac 100644 --- a/src/smpi/include/private.hpp +++ b/src/smpi/include/private.hpp @@ -102,7 +102,6 @@ extern XBT_PRIVATE SharedMallocType smpi_cfg_shared_malloc; // Whether to activa XBT_PRIVATE void smpi_switch_data_segment(simgrid::s4u::ActorPtr actor); XBT_PRIVATE void smpi_really_switch_data_segment(simgrid::s4u::ActorPtr actor); -XBT_PRIVATE int smpi_is_privatization_file(char* file); XBT_PRIVATE void smpi_prepare_global_memory_segment(); XBT_PRIVATE void smpi_backup_global_memory_segment(); diff --git a/src/smpi/internals/smpi_memory.cpp b/src/smpi/internals/smpi_memory.cpp index 44dad4447b..5b927e8fd2 100644 --- a/src/smpi/internals/smpi_memory.cpp +++ b/src/smpi/internals/smpi_memory.cpp @@ -143,12 +143,6 @@ void smpi_really_switch_data_segment(simgrid::s4u::ActorPtr actor) #endif } -int smpi_is_privatization_file(char* file) -{ - const std::string buffer_path("/dev/shm/my-buffer-"); - return buffer_path.compare(0, std::string::npos, file, buffer_path.length()) == 0; -} - /** * @brief Makes a backup of the segment in memory that stores the global variables of a process. * This backup is then used to initialize the global variables for every single