gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
comm_monitor.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2013, 2015, 2018-2019 ARM Limited
3  * Copyright (c) 2016 Google Inc.
4  * Copyright (c) 2017, Centre National de la Recherche Scientifique
5  * All rights reserved.
6  *
7  * The license below extends only to copyright in the software and shall
8  * not be construed as granting a license to any other intellectual
9  * property including but not limited to intellectual property relating
10  * to a hardware implementation of the functionality of the software
11  * licensed hereunder. You may use the software subject to the license
12  * terms below provided that you ensure that this notice is replicated
13  * unmodified and in its entirety in all distributions of the software,
14  * modified or unmodified, in source code or in binary form.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions are
18  * met: redistributions of source code must retain the above copyright
19  * notice, this list of conditions and the following disclaimer;
20  * redistributions in binary form must reproduce the above copyright
21  * notice, this list of conditions and the following disclaimer in the
22  * documentation and/or other materials provided with the distribution;
23  * neither the name of the copyright holders nor the names of its
24  * contributors may be used to endorse or promote products derived from
25  * this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  * Authors: Thomas Grass
40  * Andreas Hansson
41  * Rahul Thakur
42  * Pierre-Yves Peneau
43  */
44 
45 #include "mem/comm_monitor.hh"
46 
47 #include "base/trace.hh"
48 #include "debug/CommMonitor.hh"
49 #include "sim/stats.hh"
50 
52  : SimObject(params),
53  masterPort(name() + "-master", *this),
54  slavePort(name() + "-slave", *this),
55  samplePeriodicEvent([this]{ samplePeriodic(); }, name()),
56  samplePeriodTicks(params->sample_period),
57  samplePeriod(params->sample_period / SimClock::Float::s),
58  stats(this, params)
59 {
61  "Created monitor %s with sample period %d ticks (%f ms)\n",
63 }
64 
66 CommMonitorParams::create()
67 {
68  return new CommMonitor(this);
69 }
70 
71 void
73 {
74  // make sure both sides of the monitor are connected
76  fatal("Communication monitor is not connected on both sides.\n");
77 }
78 
79 void
81 {
82  ppPktReq.reset(new ProbePoints::Packet(getProbeManager(), "PktRequest"));
83  ppPktResp.reset(new ProbePoints::Packet(getProbeManager(), "PktResponse"));
84 }
85 
86 Port &
87 CommMonitor::getPort(const std::string &if_name, PortID idx)
88 {
89  if (if_name == "master") {
90  return masterPort;
91  } else if (if_name == "slave") {
92  return slavePort;
93  } else {
94  return SimObject::getPort(if_name, idx);
95  }
96 }
97 
98 void
100 {
102 }
103 
104 void
106 {
108 }
109 
111  const CommMonitorParams *params)
112  : Stats::Group(parent),
113 
114  disableBurstLengthHists(params->disable_burst_length_hists),
115  ADD_STAT(readBurstLengthHist,
116  "Histogram of burst lengths of transmitted packets"),
117  ADD_STAT(writeBurstLengthHist,
118  "Histogram of burst lengths of transmitted packets"),
119 
120  disableBandwidthHists(params->disable_bandwidth_hists),
121  readBytes(0),
122  ADD_STAT(readBandwidthHist,
123  "Histogram of read bandwidth per sample period (bytes/s)"),
124  ADD_STAT(totalReadBytes, "Number of bytes read"),
125  ADD_STAT(averageReadBandwidth, "Average read bandwidth (bytes/s)",
126  totalReadBytes / simSeconds),
127 
128  writtenBytes(0),
129  ADD_STAT(writeBandwidthHist, "Histogram of write bandwidth (bytes/s)"),
130  ADD_STAT(totalWrittenBytes, "Number of bytes written"),
131  ADD_STAT(averageWriteBandwidth, "Average write bandwidth (bytes/s)",
132  totalWrittenBytes / simSeconds),
133 
134  disableLatencyHists(params->disable_latency_hists),
135  ADD_STAT(readLatencyHist, "Read request-response latency"),
136  ADD_STAT(writeLatencyHist, "Write request-response latency"),
137 
138  disableITTDists(params->disable_itt_dists),
139  ADD_STAT(ittReadRead, "Read-to-read inter transaction time"),
140  ADD_STAT(ittWriteWrite , "Write-to-write inter transaction time"),
141  ADD_STAT(ittReqReq, "Request-to-request inter transaction time"),
142  timeOfLastRead(0), timeOfLastWrite(0), timeOfLastReq(0),
143 
144  disableOutstandingHists(params->disable_outstanding_hists),
145  ADD_STAT(outstandingReadsHist, "Outstanding read transactions"),
146  outstandingReadReqs(0),
147  ADD_STAT(outstandingWritesHist, "Outstanding write transactions"),
148  outstandingWriteReqs(0),
149 
150  disableTransactionHists(params->disable_transaction_hists),
151  ADD_STAT(readTransHist,
152  "Histogram of read transactions per sample period"),
153  readTrans(0),
154  ADD_STAT(writeTransHist,
155  "Histogram of write transactions per sample period"),
156  writeTrans(0),
157 
158  disableAddrDists(params->disable_addr_dists),
159  readAddrMask(params->read_addr_mask),
160  writeAddrMask(params->write_addr_mask),
161  ADD_STAT(readAddrDist, "Read address distribution"),
162  ADD_STAT(writeAddrDist, "Write address distribution")
163 {
164  using namespace Stats;
165 
167  .init(params->burst_length_bins)
169 
171  .init(params->burst_length_bins)
173 
174  // Stats based on received responses
176  .init(params->bandwidth_bins)
178 
181 
184 
185  // Stats based on successfully sent requests
187  .init(params->bandwidth_bins)
188  .flags(disableBandwidthHists ? (pdf | nozero) : pdf);
189 
192 
195 
196 
198  .init(params->latency_bins)
199  .flags(disableLatencyHists ? nozero : pdf);
200 
202  .init(params->latency_bins)
203  .flags(disableLatencyHists ? nozero : pdf);
204 
206  .init(1, params->itt_max_bin, params->itt_max_bin /
207  params->itt_bins)
208  .flags(disableITTDists ? nozero : pdf);
209 
211  .init(1, params->itt_max_bin, params->itt_max_bin /
212  params->itt_bins)
213  .flags(disableITTDists ? nozero : pdf);
214 
215  ittReqReq
216  .init(1, params->itt_max_bin, params->itt_max_bin /
217  params->itt_bins)
218  .flags(disableITTDists ? nozero : pdf);
219 
221  .init(params->outstanding_bins)
223 
225  .init(params->outstanding_bins)
227 
229  .init(params->transaction_bins)
231 
233  .init(params->transaction_bins)
235 
237  .init(0)
238  .flags(disableAddrDists ? nozero : pdf);
239 
241  .init(0)
242  .flags(disableAddrDists ? nozero : pdf);
243 }
244 
245 void
247  const ProbePoints::PacketInfo& pkt_info, bool is_atomic,
248  bool expects_response)
249 {
250  if (pkt_info.cmd.isRead()) {
251  // Increment number of observed read transactions
253  ++readTrans;
254 
255  // Get sample of burst length
257  readBurstLengthHist.sample(pkt_info.size);
258 
259  // Sample the masked address
260  if (!disableAddrDists)
261  readAddrDist.sample(pkt_info.addr & readAddrMask);
262 
263  if (!disableITTDists) {
264  // Sample value of read-read inter transaction time
265  if (timeOfLastRead != 0)
268 
269  // Sample value of req-req inter transaction time
270  if (timeOfLastReq != 0)
273  }
274  if (!is_atomic && !disableOutstandingHists && expects_response)
276 
277  } else if (pkt_info.cmd.isWrite()) {
278  // Same as for reads
280  ++writeTrans;
281 
283  writeBurstLengthHist.sample(pkt_info.size);
284 
285  // Update the bandwidth stats on the request
286  if (!disableBandwidthHists) {
287  writtenBytes += pkt_info.size;
288  totalWrittenBytes += pkt_info.size;
289  }
290 
291  // Sample the masked write address
292  if (!disableAddrDists)
294 
295  if (!disableITTDists) {
296  // Sample value of write-to-write inter transaction time
297  if (timeOfLastWrite != 0)
300 
301  // Sample value of req-to-req inter transaction time
302  if (timeOfLastReq != 0)
305  }
306 
307  if (!is_atomic && !disableOutstandingHists && expects_response)
309  }
310 }
311 
312 void
314  const ProbePoints::PacketInfo& pkt_info, Tick latency, bool is_atomic)
315 {
316  if (pkt_info.cmd.isRead()) {
317  // Decrement number of outstanding read requests
318  if (!is_atomic && !disableOutstandingHists) {
319  assert(outstandingReadReqs != 0);
321  }
322 
323  if (!disableLatencyHists)
324  readLatencyHist.sample(latency);
325 
326  // Update the bandwidth stats based on responses for reads
327  if (!disableBandwidthHists) {
328  readBytes += pkt_info.size;
329  totalReadBytes += pkt_info.size;
330  }
331 
332  } else if (pkt_info.cmd.isWrite()) {
333  // Decrement number of outstanding write requests
334  if (!is_atomic && !disableOutstandingHists) {
335  assert(outstandingWriteReqs != 0);
337  }
338 
339  if (!disableLatencyHists)
340  writeLatencyHist.sample(latency);
341  }
342 }
343 
344 Tick
346 {
347  const bool expects_response(pkt->needsResponse() &&
348  !pkt->cacheResponding());
349  ProbePoints::PacketInfo req_pkt_info(pkt);
350  ppPktReq->notify(req_pkt_info);
351 
352  const Tick delay(masterPort.sendAtomic(pkt));
353 
354  stats.updateReqStats(req_pkt_info, true, expects_response);
355  if (expects_response)
356  stats.updateRespStats(req_pkt_info, delay, true);
357 
358  // Some packets, such as WritebackDirty, don't need response.
359  assert(pkt->isResponse() || !expects_response);
360  ProbePoints::PacketInfo resp_pkt_info(pkt);
361  ppPktResp->notify(resp_pkt_info);
362  return delay;
363 }
364 
365 Tick
367 {
368  return slavePort.sendAtomicSnoop(pkt);
369 }
370 
371 bool
373 {
374  // should always see a request
375  assert(pkt->isRequest());
376 
377  // Store relevant fields of packet, because packet may be modified
378  // or even deleted when sendTiming() is called.
379  const ProbePoints::PacketInfo pkt_info(pkt);
380 
381  const bool expects_response(pkt->needsResponse() &&
382  !pkt->cacheResponding());
383 
384  // If a cache miss is served by a cache, a monitor near the memory
385  // would see a request which needs a response, but this response
386  // would not come back from the memory. Therefore we additionally
387  // have to check the cacheResponding flag
388  if (expects_response && !stats.disableLatencyHists) {
390  }
391 
392  // Attempt to send the packet
393  bool successful = masterPort.sendTimingReq(pkt);
394 
395  // If not successful, restore the sender state
396  if (!successful && expects_response && !stats.disableLatencyHists) {
397  delete pkt->popSenderState();
398  }
399 
400  if (successful) {
401  ppPktReq->notify(pkt_info);
402  }
403 
404  if (successful) {
405  DPRINTF(CommMonitor, "Forwarded %s request\n", pkt->isRead() ? "read" :
406  pkt->isWrite() ? "write" : "non read/write");
407  stats.updateReqStats(pkt_info, false, expects_response);
408  }
409  return successful;
410 }
411 
412 bool
414 {
415  // should always see responses
416  assert(pkt->isResponse());
417 
418  // Store relevant fields of packet, because packet may be modified
419  // or even deleted when sendTiming() is called.
420  const ProbePoints::PacketInfo pkt_info(pkt);
421 
422  Tick latency = 0;
423  CommMonitorSenderState* received_state =
424  dynamic_cast<CommMonitorSenderState*>(pkt->senderState);
425 
426  if (!stats.disableLatencyHists) {
427  // Restore initial sender state
428  if (received_state == NULL)
429  panic("Monitor got a response without monitor sender state\n");
430 
431  // Restore the sate
432  pkt->senderState = received_state->predecessor;
433  }
434 
435  // Attempt to send the packet
436  bool successful = slavePort.sendTimingResp(pkt);
437 
438  if (!stats.disableLatencyHists) {
439  // If packet successfully send, sample value of latency,
440  // afterwards delete sender state, otherwise restore state
441  if (successful) {
442  latency = curTick() - received_state->transmitTime;
443  DPRINTF(CommMonitor, "Latency: %d\n", latency);
444  delete received_state;
445  } else {
446  // Don't delete anything and let the packet look like we
447  // did not touch it
448  pkt->senderState = received_state;
449  }
450  }
451 
452  if (successful) {
453  ppPktResp->notify(pkt_info);
454  DPRINTF(CommMonitor, "Received %s response\n", pkt->isRead() ? "read" :
455  pkt->isWrite() ? "write" : "non read/write");
456  stats.updateRespStats(pkt_info, latency, false);
457  }
458  return successful;
459 }
460 
461 void
463 {
465 }
466 
467 bool
469 {
470  return masterPort.sendTimingSnoopResp(pkt);
471 }
472 
473 void
475 {
477 }
478 
479 bool
481 {
482  // check if the connected master port is snooping
483  return slavePort.isSnooping();
484 }
485 
488 {
489  // get the address ranges of the connected slave port
490  return masterPort.getAddrRanges();
491 }
492 
493 void
495 {
497 }
498 
499 void
501 {
503 }
504 
505 bool
507 {
508  return masterPort.tryTiming(pkt);
509 }
510 
511 void
513 {
515 }
516 
517 void
519 {
520  // the periodic stats update runs on the granularity of sample
521  // periods, but in combination with this there may also be a
522  // external resets and dumps of the stats (through schedStatEvent)
523  // causing the stats themselves to capture less than a sample
524  // period
525 
526  // only capture if we have not reset the stats during the last
527  // sample period
528  if (simTicks.value() >= samplePeriodTicks) {
529  if (!stats.disableTransactionHists) {
530  stats.readTransHist.sample(stats.readTrans);
531  stats.writeTransHist.sample(stats.writeTrans);
532  }
533 
534  if (!stats.disableBandwidthHists) {
535  stats.readBandwidthHist.sample(stats.readBytes / samplePeriod);
536  stats.writeBandwidthHist.sample(stats.writtenBytes / samplePeriod);
537  }
538 
539  if (!stats.disableOutstandingHists) {
540  stats.outstandingReadsHist.sample(stats.outstandingReadReqs);
541  stats.outstandingWritesHist.sample(stats.outstandingWriteReqs);
542  }
543  }
544 
545  // reset the sampled values
546  stats.readTrans = 0;
547  stats.writeTrans = 0;
548 
549  stats.readBytes = 0;
550  stats.writtenBytes = 0;
551 
553 }
554 
555 void
557 {
559 }
unsigned int writtenBytes
Histogram for write bandwidth per sample window.
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
void startup() override
startup() is the final initialization call before simulation.
#define DPRINTF(x,...)
Definition: trace.hh:229
const FlagsType pdf
Print the percent of the total that this entry represents.
Definition: info.hh:53
Ports are used to interface objects to each other.
Definition: port.hh:60
Tick recvAtomic(PacketPtr pkt)
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
Definition: sim_object.cc:126
bool disableBurstLengthHists
Disable flag for burst length histograms.
EventFunctionWrapper samplePeriodicEvent
Periodic event called at the end of each simulation time bin.
void sendRangeChange() const
Called by the owner to send a range change.
Definition: port.hh:286
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:175
AddrRangeList getAddrRanges() const
const std::string & name()
Definition: trace.cc:54
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: comm_monitor.cc:72
const Tick samplePeriodTicks
Length of simulation time bin.
unsigned int readBytes
Histogram for read bandwidth per sample window.
Sender state class for the monitor so that we can annotate packets with a transmit time and receive t...
Definition: comm_monitor.hh:96
bool sendTimingSnoopResp(PacketPtr pkt)
Attempt to send a timing snoop response packet to the slave port by calling its corresponding receive...
Definition: port.hh:457
void updateRespStats(const ProbePoints::PacketInfo &pkt, Tick latency, bool is_atomic)
const Params * params() const
Definition: comm_monitor.hh:72
void recvRespRetry()
bool tryTiming(PacketPtr pkt) const
Check if the slave can handle a timing request.
Definition: port.hh:451
bool isSnooping() const
Tick sendAtomicSnoop(PacketPtr pkt)
Send an atomic snoop request packet, where the data is moved and the state is updated in zero time...
Definition: port.hh:321
bool cacheResponding() const
Definition: packet.hh:591
bool recvTimingReq(PacketPtr pkt)
Histogram & init(size_type size)
Set the parameters of this histogram.
Definition: statistics.hh:2644
double s
These variables equal the number of ticks in the unit of time they&#39;re named after in a double...
Definition: core.cc:52
bool sendTimingReq(PacketPtr pkt)
Attempt to send a timing request to the slave port by calling its corresponding receive function...
Definition: port.hh:445
bool isConnected() const
Is this port currently connected to a peer?
Definition: port.hh:128
virtual void sendRetryResp()
Send a retry to the slave port that previously attempted a sendTimingResp to this master port and fai...
Definition: port.hh:463
CommMonitor(Params *params)
Constructor based on the Python params.
Definition: comm_monitor.cc:51
unsigned int outstandingWriteReqs
bool disableITTDists
Disable flag for ITT distributions.
bool isWrite() const
Definition: packet.hh:529
Derived & flags(Flags _flags)
Set the flags and marks this stat to print at the end of simulation.
Definition: statistics.hh:336
void sendRetrySnoopResp()
Send a retry to the master port that previously attempted a sendTimingSnoopResp to this slave port an...
Definition: port.hh:390
Stats::Formula simSeconds
Definition: stat_control.cc:64
bool isRead() const
Definition: packet.hh:528
void recvReqRetry()
void recvFunctionalSnoop(PacketPtr pkt)
void sendFunctionalSnoop(PacketPtr pkt) const
Send a functional snoop request packet, where the data is instantly updated everywhere in the memory ...
Definition: port.hh:337
Stats::Histogram readTransHist
Histogram of number of read transactions per time bin.
Stats::Histogram writeBurstLengthHist
Histogram of write burst lengths.
void recvRetrySnoopResp()
Stats::Scalar totalReadBytes
ProbePoints::PacketUPtr ppPktReq
Successfully forwarded request packet.
Stats::Histogram outstandingWritesHist
Histogram of outstanding write requests.
bool isRequest() const
Definition: packet.hh:531
bool sendTimingResp(PacketPtr pkt)
Attempt to send a timing response to the master port by calling its corresponding receive function...
Definition: port.hh:357
const Addr writeAddrMask
Address mask for sources of write accesses to be captured.
Tick curTick()
The current simulated tick.
Definition: core.hh:47
bool needsResponse() const
Definition: packet.hh:542
CommMonitorParams Params
Parameters of communication monitor.
Definition: comm_monitor.hh:71
SenderState * predecessor
Definition: packet.hh:405
bool recvTimingResp(PacketPtr pkt)
Stats::Histogram writeLatencyHist
Histogram of write request-to-response latencies.
bool disableLatencyHists
Disable flag for latency histograms.
bool disableAddrDists
Disable flag for address distributions.
void recvFunctional(PacketPtr pkt)
Definition: comm_monitor.cc:99
uint64_t Tick
Tick count type.
Definition: types.hh:63
bool isResponse() const
Definition: packet.hh:532
Stats::Histogram writeTransHist
Histogram of number of timing write transactions per time bin.
Group()=delete
void regProbePoints() override
Register probe points for this object.
Definition: comm_monitor.cc:80
Tick transmitTime
Tick when request is transmitted.
Distribution & init(Counter min, Counter max, Counter bkt)
Set the parameters of this distribution.
Definition: statistics.hh:2609
MonitorSlavePort slavePort
Instance of slave port, i.e.
Stats::Formula averageReadBandwidth
bool isSnooping() const
Find out if the peer master port is snooping or not.
Definition: port.hh:280
The communication monitor is a SimObject which can monitor statistics of the communication happening ...
Definition: comm_monitor.hh:65
Stats::Distribution ittWriteWrite
virtual const std::string name() const
Definition: sim_object.hh:120
bool disableTransactionHists
Disable flag for transaction histograms.
bool disableOutstandingHists
Disable flag for outstanding histograms.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:255
Stats::Distribution ittReadRead
Inter transaction time (ITT) distributions.
Statistics container.
Definition: group.hh:85
void recvRangeChange()
bool isRead() const
Definition: packet.hh:197
MonitorStats(Stats::Group *parent, const CommMonitorParams *params)
Create the monitor stats and initialise all the members that are not statistics themselves, but used to control the stats or track values during a sample period.
const Addr readAddrMask
Address mask for sources of read accesses to be captured.
MonitorMasterPort masterPort
Instance of master port, facing the memory side.
#define ADD_STAT(n,...)
Convenience macro to add a stat to a statistics group.
Definition: group.hh:69
ProbePointArg generates a point for the class of Arg.
Stats::Scalar totalWrittenBytes
AddrRangeList getAddrRanges() const
Get the address ranges of the connected slave port.
Definition: port.cc:93
bool isWrite() const
Definition: packet.hh:198
bool tryTiming(PacketPtr pkt)
void sendRetryReq()
Send a retry to the master port that previously attempted a sendTimingReq to this slave port and fail...
Definition: port.hh:380
SenderState * senderState
This packet&#39;s sender state.
Definition: packet.hh:480
Stats::Histogram readBandwidthHist
ProbeManager * getProbeManager()
Get the probe manager for this object.
Definition: sim_object.cc:120
bool disableBandwidthHists
Disable flag for the bandwidth histograms.
void sendTimingSnoopReq(PacketPtr pkt)
Attempt to send a timing snoop request packet to the master port by calling its corresponding receive...
Definition: port.hh:370
Stats::Histogram readBurstLengthHist
Histogram of read burst lengths.
SparseHistogram & init(size_type size)
Set the parameters of this histogram.
Definition: statistics.hh:2997
void schedule(Event &event, Tick when)
Definition: eventq.hh:744
void recvTimingSnoopReq(PacketPtr pkt)
ProbePoints::PacketUPtr ppPktResp
Successfully forwarded response packet.
void pushSenderState(SenderState *sender_state)
Push a new sender state to the packet and make the current sender state the predecessor of the new on...
Definition: packet.cc:319
SenderState * popSenderState()
Pop the top of the state stack and return a pointer to it.
Definition: packet.cc:327
void sendFunctional(PacketPtr pkt) const
Send a functional request packet, where the data is instantly updated everywhere in the memory system...
Definition: port.hh:439
void sample(const U &v, int n=1)
Add a value to the distribtion n times.
Definition: statistics.hh:2877
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:237
Counter value()
Definition: statistics.hh:880
void samplePeriodic()
This function is called periodically at the end of each time bin.
const double samplePeriod
Sample period in seconds.
unsigned int outstandingReadReqs
Tick recvAtomicSnoop(PacketPtr pkt)
Stats::Histogram outstandingReadsHist
Histogram of outstanding read requests.
Tick sendAtomic(PacketPtr pkt)
Send an atomic request packet, where the data is moved and the state is updated in zero time...
Definition: port.hh:427
const FlagsType nozero
Don&#39;t print if this is zero.
Definition: info.hh:59
Stats::SparseHistogram readAddrDist
Histogram of number of read accesses to addresses over time.
std::vector< Info * > stats
Definition: group.hh:177
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Definition: comm_monitor.cc:87
Stats::Histogram writeBandwidthHist
Abstract superclass for simulation objects.
Definition: sim_object.hh:96
Stats::Distribution ittReqReq
void sample(const U &v, int n=1)
Add a value to the distribtion n times.
Definition: statistics.hh:1899
Stats::SparseHistogram writeAddrDist
Histogram of number of write accesses to addresses over time.
bool recvTimingSnoopResp(PacketPtr pkt)
Stats::Value simTicks
Definition: stat_control.cc:65
MonitorStats stats
Instantiate stats.
Stats::Formula averageWriteBandwidth
A struct to hold on to the essential fields from a packet, so that the packet and underlying request ...
Definition: mem.hh:54
Stats::Histogram readLatencyHist
Histogram of read request-to-response latencies.
void updateReqStats(const ProbePoints::PacketInfo &pkt, bool is_atomic, bool expects_response)

Generated on Fri Feb 28 2020 16:27:02 for gem5 by doxygen 1.8.13