From: Nathan Binkert Date: Fri, 14 Nov 2003 06:19:16 +0000 (-0500) Subject: Make it so that we create a directory for each checkpoint so that X-Git-Tag: m5_1.0_beta2~261 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=123d0294b5e95953866cdc79ea8018cce30132f9;p=gem5.git Make it so that we create a directory for each checkpoint so that 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 --- diff --git a/dev/disk_image.cc b/dev/disk_image.cc index a1a220de1..cbcd16a25 100644 --- a/dev/disk_image.cc +++ b/dev/disk_image.cc @@ -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); } diff --git a/sim/serialize.cc b/sim/serialize.cc index 0eb26c31d..1fce6e7b1 100644 --- a/sim/serialize.cc +++ b/sim/serialize.cc @@ -27,23 +27,24 @@ */ #include +#include +#include #include #include #include #include +#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 serialize_file(&serialParams, - "file", - "file to write to", "m5"); +Param serialize_dir(&serialParams, + "dir", + "dir to stick checkpoint in", "."); Param 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); } diff --git a/sim/serialize.hh b/sim/serialize.hh index 09e91d816..bc40d0ad2 100644 --- a/sim/serialize.hh +++ b/sim/serialize.hh @@ -135,7 +135,6 @@ class Serializer protected: typedef std::list 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__