1/* 2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 31 unchanged lines hidden (view full) --- 40 File modification date: 2008-02-23 41 42 ---------------------------------------------------------------------- 43*/ 44 45#ifndef __MEM_RUBY_PROFILER_PROFILER_HH__ 46#define __MEM_RUBY_PROFILER_PROFILER_HH__ 47 |
48#include <iostream> 49#include <string> 50 |
51#include "mem/protocol/AccessModeType.hh" 52#include "mem/protocol/AccessType.hh" 53#include "mem/protocol/CacheRequestType.hh" 54#include "mem/protocol/GenericMachineType.hh" 55#include "mem/protocol/GenericRequestType.hh" 56#include "mem/protocol/PrefetchBit.hh" 57#include "mem/ruby/common/Address.hh" 58#include "mem/ruby/common/Consumer.hh" --- 16 unchanged lines hidden (view full) --- 75{ 76 public: 77 typedef RubyProfilerParams Params; 78 Profiler(const Params *); 79 ~Profiler(); 80 81 void wakeup(); 82 |
83 void setPeriodicStatsFile(const std::string& filename); |
84 void setPeriodicStatsInterval(integer_t period); 85 |
86 void printStats(std::ostream& out, bool short_stats=false); 87 void printShortStats(std::ostream& out) { printStats(out, true); } 88 void printTraceStats(std::ostream& out) const; |
89 void clearStats(); |
90 void printConfig(std::ostream& out) const; 91 void printResourceUsage(std::ostream& out) const; |
92 93 AddressProfiler* getAddressProfiler() { return m_address_profiler_ptr; } 94 AddressProfiler* getInstructionProfiler() { return m_inst_profiler_ptr; } 95 96 void addAddressTraceSample(const CacheMsg& msg, NodeID id); 97 |
98 void profileRequest(const std::string& requestStr); |
99 void profileSharing(const Address& addr, AccessType type, 100 NodeID requestor, const Set& sharers, 101 const Set& owner); 102 103 void profileMulticastRetry(const Address& addr, int count); 104 105 void profileFilterAction(int action); 106 --- 25 unchanged lines hidden (view full) --- 132 133 void controllerBusy(MachineID machID); 134 void bankBusy(); 135 void missLatency(Time t, RubyRequestType type); 136 void swPrefetchLatency(Time t, CacheRequestType type, 137 GenericMachineType respondingMach); 138 void sequencerRequests(int num) { m_sequencer_requests.add(num); } 139 |
140 void profileTransition(const std::string& component, NodeID version, 141 Address addr, const std::string& state, const std::string& event, 142 const std::string& next_state, const std::string& note); |
143 void profileMsgDelay(int virtualNetwork, int delayCycles); 144 |
145 void print(std::ostream& out) const; |
146 147 void rubyWatch(int proc); 148 bool watchAddress(Address addr); 149 150 // return Ruby's start time 151 Time 152 getRubyStartTime() 153 { --- 10 unchanged lines hidden (view full) --- 164 Profiler& operator=(const Profiler& obj); 165 166 AddressProfiler* m_address_profiler_ptr; 167 AddressProfiler* m_inst_profiler_ptr; 168 169 Vector<int64> m_instructions_executed_at_start; 170 Vector<int64> m_cycles_executed_at_start; 171 |
172 std::ostream* m_periodic_output_file_ptr; |
173 integer_t m_stats_period; 174 175 Time m_ruby_start; 176 time_t m_real_time_start_time; 177 178 Vector <Vector<integer_t> > m_busyControllerCount; 179 integer_t m_busyBankCount; 180 Histogram m_multicast_retry_histogram; --- 26 unchanged lines hidden (view full) --- 207 Histogram m_outstanding_requests; 208 Histogram m_outstanding_persistent_requests; 209 210 Histogram m_average_latency_estimate; 211 212 Map<Address, int>* m_watch_address_list_ptr; 213 // counts all initiated cache request including PUTs 214 int m_requests; |
215 Map <std::string, int>* m_requestProfileMap_ptr; |
216 217 //added by SS 218 bool m_hot_lines; 219 bool m_all_instructions; 220 221 int m_num_of_sequencers; 222}; 223 |
224inline std::ostream& 225operator<<(std::ostream& out, const Profiler& obj) |
226{ 227 obj.print(out); |
228 out << std::flush; |
229 return out; 230} 231 232#endif // __MEM_RUBY_PROFILER_PROFILER_HH__ 233 234 |