Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Kill never implemented option "model-check/snapshot_fds".
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 3 May 2019 10:15:47 +0000 (12:15 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 3 May 2019 12:27:39 +0000 (14:27 +0200)
src/mc/mc_config.cpp
src/mc/mc_config.hpp
src/mc/sosp/mc_checkpoint.cpp
src/mc/sosp/mc_snapshot.hpp
src/smpi/include/private.hpp
src/smpi/internals/smpi_memory.cpp

index 5f7e1dc..e9e4f66 100644 (file)
@@ -108,13 +108,6 @@ simgrid::config::Flag<bool> _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<bool> _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<int> _sg_mc_max_depth{"model-check/max-depth",
                                             {"model-check/max_depth"},
                                             "Maximal exploration depth (default: 1000)",
index b04cf84..6ee0daf 100644 (file)
@@ -20,7 +20,6 @@ extern XBT_PUBLIC simgrid::config::Flag<bool> _sg_mc_comms_determinism;
 extern XBT_PUBLIC simgrid::config::Flag<bool> _sg_mc_send_determinism;
 extern XBT_PRIVATE simgrid::config::Flag<bool> _sg_mc_timeout;
 extern XBT_PRIVATE simgrid::config::Flag<bool> _sg_mc_hash;
-extern XBT_PRIVATE simgrid::config::Flag<bool> _sg_mc_snapshot_fds;
 extern XBT_PRIVATE simgrid::config::Flag<int> _sg_mc_max_depth;
 extern "C" XBT_PUBLIC int _sg_mc_max_visited_states;
 extern XBT_PRIVATE simgrid::config::Flag<std::string> _sg_mc_dot_output_file;
index 26e07f5..e918993 100644 (file)
@@ -5,11 +5,6 @@
 
 #include <unistd.h>
 
-#include <cstring>
-#include <dirent.h>
-#include <fcntl.h>
-#include <link.h>
-
 #ifndef WIN32
 #include <sys/mman.h>
 #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<s_fd_infos_t> 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<s_fd_infos_t> 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<simgrid::mc::Snapshot> take_snapshot(int num_state)
 {
   XBT_DEBUG("Taking snapshot %i", num_state);
@@ -509,9 +423,6 @@ std::shared_ptr<simgrid::mc::Snapshot> 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<simgrid::mc::Snapshot> 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();
 }
index 92a4325..692990c 100644 (file)
@@ -59,13 +59,6 @@ struct s_mc_snapshot_ignored_data_t {
   std::vector<char> 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<simgrid::mc::IgnoredHeapRegion> to_ignore;
   std::uint64_t hash;
   std::vector<s_mc_snapshot_ignored_data_t> ignored_data;
-  std::vector<s_fd_infos_t> current_fds;
 };
 } // namespace mc
 } // namespace simgrid
index 5a212c1..9b27623 100644 (file)
@@ -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();
index 44dad44..5b927e8 100644 (file)
@@ -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