From f59a7af50a7309944abfe1997057f52591619635 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Sun, 9 Jun 2013 07:29:59 -0500 Subject: 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. --- src/mem/ruby/slicc_interface/AbstractController.cc | 6 +++++ src/mem/ruby/slicc_interface/AbstractController.hh | 29 +++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) (limited to 'src/mem/ruby/slicc_interface') 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 #include +#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 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__ -- cgit v1.2.3