Make it so that we create a directory for each checkpoint so that
authorNathan Binkert <binkertn@umich.edu>
Fri, 14 Nov 2003 06:19:16 +0000 (01:19 -0500)
committerNathan Binkert <binkertn@umich.edu>
Fri, 14 Nov 2003 06:19:16 +0000 (01:19 -0500)
there aren't so many files littering your directory

dev/disk_image.cc:
    Checkpoints now in a directory
sim/serialize.hh:
    Make it so that we create a directory for each checkpoint so that
    there aren't so many files littering your directory.
    Remove unused variable

--HG--
extra : convert_revision : 261824eee62f7b68f6ae6e3dbd49ad5128ced148

dev/disk_image.cc
sim/serialize.cc
sim/serialize.hh

index a1a220de14ab5ea4f98636c5a0fc4bb07ca6854e..cbcd16a25e30afb40e9c536875a1b828257b40a9 100644 (file)
@@ -405,7 +405,7 @@ CowDiskImage::write(const uint8_t *data, off_t offset)
 void
 CowDiskImage::serialize(ostream &os)
 {
-    string cowFilename = CheckpointFile() + "." + name() + ".cow";
+    string cowFilename = CheckpointDir() + name() + ".cow";
     SERIALIZE_SCALAR(cowFilename);
     save(cowFilename);
 }
index 0eb26c31dba06610d7e316e0521b2bd03e9f6156..1fce6e7b17a027a5e523d14e25206881dd496e7c 100644 (file)
  */
 
 #include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 
 #include <fstream>
 #include <list>
 #include <string>
 #include <vector>
 
+#include "base/inifile.hh"
 #include "base/misc.hh"
 #include "base/str.hh"
-
+#include "base/trace.hh"
+#include "sim/config_node.hh"
 #include "sim/eventq.hh"
 #include "sim/param.hh"
 #include "sim/serialize.hh"
-#include "base/inifile.hh"
 #include "sim/sim_events.hh"
 #include "sim/sim_object.hh"
-#include "base/trace.hh"
-#include "sim/config_node.hh"
 
 using namespace std;
 
@@ -252,8 +253,11 @@ Serializer::serialize()
 
     Serializeable::serializer = this;
 
-    file = CheckpointFile();
-    string cpt_file = file + ".cpt";
+    string dir = CheckpointDir();
+    if (mkdir(dir.c_str(), 0775) == -1 && errno != EEXIST)
+            warn("could mkdir %s\n", dir);
+
+    string cpt_file = dir + "m5.cpt";
     output = new ofstream(cpt_file.c_str());
     time_t t = time(NULL);
     *output << "// checkpoint generated: " << ctime(&t);
@@ -279,13 +283,11 @@ Serializer::serialize()
 
     delete output;
     output = NULL;
-    file = "";
 }
 
 class SerializeEvent : public Event
 {
   protected:
-    string file;
     Tick repeat;
 
   public:
@@ -314,15 +316,15 @@ SerializeEvent::process()
         schedule(curTick + repeat);
 }
 
-string __CheckpointFileBase;
+string __CheckpointDirBase;
 
 string
-CheckpointFile()
+CheckpointDir()
 {
-    if (__CheckpointFileBase.empty())
-        return __CheckpointFileBase;
+    if (__CheckpointDirBase.empty())
+        return __CheckpointDirBase;
 
-    return csprintf("%s.%d", __CheckpointFileBase, curTick);
+    return csprintf("%s/m5.%012d/", __CheckpointDirBase, curTick);
 }
 
 void
@@ -344,9 +346,9 @@ class SerializeParamContext : public ParamContext
 
 SerializeParamContext serialParams("serialize");
 
-Param<string> serialize_file(&serialParams,
-                             "file",
-                             "file to write to", "m5");
+Param<string> serialize_dir(&serialParams,
+                             "dir",
+                             "dir to stick checkpoint in", ".");
 
 Param<Counter> serialize_cycle(&serialParams,
                                 "cycle",
@@ -371,7 +373,7 @@ SerializeParamContext::~SerializeParamContext()
 void
 SerializeParamContext::checkParams()
 {
-    __CheckpointFileBase = serialize_file;
+    __CheckpointDirBase = serialize_dir;
     if (serialize_cycle > 0)
         SetupCheckpoint(serialize_cycle, serialize_period);
 }
index 09e91d8160cf653a1a517b124fbcafe5589ad59e..bc40d0ad2b95780758d4b9cc5d7281c4534ea521 100644 (file)
@@ -135,7 +135,6 @@ class Serializer
   protected:
     typedef std::list<Serializeable *> serlist_t;
     serlist_t objects;
-    std::string file;
     std::ostream *output;
     std::ostream &out() const;
 
@@ -149,7 +148,6 @@ class Serializer
 
   public:
     void serialize();
-    const std::string &filename() const { return file; }
 };
 
 //
@@ -253,7 +251,7 @@ class Checkpoint
 // Export checkpoint filename param so other objects can derive
 // filenames from it (e.g., memory).
 //
-std::string CheckpointFile();
+std::string CheckpointDir();
 void SetupCheckpoint(Tick when, Tick period = 0);
 
 #endif // __SERIALIZE_HH__