1/* 2 * Copyright (c) 2016 Google Inc. 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and 6 * shall not be construed as granting a license to any other 7 * intellectual property including but not limited to intellectual 8 * property relating to a hardware implementation of the 9 * functionality of the software licensed hereunder. You may use the 10 * software subject to the license terms below provided that you 11 * ensure that this notice is replicated unmodified and in its 12 * entirety in all distributions of the software, modified or 13 * unmodified, in source code or in binary form. 14 * 15 * Redistribution and use in source and binary forms, with or without 16 * modification, are permitted provided that the following conditions are 17 * met: redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer; 19 * redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution; 22 * neither the name of the copyright holders nor the names of its 23 * contributors may be used to endorse or promote products derived from 24 * this software without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 30 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 31 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Authors: Rahul Thakur 39 */ 40 41#ifndef __MEM_PROBES_MEM_FOOTPRINT_HH__ 42#define __MEM_PROBES_MEM_FOOTPRINT_HH__ 43 44#include <unordered_set> 45 46#include "base/callback.hh" 47#include "mem/packet.hh" 48#include "mem/probes/base.hh" 49#include "sim/stats.hh" 50#include "sim/system.hh" 51 52struct MemFootprintProbeParams; 53 54/// Probe to track footprint of accessed memory 55/// Two granularity of footprint measurement i.e. cache line and page 56class MemFootprintProbe : public BaseMemProbe 57{ 58 public: 59 typedef std::unordered_set<Addr> AddrSet; 60 61 MemFootprintProbe(MemFootprintProbeParams *p); 62 void regStats() override; 63 // Fix footprint tracking state on stat reset 64 void statReset(); 65 66 protected: 67 /// Cache Line size for footprint measurement (log2) 68 const uint8_t cacheLineSizeLg2; 69 /// Page size for footprint measurement (log2) 70 const uint8_t pageSizeLg2; 71 const uint64_t totalCacheLinesInMem; 72 const uint64_t totalPagesInMem; 73 74 void insertAddr(Addr addr, AddrSet *set, uint64_t limit); 75 void handleRequest(const ProbePoints::PacketInfo &pkt_info) override; 76 77 /// Footprint at cache line size granularity 78 Stats::Scalar fpCacheLine; 79 /// Footprint at cache line size granularity, since simulation begin 80 Stats::Scalar fpCacheLineTotal; 81 /// Footprint at page granularity 82 Stats::Scalar fpPage; 83 /// Footprint at page granularity, since simulation begin 84 Stats::Scalar fpPageTotal; 85 86 // Addr set to track unique cache lines accessed 87 AddrSet cacheLines; 88 // Addr set to track unique cache lines accessed since simulation begin 89 AddrSet cacheLinesAll; 90 // Addr set to track unique pages accessed 91 AddrSet pages; 92 // Addr set to track unique pages accessed since simulation begin 93 AddrSet pagesAll; 94 System *system; 95}; 96 97#endif //__MEM_PROBES_MEM_FOOTPRINT_HH__ 98