kernel_stats.hh revision 1917
12SN/A/* 28703Sandreas.hansson@arm.com * Copyright (c) 2004-2005 The Regents of The University of Michigan 38703Sandreas.hansson@arm.com * All rights reserved. 48703Sandreas.hansson@arm.com * 58703Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 68703Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 78703Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 88703Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 98703Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 108703Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 118703Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 128703Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 138703Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 141762SN/A * this software without specific prior written permission. 157897Shestness@cs.utexas.edu * 162SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272SN/A */ 282SN/A 292SN/A#ifndef __KERNEL_STATS_HH__ 302SN/A#define __KERNEL_STATS_HH__ 312SN/A 322SN/A#include <map> 332SN/A#include <stack> 342SN/A#include <string> 352SN/A#include <vector> 362SN/A 372SN/A#include "cpu/static_inst.hh" 382SN/A 392SN/Aclass BaseCPU; 402665Ssaidi@eecs.umich.educlass ExecContext; 412665Ssaidi@eecs.umich.educlass FnEvent; 422665Ssaidi@eecs.umich.edu// What does kernel stats expect is included? 432665Ssaidi@eecs.umich.educlass System; 447897Shestness@cs.utexas.eduenum Fault; 452SN/A 462SN/Anamespace Kernel { 472SN/A 482SN/Aenum cpu_mode { kernel, user, idle, interrupt, cpu_mode_num }; 492SN/Aextern const char *modestr[]; 502SN/A 5175SN/Aclass Binning 522SN/A{ 532439SN/A private: 542439SN/A std::string myname; 55603SN/A System *system; 562986Sgblack@eecs.umich.edu 57603SN/A private: 584762Snate@binkert.org // lisa's binning stuff 598703Sandreas.hansson@arm.com struct fnCall 602520SN/A { 614762Snate@binkert.org Stats::MainBin *myBin; 626658Snate@binkert.org std::string name; 632378SN/A }; 64722SN/A 652378SN/A struct SWContext 66312SN/A { 671634SN/A Counter calls; 682680Sktlim@umich.edu std::stack<fnCall *> callStack; 691634SN/A }; 702521SN/A 712378SN/A std::map<const std::string, Stats::MainBin *> fnBins; 722378SN/A std::map<const Addr, SWContext *> swCtxMap; 73803SN/A 747723SAli.Saidi@ARM.com std::multimap<const std::string, std::string> callerMap; 757723SAli.Saidi@ARM.com void populateMap(std::string caller, std::string callee); 763960Sgblack@eecs.umich.edu 772378SN/A std::vector<FnEvent *> fnEvents; 786658Snate@binkert.org 792SN/A Stats::Scalar<> fnCalls; 808703Sandreas.hansson@arm.com 812SN/A Stats::MainBin *getBin(const std::string &name); 828703Sandreas.hansson@arm.com bool findCaller(std::string, std::string) const; 838703Sandreas.hansson@arm.com 848703Sandreas.hansson@arm.com SWContext *findContext(Addr pcb); 858703Sandreas.hansson@arm.com bool addContext(Addr pcb, SWContext *ctx) 868703Sandreas.hansson@arm.com { 878703Sandreas.hansson@arm.com return (swCtxMap.insert(std::make_pair(pcb, ctx))).second; 888703Sandreas.hansson@arm.com } 898703Sandreas.hansson@arm.com 908703Sandreas.hansson@arm.com void remContext(Addr pcb) 918703Sandreas.hansson@arm.com { 928703Sandreas.hansson@arm.com swCtxMap.erase(pcb); 938703Sandreas.hansson@arm.com } 948703Sandreas.hansson@arm.com 958703Sandreas.hansson@arm.com void dumpState() const; 968703Sandreas.hansson@arm.com 978703Sandreas.hansson@arm.com SWContext *swctx; 988703Sandreas.hansson@arm.com std::vector<std::string> binned_fns; 998703Sandreas.hansson@arm.com 1008703Sandreas.hansson@arm.com private: 1018703Sandreas.hansson@arm.com Stats::MainBin *modeBin[cpu_mode_num]; 1028703Sandreas.hansson@arm.com 1038703Sandreas.hansson@arm.com public: 1048703Sandreas.hansson@arm.com const bool bin; 1058703Sandreas.hansson@arm.com const bool fnbin; 1068703Sandreas.hansson@arm.com 1078703Sandreas.hansson@arm.com cpu_mode themode; 1088703Sandreas.hansson@arm.com void palSwapContext(ExecContext *xc); 1098703Sandreas.hansson@arm.com void execute(ExecContext *xc, StaticInstPtr<TheISA> inst); 1108703Sandreas.hansson@arm.com void call(ExecContext *xc, Stats::MainBin *myBin); 111603SN/A void changeMode(cpu_mode mode); 1122901Ssaidi@eecs.umich.edu 1138703Sandreas.hansson@arm.com public: 1148703Sandreas.hansson@arm.com Binning(System *sys); 1158703Sandreas.hansson@arm.com virtual ~Binning(); 1168703Sandreas.hansson@arm.com 1178703Sandreas.hansson@arm.com const std::string name() const { return myname; } 1188703Sandreas.hansson@arm.com void regStats(const std::string &name); 1198703Sandreas.hansson@arm.com 1208703Sandreas.hansson@arm.com public: 1218703Sandreas.hansson@arm.com virtual void serialize(std::ostream &os); 1228703Sandreas.hansson@arm.com virtual void unserialize(Checkpoint *cp, const std::string §ion); 1238703Sandreas.hansson@arm.com}; 1248703Sandreas.hansson@arm.com 1258703Sandreas.hansson@arm.comclass Statistics : public Serializable 1268703Sandreas.hansson@arm.com{ 1278703Sandreas.hansson@arm.com friend class Binning; 1282902Ssaidi@eecs.umich.edu 1292902Ssaidi@eecs.umich.edu private: 1304762Snate@binkert.org std::string myname; 1314762Snate@binkert.org ExecContext *xc; 1324762Snate@binkert.org 1334762Snate@binkert.org Addr idleProcess; 1344762Snate@binkert.org cpu_mode themode; 1354762Snate@binkert.org Tick lastModeTick; 1362901Ssaidi@eecs.umich.edu bool bin_int; 1372901Ssaidi@eecs.umich.edu 1382901Ssaidi@eecs.umich.edu void changeMode(cpu_mode newmode); 1392901Ssaidi@eecs.umich.edu 1402901Ssaidi@eecs.umich.edu private: 1414762Snate@binkert.org Stats::Scalar<> _arm; 1422901Ssaidi@eecs.umich.edu Stats::Scalar<> _quiesce; 1432521SN/A Stats::Scalar<> _ivlb; 1442SN/A Stats::Scalar<> _ivle; 1452SN/A Stats::Scalar<> _hwrei; 1462680Sktlim@umich.edu 1475714Shsul@eecs.umich.edu Stats::Vector<> _iplCount; 1481806SN/A Stats::Vector<> _iplGood; 1496221Snate@binkert.org Stats::Vector<> _iplTicks; 1505713Shsul@eecs.umich.edu Stats::Formula _iplUsed; 1515713Shsul@eecs.umich.edu 1525713Shsul@eecs.umich.edu Stats::Vector<> _callpal; 1535713Shsul@eecs.umich.edu Stats::Vector<> _syscall; 1545714Shsul@eecs.umich.edu Stats::Vector<> _faults; 1551806SN/A 1566227Snate@binkert.org Stats::Vector<> _mode; 1575714Shsul@eecs.umich.edu Stats::Vector<> _modeGood; 1581806SN/A Stats::Formula _modeFraction; 159180SN/A Stats::Vector<> _modeTicks; 1606029Ssteve.reinhardt@amd.com 1616029Ssteve.reinhardt@amd.com Stats::Scalar<> _swap_context; 1626029Ssteve.reinhardt@amd.com 1636029Ssteve.reinhardt@amd.com private: 1648460SAli.Saidi@ARM.com int iplLast; 1658460SAli.Saidi@ARM.com Tick iplLastTick; 1668460SAli.Saidi@ARM.com 1678460SAli.Saidi@ARM.com public: 1688460SAli.Saidi@ARM.com Statistics(ExecContext *context); 1698460SAli.Saidi@ARM.com 1708460SAli.Saidi@ARM.com const std::string name() const { return myname; } 1718460SAli.Saidi@ARM.com void regStats(const std::string &name); 1722378SN/A 1732378SN/A public: 1742378SN/A void arm() { _arm++; } 1752378SN/A void quiesce() { _quiesce++; } 1762520SN/A void ivlb() { _ivlb++; } 1772520SN/A void ivle() { _ivle++; } 1787723SAli.Saidi@ARM.com void hwrei() { _hwrei++; } 1797723SAli.Saidi@ARM.com void fault(Fault fault) { _faults[fault]++; } 1802520SN/A void swpipl(int ipl); 1811885SN/A void mode(cpu_mode newmode); 1821070SN/A void context(Addr oldpcbb, Addr newpcbb); 183954SN/A void callpal(int code); 1841070SN/A 1851070SN/A void setIdleProcess(Addr idle); 1861070SN/A 1871070SN/A public: 1881070SN/A virtual void serialize(std::ostream &os); 1891070SN/A virtual void unserialize(Checkpoint *cp, const std::string §ion); 1901070SN/A}; 1911070SN/A 1921070SN/A/* end namespace Kernel */ } 1931070SN/A 1941070SN/A#endif // __KERNEL_STATS_HH__ 1951070SN/A