#include "mem/ruby/network/Network.hh"
#include "mem/ruby/profiler/AddressProfiler.hh"
#include "mem/ruby/profiler/Profiler.hh"
+#include "mem/ruby/system/Sequencer.hh"
#include "mem/ruby/system/System.hh"
using namespace std;
}
void
-Profiler::printRequestProfile(ostream &out)
+Profiler::printRequestProfile(ostream &out) const
{
out << "Request vs. RubySystem State Profile" << endl;
out << "--------------------------------" << endl;
}
void
-Profiler::printDelayProfile(ostream &out)
+Profiler::printDelayProfile(ostream &out) const
{
out << "Message Delayed Cycles" << endl;
out << "----------------------" << endl;
}
}
+void
+Profiler::printOutstandingReqProfile(ostream &out) const
+{
+ Histogram sequencerRequests;
+
+ 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;
+ Sequencer *seq = ctr->getSequencer();
+ if (seq != NULL) {
+ sequencerRequests.add(seq->getOutstandReqHist());
+ }
+ }
+ }
+
+ out << "sequencer_requests_outstanding: "
+ << sequencerRequests << endl;
+}
+
void
Profiler::printStats(ostream& out, bool short_stats)
{
out << "Busy Bank Count:" << m_busyBankCount << endl;
out << endl;
- out << "sequencer_requests_outstanding: "
- << m_sequencer_requests << endl;
+ printOutstandingReqProfile(out);
out << endl;
}
}
m_allSWPrefetchLatencyHistogram.clear(200);
- m_sequencer_requests.clear();
m_read_sharing_histogram.clear();
m_write_sharing_histogram.clear();
m_all_sharing_histogram.clear();
void swPrefetchLatency(Cycles t, RubyRequestType type,
const GenericMachineType respondingMach);
- void sequencerRequests(int num) { m_sequencer_requests.add(num); }
-
void print(std::ostream& out) const;
void rubyWatch(int proc);
bool getAllInstructions() { return m_all_instructions; }
private:
- void printRequestProfile(std::ostream &out);
- void printDelayProfile(std::ostream &out);
+ void printRequestProfile(std::ostream &out) const;
+ void printDelayProfile(std::ostream &out) const;
+ void printOutstandingReqProfile(std::ostream &out) const;
private:
// Private copy constructor and assignment operator
Histogram m_filter_action_histogram;
Histogram m_tbeProfile;
- Histogram m_sequencer_requests;
Histogram m_read_sharing_histogram;
Histogram m_write_sharing_histogram;
Histogram m_all_sharing_histogram;
*/
#include "mem/ruby/slicc_interface/AbstractController.hh"
+#include "mem/ruby/system/Sequencer.hh"
#include "mem/ruby/system/System.hh"
AbstractController::AbstractController(const Params *p)
for (uint32_t i = 0; i < size; i++) {
m_delayVCHistogram[i].clear();
}
+
+ Sequencer *seq = getSequencer();
+ if (seq != NULL) {
+ seq->clearStats();
+ }
}
void
}
}
+void Sequencer::clearStats()
+{
+ m_outstandReqHist.clear();
+}
+
void
Sequencer::printStats(ostream & out) const
{
}
}
- g_system_ptr->getProfiler()->sequencerRequests(m_outstanding_count);
+ m_outstandReqHist.add(m_outstanding_count);
assert(m_outstanding_count ==
(m_writeRequestTable.size() + m_readRequestTable.size()));
void printProgress(std::ostream& out) const;
+ void clearStats();
+
void writeCallback(const Address& address, DataBlock& data);
void writeCallback(const Address& address,
RequestStatus makeRequest(PacketPtr pkt);
bool empty() const;
int outstandingCount() const { return m_outstanding_count; }
- bool
- isDeadlockEventScheduled() const
- {
- return deadlockCheckEvent.scheduled();
- }
- void
- descheduleDeadlockEvent()
- {
- deschedule(deadlockCheckEvent);
- }
+ bool isDeadlockEventScheduled() const
+ { return deadlockCheckEvent.scheduled(); }
+
+ void descheduleDeadlockEvent()
+ { deschedule(deadlockCheckEvent); }
void print(std::ostream& out) const;
void printStats(std::ostream& out) const;
void invalidateSC(const Address& address);
void recordRequestType(SequencerRequestType requestType);
+ Histogram& getOutstandReqHist() { return m_outstandReqHist; }
private:
void issueRequest(PacketPtr pkt, RubyRequestType type);
bool m_usingNetworkTester;
+ //! Histogram for number of outstanding requests per cycle.
+ Histogram m_outstandReqHist;
+
class SequencerWakeupEvent : public Event
{
private: