48d47
< #include <iostream>
52a52
> #include "base/callback.hh"
53a54
> #include "base/statistics.hh"
58d58
< #include "mem/ruby/common/Address.hh"
60,61d59
< #include "mem/ruby/common/Histogram.hh"
< #include "mem/ruby/common/Set.hh"
63,65c61
< #include "mem/ruby/system/MemoryControl.hh"
< #include "params/RubyProfiler.hh"
< #include "sim/sim_object.hh"
---
> #include "params/RubySystem.hh"
70c66
< class Profiler : public SimObject
---
> class Profiler
73,74c69
< typedef RubyProfilerParams Params;
< Profiler(const Params *);
---
> Profiler(const RubySystemParams *);
77a73,74
> void regStats(const std::string &name);
> void collateStats();
79,87d75
< void setPeriodicStatsFile(const std::string& filename);
< void setPeriodicStatsInterval(int64_t period);
<
< void printStats(std::ostream& out, bool short_stats=false);
< void printShortStats(std::ostream& out) { printStats(out, true); }
< void printTraceStats(std::ostream& out) const;
< void clearStats();
< void printResourceUsage(std::ostream& out) const;
<
93,120d80
< void profileRequest(const std::string& requestStr);
< void profileSharing(const Address& addr, AccessType type,
< NodeID requestor, const Set& sharers,
< const Set& owner);
<
< void profileMulticastRetry(const Address& addr, int count);
<
< void profileFilterAction(int action);
<
< void profileConflictingRequests(const Address& addr);
<
< void
< profileAverageLatencyEstimate(int latency)
< {
< m_average_latency_estimate.add(latency);
< }
<
< void controllerBusy(MachineID machID);
< void bankBusy();
<
< void print(std::ostream& out) const;
<
< void rubyWatch(int proc);
< bool watchAddress(Address addr);
<
< // return Ruby's start time
< Cycles getRubyStartTime() { return m_ruby_start; }
<
126,131d85
< void printRequestProfile(std::ostream &out) const;
< void printDelayProfile(std::ostream &out) const;
< void printOutstandingReqProfile(std::ostream &out) const;
< void printMissLatencyProfile(std::ostream &out) const;
<
< private:
139,140c93,94
< Cycles m_ruby_start;
< time_t m_real_time_start_time;
---
> Stats::Histogram delayHistogram;
> std::vector<Stats::Histogram *> delayVCHistogram;
142c96,97
< int64_t m_busyBankCount;
---
> //! Histogram for number of outstanding requests per cycle.
> Stats::Histogram m_outstandReqHist;
144,148c99,101
< Histogram m_read_sharing_histogram;
< Histogram m_write_sharing_histogram;
< Histogram m_all_sharing_histogram;
< int64 m_cache_to_cache;
< int64 m_memory_to_cache;
---
> //! Histogram for holding latency profile of all requests.
> Stats::Histogram m_latencyHist;
> std::vector<Stats::Histogram *> m_typeLatencyHist;
150,151c103,106
< Histogram m_average_latency_estimate;
< m5::hash_set<Address> m_watch_address_set;
---
> //! Histogram for holding latency profile of all requests that
> //! hit in the controller connected to this sequencer.
> Stats::Histogram m_hitLatencyHist;
> std::vector<Stats::Histogram *> m_hitTypeLatencyHist;
152a108,129
> //! Histograms for profiling the latencies for requests that
> //! did not required external messages.
> std::vector<Stats::Histogram *> m_hitMachLatencyHist;
> std::vector< std::vector<Stats::Histogram *> > m_hitTypeMachLatencyHist;
>
> //! Histogram for holding latency profile of all requests that
> //! miss in the controller connected to this sequencer.
> Stats::Histogram m_missLatencyHist;
> std::vector<Stats::Histogram *> m_missTypeLatencyHist;
>
> //! Histograms for profiling the latencies for requests that
> //! required external messages.
> std::vector<Stats::Histogram *> m_missMachLatencyHist;
> std::vector< std::vector<Stats::Histogram *> > m_missTypeMachLatencyHist;
>
> //! Histograms for recording the breakdown of miss latency
> std::vector<Stats::Histogram *> m_IssueToInitialDelayHist;
> std::vector<Stats::Histogram *> m_InitialToForwardDelayHist;
> std::vector<Stats::Histogram *> m_ForwardToFirstResponseDelayHist;
> std::vector<Stats::Histogram *> m_FirstResponseToCompletionDelayHist;
> std::vector<Stats::Scalar> m_IncompleteTimes;
>
156,157d132
<
< int m_num_of_sequencers;
160,167d134
< inline std::ostream&
< operator<<(std::ostream& out, const Profiler& obj)
< {
< obj.print(out);
< out << std::flush;
< return out;
< }
<