29 #ifndef __MEM_RUBY_SYSTEM_SEQUENCER_HH__ 30 #define __MEM_RUBY_SYSTEM_SEQUENCER_HH__ 34 #include <unordered_map> 37 #include "mem/ruby/protocol/MachineType.hh" 38 #include "mem/ruby/protocol/RubyRequestType.hh" 39 #include "mem/ruby/protocol/SequencerRequestType.hh" 42 #include "params/RubySequencer.hh" 51 RubyRequestType _m_second_type,
Cycles _issue_time)
52 : pkt(_pkt), m_type(_m_type), m_second_type(_m_second_type),
53 issue_time(_issue_time)
72 void writeCallback(
Addr address,
74 const bool externalHit =
false,
75 const MachineType mach = MachineType_NUM,
80 void readCallback(
Addr address,
82 const bool externalHit =
false,
83 const MachineType mach = MachineType_NUM,
93 {
return deadlockCheckEvent.scheduled(); }
96 { deschedule(deadlockCheckEvent); }
98 void print(std::ostream& out)
const;
99 void checkCoherence(
Addr address);
102 void evictionCallback(
Addr address);
103 void invalidateSC(
Addr address);
106 void recordRequestType(SequencerRequestType requestType);
111 {
return *m_typeLatencyHist[
t]; }
115 {
return *m_hitTypeLatencyHist[
t]; }
118 {
return *m_hitMachLatencyHist[
t]; }
121 {
return *m_hitTypeMachLatencyHist[
r][
t]; }
124 {
return m_missLatencyHist; }
126 {
return *m_missTypeLatencyHist[
t]; }
129 {
return *m_missMachLatencyHist[
t]; }
133 {
return *m_missTypeMachLatencyHist[
r][
t]; }
136 {
return *m_IssueToInitialDelayHist[
t]; }
140 {
return *m_InitialToForwardDelayHist[
t]; }
144 {
return *m_ForwardToFirstResponseDelayHist[
t]; }
148 {
return *m_FirstResponseToCompletionDelayHist[
t]; }
151 {
return m_IncompleteTimes[
t]; }
158 const MachineType mach,
const bool externalHit,
159 const Cycles initialRequestTime,
160 const Cycles forwardRequestTime,
161 const Cycles firstResponseTime);
164 const MachineType respondingMach,
165 bool isExternalHit,
Cycles initialRequestTime,
166 Cycles forwardRequestTime,
167 Cycles firstResponseTime);
169 RequestStatus insertRequest(
PacketPtr pkt, RubyRequestType primary_type,
170 RubyRequestType secondary_type);
247 #endif // __MEM_RUBY_SYSTEM_SEQUENCER_HH__
Stats::Histogram & getMissLatencyHist()
Stats::Histogram & getHitTypeLatencyHist(uint32_t t)
int m_max_outstanding_requests
std::unordered_map< Addr, std::list< SequencerRequest > > m_RequestTable
Cycles is a wrapper class for representing cycle counts, i.e.
std::vector< Stats::Histogram * > m_missTypeLatencyHist
SequencerRequest(PacketPtr _pkt, RubyRequestType _m_type, RubyRequestType _m_second_type, Cycles _issue_time)
Stats::Histogram & getTypeLatencyHist(uint32_t t)
void print(std::ostream &out) const
Stats::Histogram & getMissMachLatencyHist(uint32_t t) const
Stats::Histogram & getMissTypeMachLatencyHist(uint32_t r, uint32_t t) const
EventFunctionWrapper deadlockCheckEvent
std::vector< Stats::Histogram * > m_FirstResponseToCompletionDelayHist
Stats::Histogram m_missLatencyHist
Histogram for holding latency profile of all requests that miss in the controller connected to this s...
Stats::Histogram m_latencyHist
Histogram for holding latency profile of all requests.
Stats::Histogram & getHitTypeMachLatencyHist(uint32_t r, uint32_t t)
CacheMemory * m_dataCache_ptr
Cycles m_inst_cache_hit_latency
std::vector< Stats::Histogram * > m_typeLatencyHist
Stats::Histogram m_outstandReqHist
Histogram for number of outstanding requests per cycle.
std::vector< Stats::Histogram * > m_ForwardToFirstResponseDelayHist
CacheMemory * m_instCache_ptr
double Counter
All counters are of 64-bit values.
Stats::Histogram & getInitialToForwardDelayHist(const MachineType t) const
std::vector< Stats::Histogram * > m_InitialToForwardDelayHist
bool m_deadlock_check_scheduled
std::vector< Stats::Histogram * > m_hitTypeLatencyHist
Stats::Histogram & getForwardRequestToFirstResponseHist(const MachineType t) const
std::vector< Stats::Histogram * > m_IssueToInitialDelayHist
Histograms for recording the breakdown of miss latency.
Stats::Histogram & getOutstandReqHist()
Stats::Histogram & getHitLatencyHist()
Stats::Histogram & getLatencyHist()
int outstandingCount() const
Stats::Histogram & getHitMachLatencyHist(uint32_t t)
RubyRequestType m_second_type
std::vector< Stats::Histogram * > m_missMachLatencyHist
Histograms for profiling the latencies for requests that required external messages.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Stats::Histogram & getFirstResponseToCompletionDelayHist(const MachineType t) const
Stats::Counter getIncompleteTimes(const MachineType t) const
std::vector< std::vector< Stats::Histogram * > > m_missTypeMachLatencyHist
std::vector< Stats::Counter > m_IncompleteTimes
bool isDeadlockEventScheduled() const
Cycles m_data_cache_hit_latency
void descheduleDeadlockEvent()
bool m_runningGarnetStandalone
std::ostream & operator<<(std::ostream &out, const SequencerRequest &obj)
std::vector< Stats::Histogram * > m_hitMachLatencyHist
Histograms for profiling the latencies for requests that did not required external messages...
Stats::Histogram & getMissTypeLatencyHist(uint32_t t)
Cycles m_deadlock_threshold
RubySequencerParams Params
Stats::Histogram m_hitLatencyHist
Histogram for holding latency profile of all requests that hit in the controller connected to this se...
std::vector< std::vector< Stats::Histogram * > > m_hitTypeMachLatencyHist
Stats::Histogram & getIssueToInitialDelayHist(uint32_t t) const