3c3,4
< * All rights reserved
---
> * Copyright (c) 2016 Google Inc.
> * All rights reserved.
38a40
> * Rahul Thakur
54,55d55
< readAddrMask(params->read_addr_mask),
< writeAddrMask(params->write_addr_mask),
115a116,214
> void
> CommMonitor::MonitorStats::updateReqStats(
> const ProbePoints::PacketInfo& pkt_info, bool is_atomic,
> bool expects_response)
> {
> if (pkt_info.cmd.isRead()) {
> // Increment number of observed read transactions
> if (!disableTransactionHists)
> ++readTrans;
>
> // Get sample of burst length
> if (!disableBurstLengthHists)
> readBurstLengthHist.sample(pkt_info.size);
>
> // Sample the masked address
> if (!disableAddrDists)
> readAddrDist.sample(pkt_info.addr & readAddrMask);
>
> if (!disableITTDists) {
> // Sample value of read-read inter transaction time
> if (timeOfLastRead != 0)
> ittReadRead.sample(curTick() - timeOfLastRead);
> timeOfLastRead = curTick();
>
> // Sample value of req-req inter transaction time
> if (timeOfLastReq != 0)
> ittReqReq.sample(curTick() - timeOfLastReq);
> timeOfLastReq = curTick();
> }
> if (!is_atomic && !disableOutstandingHists && expects_response)
> ++outstandingReadReqs;
>
> } else if (pkt_info.cmd.isWrite()) {
> // Same as for reads
> if (!disableTransactionHists)
> ++writeTrans;
>
> if (!disableBurstLengthHists)
> writeBurstLengthHist.sample(pkt_info.size);
>
> // Update the bandwidth stats on the request
> if (!disableBandwidthHists) {
> writtenBytes += pkt_info.size;
> totalWrittenBytes += pkt_info.size;
> }
>
> // Sample the masked write address
> if (!disableAddrDists)
> writeAddrDist.sample(pkt_info.addr & writeAddrMask);
>
> if (!disableITTDists) {
> // Sample value of write-to-write inter transaction time
> if (timeOfLastWrite != 0)
> ittWriteWrite.sample(curTick() - timeOfLastWrite);
> timeOfLastWrite = curTick();
>
> // Sample value of req-to-req inter transaction time
> if (timeOfLastReq != 0)
> ittReqReq.sample(curTick() - timeOfLastReq);
> timeOfLastReq = curTick();
> }
>
> if (!is_atomic && !disableOutstandingHists && expects_response)
> ++outstandingWriteReqs;
> }
> }
>
> void
> CommMonitor::MonitorStats::updateRespStats(
> const ProbePoints::PacketInfo& pkt_info, Tick latency, bool is_atomic)
> {
> if (pkt_info.cmd.isRead()) {
> // Decrement number of outstanding read requests
> if (!is_atomic && !disableOutstandingHists) {
> assert(outstandingReadReqs != 0);
> --outstandingReadReqs;
> }
>
> if (!disableLatencyHists)
> readLatencyHist.sample(latency);
>
> // Update the bandwidth stats based on responses for reads
> if (!disableBandwidthHists) {
> readBytes += pkt_info.size;
> totalReadBytes += pkt_info.size;
> }
>
> } else if (pkt_info.cmd.isWrite()) {
> // Decrement number of outstanding write requests
> if (!is_atomic && !disableOutstandingHists) {
> assert(outstandingWriteReqs != 0);
> --outstandingWriteReqs;
> }
>
> if (!disableLatencyHists)
> writeLatencyHist.sample(latency);
> }
> }
>
118a218,219
> const bool expects_response(pkt->needsResponse() &&
> !pkt->cacheResponding());
122a224,228
>
> stats.updateReqStats(req_pkt_info, true, expects_response);
> if (expects_response)
> stats.updateRespStats(req_pkt_info, delay, true);
>
147,148c253,254
< const bool expects_response(
< pkt->needsResponse() && !pkt->cacheResponding());
---
> const bool expects_response(pkt->needsResponse() &&
> !pkt->cacheResponding());
170,248c276,279
< if (successful && is_read) {
< DPRINTF(CommMonitor, "Forwarded read request\n");
<
< // Increment number of observed read transactions
< if (!stats.disableTransactionHists) {
< ++stats.readTrans;
< }
<
< // Get sample of burst length
< if (!stats.disableBurstLengthHists) {
< stats.readBurstLengthHist.sample(pkt_info.size);
< }
<
< // Sample the masked address
< if (!stats.disableAddrDists) {
< stats.readAddrDist.sample(pkt_info.addr & readAddrMask);
< }
<
< // If it needs a response increment number of outstanding read
< // requests
< if (!stats.disableOutstandingHists && expects_response) {
< ++stats.outstandingReadReqs;
< }
<
< if (!stats.disableITTDists) {
< // Sample value of read-read inter transaction time
< if (stats.timeOfLastRead != 0) {
< stats.ittReadRead.sample(curTick() - stats.timeOfLastRead);
< }
< stats.timeOfLastRead = curTick();
<
< // Sample value of req-req inter transaction time
< if (stats.timeOfLastReq != 0) {
< stats.ittReqReq.sample(curTick() - stats.timeOfLastReq);
< }
< stats.timeOfLastReq = curTick();
< }
< } else if (successful && is_write) {
< DPRINTF(CommMonitor, "Forwarded write request\n");
<
< // Same as for reads
< if (!stats.disableTransactionHists) {
< ++stats.writeTrans;
< }
<
< if (!stats.disableBurstLengthHists) {
< stats.writeBurstLengthHist.sample(pkt_info.size);
< }
<
< // Update the bandwidth stats on the request
< if (!stats.disableBandwidthHists) {
< stats.writtenBytes += pkt_info.size;
< stats.totalWrittenBytes += pkt_info.size;
< }
<
< // Sample the masked write address
< if (!stats.disableAddrDists) {
< stats.writeAddrDist.sample(pkt_info.addr & writeAddrMask);
< }
<
< if (!stats.disableOutstandingHists && expects_response) {
< ++stats.outstandingWriteReqs;
< }
<
< if (!stats.disableITTDists) {
< // Sample value of write-to-write inter transaction time
< if (stats.timeOfLastWrite != 0) {
< stats.ittWriteWrite.sample(curTick() - stats.timeOfLastWrite);
< }
< stats.timeOfLastWrite = curTick();
<
< // Sample value of req-to-req inter transaction time
< if (stats.timeOfLastReq != 0) {
< stats.ittReqReq.sample(curTick() - stats.timeOfLastReq);
< }
< stats.timeOfLastReq = curTick();
< }
< } else if (successful) {
< DPRINTF(CommMonitor, "Forwarded non read/write request\n");
---
> if (successful) {
> DPRINTF(CommMonitor, "Forwarded %s request\n",
> (is_read ? "read" : (is_write ? "write" : "non read/write")));
> stats.updateReqStats(pkt_info, false, expects_response);
250d280
<
297a328,330
> DPRINTF(CommMonitor, "Received %s response\n",
> (is_read ? "Read" : (is_write ? "Write" : "non read/write")));
> stats.updateRespStats(pkt_info, latency, false);
299,331d331
<
< if (successful && is_read) {
< // Decrement number of outstanding read requests
< DPRINTF(CommMonitor, "Received read response\n");
< if (!stats.disableOutstandingHists) {
< assert(stats.outstandingReadReqs != 0);
< --stats.outstandingReadReqs;
< }
<
< if (!stats.disableLatencyHists) {
< stats.readLatencyHist.sample(latency);
< }
<
< // Update the bandwidth stats based on responses for reads
< if (!stats.disableBandwidthHists) {
< stats.readBytes += pkt_info.size;
< stats.totalReadBytes += pkt_info.size;
< }
<
< } else if (successful && is_write) {
< // Decrement number of outstanding write requests
< DPRINTF(CommMonitor, "Received write response\n");
< if (!stats.disableOutstandingHists) {
< assert(stats.outstandingWriteReqs != 0);
< --stats.outstandingWriteReqs;
< }
<
< if (!stats.disableLatencyHists) {
< stats.writeLatencyHist.sample(latency);
< }
< } else if (successful) {
< DPRINTF(CommMonitor, "Received non read/write response\n");
< }