changeset ec5a5bfb941d in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ec5a5bfb941d
description:
        ruby: move all statistics to stats.txt, eliminate ruby.stats

diffstat:

 configs/ruby/Ruby.py                               |    7 +-
 src/mem/ruby/buffers/MessageBuffer.cc              |    7 -
 src/mem/ruby/buffers/MessageBuffer.hh              |    1 -
 src/mem/ruby/profiler/AddressProfiler.hh           |    2 +
 src/mem/ruby/profiler/Profiler.cc                  |  589 ++++++--------------
 src/mem/ruby/profiler/Profiler.hh                  |  113 +--
 src/mem/ruby/profiler/Profiler.py                  |   40 -
 src/mem/ruby/profiler/SConscript                   |    2 -
 src/mem/ruby/slicc_interface/AbstractController.cc |   46 +-
 src/mem/ruby/slicc_interface/AbstractController.hh |   32 +-
 src/mem/ruby/system/RubyPort.hh                    |    4 +-
 src/mem/ruby/system/RubySystem.py                  |    7 +-
 src/mem/ruby/system/Sequencer.cc                   |  196 +++---
 src/mem/ruby/system/Sequencer.hh                   |  105 +-
 src/mem/ruby/system/System.cc                      |   63 +-
 src/mem/ruby/system/System.hh                      |   51 +-
 src/mem/ruby/system/WireBuffer.cc                  |   10 -
 src/mem/ruby/system/WireBuffer.hh                  |    3 -
 src/mem/slicc/symbols/StateMachine.py              |   16 +-
 19 files changed, 485 insertions(+), 809 deletions(-)

diffs (truncated from 1973 to 300 lines):

diff -r 69bd1011dcf3 -r ec5a5bfb941d configs/ruby/Ruby.py
--- a/configs/ruby/Ruby.py      Fri Jan 10 16:19:40 2014 -0600
+++ b/configs/ruby/Ruby.py      Fri Jan 10 16:19:47 2014 -0600
@@ -100,8 +100,7 @@
 
 def create_system(options, system, piobus = None, dma_ports = []):
 
-    system.ruby = RubySystem(stats_filename = options.ruby_stats,
-                             no_mem_vec = options.use_map)
+    system.ruby = RubySystem(no_mem_vec = options.use_map)
     ruby = system.ruby
 
     protocol = buildEnv['PROTOCOL']
@@ -186,10 +185,8 @@
     phys_mem_size = sum(map(lambda r: r.size(), system.mem_ranges))
     assert(total_mem_size.value == phys_mem_size)
 
-    ruby_profiler = RubyProfiler(ruby_system = ruby,
-                                 num_of_sequencers = len(cpu_sequencers))
     ruby.network = network
-    ruby.profiler = ruby_profiler
     ruby.mem_size = total_mem_size
     ruby._cpu_ruby_ports = cpu_sequencers
+    ruby.num_of_sequencers = len(cpu_sequencers)
     ruby.random_seed    = options.random_seed
diff -r 69bd1011dcf3 -r ec5a5bfb941d src/mem/ruby/buffers/MessageBuffer.cc
--- a/src/mem/ruby/buffers/MessageBuffer.cc     Fri Jan 10 16:19:40 2014 -0600
+++ b/src/mem/ruby/buffers/MessageBuffer.cc     Fri Jan 10 16:19:47 2014 -0600
@@ -414,13 +414,6 @@
     ccprintf(out, "%s] %s", copy, m_name);
 }
 
-void
-MessageBuffer::printStats(ostream& out)
-{
-    out << "MessageBuffer: " << m_name << " stats - msgs:" << m_msg_counter
-        << " full:" << m_not_avail_count << endl;
-}
-
 bool
 MessageBuffer::isReady() const
 {
diff -r 69bd1011dcf3 -r ec5a5bfb941d src/mem/ruby/buffers/MessageBuffer.hh
--- a/src/mem/ruby/buffers/MessageBuffer.hh     Fri Jan 10 16:19:40 2014 -0600
+++ b/src/mem/ruby/buffers/MessageBuffer.hh     Fri Jan 10 16:19:47 2014 -0600
@@ -148,7 +148,6 @@
     void clear();
 
     void print(std::ostream& out) const;
-    void printStats(std::ostream& out);
     void clearStats() { m_not_avail_count = 0; m_msg_counter = 0; }
 
     void setIncomingLink(int link_id) { m_input_link_id = link_id; }
diff -r 69bd1011dcf3 -r ec5a5bfb941d src/mem/ruby/profiler/AddressProfiler.hh
--- a/src/mem/ruby/profiler/AddressProfiler.hh  Fri Jan 10 16:19:40 2014 -0600
+++ b/src/mem/ruby/profiler/AddressProfiler.hh  Fri Jan 10 16:19:47 2014 -0600
@@ -67,6 +67,8 @@
     //added by SS
     void setHotLines(bool hot_lines);
     void setAllInstructions(bool all_instructions);
+    void regStats(const std::string &name) {}
+    void collateStats() {}
 
   private:
     // Private copy constructor and assignment operator
diff -r 69bd1011dcf3 -r ec5a5bfb941d src/mem/ruby/profiler/Profiler.cc
--- a/src/mem/ruby/profiler/Profiler.cc Fri Jan 10 16:19:40 2014 -0600
+++ b/src/mem/ruby/profiler/Profiler.cc Fri Jan 10 16:19:47 2014 -0600
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * Copyright (c) 1999-2013 Mark D. Hill and David A. Wood
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -61,32 +61,21 @@
 using namespace std;
 using m5::stl_helpers::operator<<;
 
-Profiler::Profiler(const Params *p)
-    : SimObject(p)
+Profiler::Profiler(const RubySystemParams *p)
+    : m_IncompleteTimes(MachineType_NUM)
 {
-    m_inst_profiler_ptr = NULL;
-    m_address_profiler_ptr = NULL;
-    m_real_time_start_time = time(NULL); // Not reset in clearStats()
-
     m_hot_lines = p->hot_lines;
     m_all_instructions = p->all_instructions;
 
-    m_num_of_sequencers = p->num_of_sequencers;
-
-    m_hot_lines = false;
-    m_all_instructions = false;
-
-    m_address_profiler_ptr = new AddressProfiler(m_num_of_sequencers);
+    m_address_profiler_ptr = new AddressProfiler(p->num_of_sequencers);
     m_address_profiler_ptr->setHotLines(m_hot_lines);
     m_address_profiler_ptr->setAllInstructions(m_all_instructions);
 
     if (m_all_instructions) {
-        m_inst_profiler_ptr = new AddressProfiler(m_num_of_sequencers);
+        m_inst_profiler_ptr = new AddressProfiler(p->num_of_sequencers);
         m_inst_profiler_ptr->setHotLines(m_hot_lines);
         m_inst_profiler_ptr->setAllInstructions(m_all_instructions);
     }
-
-    p->ruby_system->registerProfiler(this);
 }
 
 Profiler::~Profiler()
@@ -94,74 +83,176 @@
 }
 
 void
-Profiler::print(ostream& out) const
+Profiler::regStats(const std::string &pName)
 {
-    out << "[Profiler]";
+    if (!m_all_instructions) {
+        m_address_profiler_ptr->regStats(pName);
+    }
+
+    if (m_all_instructions) {
+        m_inst_profiler_ptr->regStats(pName);
+    }
+
+    delayHistogram
+        .init(10)
+        .name(pName + ".delayHist")
+        .desc("delay histogram for all message")
+        .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+    uint32_t numVNets = Network::getNumberOfVirtualNetworks();
+    for (int i = 0; i < numVNets; i++) {
+        delayVCHistogram.push_back(new Stats::Histogram());
+        delayVCHistogram[i]
+            ->init(10)
+            .name(pName + csprintf(".delayVCHist.vnet_%i", i))
+            .desc(csprintf("delay histogram for vnet_%i", i))
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+    }
+
+    m_outstandReqHist
+        .init(10)
+        .name(pName + ".outstanding_req_hist")
+        .desc("")
+        .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+    m_latencyHist
+        .init(10)
+        .name(pName + ".latency_hist")
+        .desc("")
+        .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+    m_hitLatencyHist
+        .init(10)
+        .name(pName + ".hit_latency_hist")
+        .desc("")
+        .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+    m_missLatencyHist
+        .init(10)
+        .name(pName + ".miss_latency_hist")
+        .desc("")
+        .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+    for (int i = 0; i < RubyRequestType_NUM; i++) {
+        m_typeLatencyHist.push_back(new Stats::Histogram());
+        m_typeLatencyHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.latency_hist",
+                                    RubyRequestType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_hitTypeLatencyHist.push_back(new Stats::Histogram());
+        m_hitTypeLatencyHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.hit_latency_hist",
+                                    RubyRequestType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_missTypeLatencyHist.push_back(new Stats::Histogram());
+        m_missTypeLatencyHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.miss_latency_hist",
+                                    RubyRequestType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+    }
+
+    for (int i = 0; i < MachineType_NUM; i++) {
+        m_hitMachLatencyHist.push_back(new Stats::Histogram());
+        m_hitMachLatencyHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.hit_mach_latency_hist",
+                                    MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_missMachLatencyHist.push_back(new Stats::Histogram());
+        m_missMachLatencyHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.miss_mach_latency_hist",
+                                    MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_IssueToInitialDelayHist.push_back(new Stats::Histogram());
+        m_IssueToInitialDelayHist[i]
+            ->init(10)
+            .name(pName + csprintf(
+                ".%s.miss_latency_hist.issue_to_initial_request",
+                MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_InitialToForwardDelayHist.push_back(new Stats::Histogram());
+        m_InitialToForwardDelayHist[i]
+            ->init(10)
+            .name(pName + csprintf(".%s.miss_latency_hist.initial_to_forward",
+                                   MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_ForwardToFirstResponseDelayHist.push_back(new Stats::Histogram());
+        m_ForwardToFirstResponseDelayHist[i]
+            ->init(10)
+            .name(pName + csprintf(
+                ".%s.miss_latency_hist.forward_to_first_response",
+                MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_FirstResponseToCompletionDelayHist.push_back(new Stats::Histogram());
+        m_FirstResponseToCompletionDelayHist[i]
+            ->init(10)
+            .name(pName + csprintf(
+                ".%s.miss_latency_hist.first_response_to_completion",
+                MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+        m_IncompleteTimes[i]
+            .name(pName + csprintf(".%s.incomplete_times", MachineType(i)))
+            .desc("")
+            .flags(Stats::nozero);
+    }
+
+    for (int i = 0; i < RubyRequestType_NUM; i++) {
+        m_hitTypeMachLatencyHist.push_back(std::vector<Stats::Histogram *>());
+        m_missTypeMachLatencyHist.push_back(std::vector<Stats::Histogram *>());
+
+        for (int j = 0; j < MachineType_NUM; j++) {
+            m_hitTypeMachLatencyHist[i].push_back(new Stats::Histogram());
+            m_hitTypeMachLatencyHist[i][j]
+                ->init(10)
+                .name(pName + csprintf(".%s.%s.hit_type_mach_latency_hist",
+                                       RubyRequestType(i), MachineType(j)))
+                .desc("")
+                .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+
+            m_missTypeMachLatencyHist[i].push_back(new Stats::Histogram());
+            m_missTypeMachLatencyHist[i][j]
+                ->init(10)
+                .name(pName + csprintf(".%s.%s.miss_type_mach_latency_hist",
+                                       RubyRequestType(i), MachineType(j)))
+                .desc("")
+                .flags(Stats::nozero | Stats::pdf | Stats::oneline);
+        }
+    }
 }
 
 void
-Profiler::printRequestProfile(ostream &out) const
+Profiler::collateStats()
 {
-    out << "Request vs. RubySystem State Profile" << endl;
-    out << "--------------------------------" << endl;
-    out << endl;
-
-    map<string, uint64_t> m_requestProfileMap;
-    uint64_t m_requests = 0;
-
-    for (uint32_t i = 0; i < MachineType_NUM; i++) {
-        for (map<uint32_t, AbstractController*>::iterator it =
-                  g_abs_controls[i].begin();
-             it != g_abs_controls[i].end(); ++it) {
-
-            AbstractController *ctr = (*it).second;
-            map<string, uint64_t> mp = ctr->getRequestProfileMap();
-
-            for (map<string, uint64_t>::iterator jt = mp.begin();
-                 jt != mp.end(); ++jt) {
-
-                map<string, uint64_t>::iterator kt =
-                    m_requestProfileMap.find((*jt).first);
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to