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