diff options
author | Hamid Reza Khaleghzadeh ext:(%2C%20Lluc%20Alvarez%20%3Clluc.alvarez%40bsc.es%3E%2C%20Nilay%20Vaish%20%3Cnilay%40cs.wisc.edu%3E) <khaleghzadeh@gmail.com> | 2012-11-02 12:18:25 -0500 |
---|---|---|
committer | Hamid Reza Khaleghzadeh ext:(%2C%20Lluc%20Alvarez%20%3Clluc.alvarez%40bsc.es%3E%2C%20Nilay%20Vaish%20%3Cnilay%40cs.wisc.edu%3E) <khaleghzadeh@gmail.com> | 2012-11-02 12:18:25 -0500 |
commit | 8cd475d58ebc144fdbdc34e710302eb3290bdd9b (patch) | |
tree | a34de336ea9a92c1899c11adc7fb57115e88dd73 | |
parent | ce5766c409ca3e27e62a300b89511b9d0fcd6c18 (diff) | |
download | gem5-8cd475d58ebc144fdbdc34e710302eb3290bdd9b.tar.xz |
ruby: reset and dump stats along with reset of the system
This patch adds support to ruby so that the statistics maintained by ruby
are reset/dumped when the statistics for the rest of the system are
reset/dumped. For resetting the statistics, ruby now provides the
resetStats() function that a sim object can provide. As a consequence, the
clearStats() function has been removed from RubySystem. For dumping stats,
Ruby now adds a callback event to the dumpStatsQueue. The exit callback that
ruby used to add earlier is being removed.
Created by: Hamid Reza Khaleghzadeh.
Improved by: Lluc Alvarez, Nilay Vaish
Committed by: Nilay Vaish
-rw-r--r-- | src/mem/ruby/profiler/Profiler.cc | 1 | ||||
-rw-r--r-- | src/mem/ruby/system/System.cc | 15 | ||||
-rw-r--r-- | src/mem/ruby/system/System.hh | 14 |
3 files changed, 17 insertions, 13 deletions
diff --git a/src/mem/ruby/profiler/Profiler.cc b/src/mem/ruby/profiler/Profiler.cc index c4be8884c..9f5fb4fd9 100644 --- a/src/mem/ruby/profiler/Profiler.cc +++ b/src/mem/ruby/profiler/Profiler.cc @@ -438,6 +438,7 @@ void Profiler::clearStats() { m_ruby_start = g_system_ptr->getTime(); + m_real_time_start_time = time(NULL); m_cycles_executed_at_start.resize(m_num_of_sequencers); for (int i = 0; i < m_num_of_sequencers; i++) { diff --git a/src/mem/ruby/system/System.cc b/src/mem/ruby/system/System.cc index 5ee22e9f5..bbdcb3ebb 100644 --- a/src/mem/ruby/system/System.cc +++ b/src/mem/ruby/system/System.cc @@ -32,7 +32,7 @@ #include <cstdio> #include "base/intmath.hh" -#include "base/output.hh" +#include "base/statistics.hh" #include "debug/RubyCacheTrace.hh" #include "debug/RubySystem.hh" #include "mem/ruby/common/Address.hh" @@ -80,8 +80,9 @@ RubySystem::RubySystem(const Params *p) m_mem_vec_ptr->resize(m_memory_size_bytes); } - // Print ruby configuration and stats at exit - registerExitCallback(new RubyExitCallback(p->stats_filename, this)); + // Print ruby configuration and stats at exit and when asked for + Stats::registerDumpCallback(new RubyDumpStatsCallback(p->stats_filename, + this)); m_warmup_enabled = false; m_cooldown_enabled = false; @@ -91,6 +92,7 @@ void RubySystem::init() { m_profiler_ptr->clearStats(); + m_network_ptr->clearStats(); } void @@ -297,7 +299,7 @@ RubySystem::unserialize(Checkpoint *cp, const string §ion) // that the profiler can correctly set its start time to the unserialized // value of curTick() // - clearStats(); + resetStats(); uint8_t *uncompressed_trace = NULL; if (m_mem_vec_ptr != NULL) { @@ -391,7 +393,7 @@ RubySystem::RubyEvent::process() } void -RubySystem::clearStats() const +RubySystem::resetStats() { m_profiler_ptr->clearStats(); m_network_ptr->clearStats(); @@ -625,8 +627,7 @@ RubySystemParams::create() * queue is executed. */ void -RubyExitCallback::process() +RubyDumpStatsCallback::process() { - std::ostream *os = simout.create(stats_filename); ruby_system->printStats(*os); } diff --git a/src/mem/ruby/system/System.hh b/src/mem/ruby/system/System.hh index 245fa677e..24ec02111 100644 --- a/src/mem/ruby/system/System.hh +++ b/src/mem/ruby/system/System.hh @@ -36,6 +36,7 @@ #define __MEM_RUBY_SYSTEM_SYSTEM_HH__ #include "base/callback.hh" +#include "base/output.hh" #include "mem/packet.hh" #include "mem/ruby/common/Global.hh" #include "mem/ruby/recorder/CacheRecorder.hh" @@ -103,7 +104,7 @@ class RubySystem : public ClockedObject } void printStats(std::ostream& out); - void clearStats() const; + void resetStats(); uint64 getInstructionCount(int thread) { return 1; } @@ -172,18 +173,19 @@ operator<<(std::ostream& out, const RubySystem& obj) return out; } -class RubyExitCallback : public Callback +class RubyDumpStatsCallback : public Callback { private: - std::string stats_filename; + std::ostream *os; RubySystem *ruby_system; public: - virtual ~RubyExitCallback() {} + virtual ~RubyDumpStatsCallback() {} - RubyExitCallback(const std::string& _stats_filename, RubySystem *system) + RubyDumpStatsCallback(const std::string& _stats_filename, + RubySystem *system) { - stats_filename = _stats_filename; + os = simout.create(_stats_filename); ruby_system = system; } |