diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2013-06-09 07:29:59 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2013-06-09 07:29:59 -0500 |
commit | f59a7af50a7309944abfe1997057f52591619635 (patch) | |
tree | 4daa578b6ba1664152da4412786317bce26ff0ee /src/mem/ruby/slicc_interface | |
parent | 38736ce7c33d7b1bf1e982f5d8cacd13908a32f4 (diff) | |
download | gem5-f59a7af50a7309944abfe1997057f52591619635.tar.xz |
ruby: stats: use gem5's stats for cache and memory controllers
This moves event and transition count statistics for cache controllers to
gem5's statistics. It does the same for the statistics associated with the
memory controller in ruby.
All the cache/directory/dma controllers individually collect the event and
transition counts. A callback function, collateStats(), has been added that
is invoked on the controller version 0 of each controller class. This
function adds all the individual controller statistics to a vector
variables. All the code for registering the statistical variables and
collating them is generated by SLICC. The patch removes the files
*_Profiler.{cc,hh} and *_ProfileDumper.{cc,hh} which were earlier used for
collecting and dumping statistics respectively.
Diffstat (limited to 'src/mem/ruby/slicc_interface')
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractController.cc | 6 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractController.hh | 29 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/mem/ruby/slicc_interface/AbstractController.cc b/src/mem/ruby/slicc_interface/AbstractController.cc index 6e99a72bb..930f3a70f 100644 --- a/src/mem/ruby/slicc_interface/AbstractController.cc +++ b/src/mem/ruby/slicc_interface/AbstractController.cc @@ -40,6 +40,12 @@ AbstractController::AbstractController(const Params *p) m_recycle_latency = p->recycle_latency; m_number_of_TBEs = p->number_of_TBEs; m_is_blocking = false; + + if (m_version == 0) { + // Combine the statistics from all controllers + // of this particular type. + Stats::registerDumpCallback(new StatsCallback(this)); + } } void diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh b/src/mem/ruby/slicc_interface/AbstractController.hh index e2471777b..079979bdf 100644 --- a/src/mem/ruby/slicc_interface/AbstractController.hh +++ b/src/mem/ruby/slicc_interface/AbstractController.hh @@ -32,6 +32,7 @@ #include <iostream> #include <string> +#include "base/callback.hh" #include "mem/protocol/AccessPermission.hh" #include "mem/ruby/buffers/MessageBuffer.hh" #include "mem/ruby/common/Address.hh" @@ -54,6 +55,7 @@ class AbstractController : public ClockedObject, public Consumer AbstractController(const Params *p); void init(); const Params *params() const { return (const Params *)_params; } + virtual MessageBuffer* getMandatoryQueue() const = 0; virtual const int & getVersion() const = 0; virtual const std::string toString() const = 0; // returns text version of @@ -68,8 +70,9 @@ class AbstractController : public ClockedObject, public Consumer virtual void print(std::ostream & out) const = 0; virtual void printStats(std::ostream & out) const = 0; virtual void wakeup() = 0; - // virtual void dumpStats(std::ostream & out) = 0; virtual void clearStats() = 0; + virtual void regStats() = 0; + virtual void recordCacheTrace(int cntrl, CacheRecorder* tr) = 0; virtual Sequencer* getSequencer() const = 0; @@ -86,6 +89,12 @@ class AbstractController : public ClockedObject, public Consumer virtual void enqueuePrefetch(const Address&, const RubyRequestType&) { fatal("Prefetches not implemented!");} + //! Function for collating statistics from all the controllers of this + //! particular type. This function should only be called from the + //! version 0 of this controller type. + virtual void collateStats() + {fatal("collateStats() should be overridden!");} + public: MachineID getMachineID() const { return m_machineID; } uint64_t getFullyBusyCycles() const { return m_fully_busy_cycles; } @@ -154,6 +163,24 @@ class AbstractController : public ClockedObject, public Consumer //! cares for Histogram m_delayHistogram; std::vector<Histogram> m_delayVCHistogram; + + //! Callback class used for collating statistics from all the + //! controller of this type. + class StatsCallback : public Callback + { + private: + AbstractController *ctr; + + public: + virtual ~StatsCallback() {} + + StatsCallback(AbstractController *_ctr) + : ctr(_ctr) + { + } + + void process() {ctr->collateStats();} + }; }; #endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__ |