stat_control.cc revision 7823
1695SN/A/* 21762SN/A * Copyright (c) 2004-2005 The Regents of The University of Michigan 3695SN/A * All rights reserved. 4695SN/A * 5695SN/A * Redistribution and use in source and binary forms, with or without 6695SN/A * modification, are permitted provided that the following conditions are 7695SN/A * met: redistributions of source code must retain the above copyright 8695SN/A * notice, this list of conditions and the following disclaimer; 9695SN/A * redistributions in binary form must reproduce the above copyright 10695SN/A * notice, this list of conditions and the following disclaimer in the 11695SN/A * documentation and/or other materials provided with the distribution; 12695SN/A * neither the name of the copyright holders nor the names of its 13695SN/A * contributors may be used to endorse or promote products derived from 14695SN/A * this software without specific prior written permission. 15695SN/A * 16695SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17695SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18695SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19695SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20695SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21695SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22695SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23695SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24695SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25695SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26695SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Nathan Binkert 29695SN/A */ 30695SN/A 31695SN/A// This file will contain default statistics for the simulator that 32695SN/A// don't really belong to a specific simulator object 33695SN/A 34695SN/A#include <fstream> 35695SN/A#include <iostream> 36695SN/A#include <list> 37695SN/A 38695SN/A#include "base/callback.hh" 39695SN/A#include "base/hostinfo.hh" 40695SN/A#include "base/statistics.hh" 41695SN/A#include "base/time.hh" 427768SAli.Saidi@ARM.com 437768SAli.Saidi@ARM.com#include "config/the_isa.hh" 447768SAli.Saidi@ARM.com#if THE_ISA == NO_ISA 457768SAli.Saidi@ARM.com#include "arch/noisa/cpu_dummy.hh" 467768SAli.Saidi@ARM.com#else 471717SN/A#include "cpu/base.hh" 487768SAli.Saidi@ARM.com#endif 497768SAli.Saidi@ARM.com 50695SN/A#include "sim/eventq.hh" 517822Ssteve.reinhardt@amd.com#include "sim/stat_control.hh" 52695SN/A 53695SN/Ausing namespace std; 54695SN/A 55729SN/AStats::Formula simSeconds; 567068Snate@binkert.orgStats::Value simTicks; 577068Snate@binkert.orgStats::Value simFreq; 58695SN/A 59729SN/Anamespace Stats { 60695SN/A 61695SN/ATime statTime(true); 62695SN/ATick startTick; 63695SN/A 644078Sbinkertn@umich.edustruct SimTicksReset : public Callback 65695SN/A{ 66695SN/A void process() 67695SN/A { 68695SN/A statTime.set(); 697823Ssteve.reinhardt@amd.com startTick = curTick(); 70695SN/A } 71695SN/A}; 72695SN/A 73695SN/Adouble 74695SN/AstatElapsedTime() 75695SN/A{ 76695SN/A Time now(true); 77695SN/A Time elapsed = now - statTime; 78695SN/A return elapsed(); 79695SN/A} 80695SN/A 811020SN/ATick 821020SN/AstatElapsedTicks() 831020SN/A{ 847823Ssteve.reinhardt@amd.com return curTick() - startTick; 851020SN/A} 861020SN/A 87695SN/ASimTicksReset simTicksReset; 88695SN/A 895883Snate@binkert.orgstruct Global 905883Snate@binkert.org{ 915883Snate@binkert.org Stats::Formula hostInstRate; 925883Snate@binkert.org Stats::Formula hostTickRate; 935883Snate@binkert.org Stats::Value hostMemory; 945883Snate@binkert.org Stats::Value hostSeconds; 955883Snate@binkert.org 965883Snate@binkert.org Stats::Value simInsts; 975883Snate@binkert.org 985883Snate@binkert.org Global(); 995883Snate@binkert.org}; 1005883Snate@binkert.org 1015883Snate@binkert.orgGlobal::Global() 102695SN/A{ 103695SN/A simInsts 104707SN/A .functor(BaseCPU::numSimulatedInstructions) 105695SN/A .name("sim_insts") 106695SN/A .desc("Number of instructions simulated") 107695SN/A .precision(0) 108695SN/A .prereq(simInsts) 109695SN/A ; 110695SN/A 111695SN/A simSeconds 112695SN/A .name("sim_seconds") 113695SN/A .desc("Number of seconds simulated") 114695SN/A ; 115695SN/A 116707SN/A simFreq 1177064Snate@binkert.org .scalar(SimClock::Frequency) 118707SN/A .name("sim_freq") 119707SN/A .desc("Frequency of simulated ticks") 120707SN/A ; 121707SN/A 122695SN/A simTicks 1231020SN/A .functor(statElapsedTicks) 124695SN/A .name("sim_ticks") 125695SN/A .desc("Number of ticks simulated") 126695SN/A ; 127695SN/A 128695SN/A hostInstRate 129695SN/A .name("host_inst_rate") 130695SN/A .desc("Simulator instruction rate (inst/s)") 131695SN/A .precision(0) 132695SN/A .prereq(simInsts) 133695SN/A ; 134695SN/A 135695SN/A hostMemory 136707SN/A .functor(memUsage) 137695SN/A .name("host_mem_usage") 138695SN/A .desc("Number of bytes of host memory used") 139695SN/A .prereq(hostMemory) 140695SN/A ; 141695SN/A 142695SN/A hostSeconds 143707SN/A .functor(statElapsedTime) 144695SN/A .name("host_seconds") 145695SN/A .desc("Real time elapsed on the host") 146695SN/A .precision(2) 147695SN/A ; 148695SN/A 149695SN/A hostTickRate 150695SN/A .name("host_tick_rate") 151695SN/A .desc("Simulator tick rate (ticks/s)") 152695SN/A .precision(0) 153695SN/A ; 154695SN/A 155707SN/A simSeconds = simTicks / simFreq; 156695SN/A hostInstRate = simInsts / hostSeconds; 157695SN/A hostTickRate = simTicks / hostSeconds; 158695SN/A 159695SN/A registerResetCallback(&simTicksReset); 160695SN/A} 161695SN/A 1625883Snate@binkert.orgvoid 1635883Snate@binkert.orginitSimStats() 1645883Snate@binkert.org{ 1655883Snate@binkert.org static Global global; 1665883Snate@binkert.org} 1675883Snate@binkert.org 1687822Ssteve.reinhardt@amd.comclass StatEvent : public Event 169695SN/A{ 1704078Sbinkertn@umich.edu private: 1714078Sbinkertn@umich.edu bool dump; 1724078Sbinkertn@umich.edu bool reset; 173695SN/A Tick repeat; 174695SN/A 175695SN/A public: 1767822Ssteve.reinhardt@amd.com StatEvent(bool _dump, bool _reset, Tick _repeat) 1775606Snate@binkert.org : Event(Stat_Event_Pri), dump(_dump), reset(_reset), repeat(_repeat) 1784078Sbinkertn@umich.edu { 1794078Sbinkertn@umich.edu setFlags(AutoDelete); 1804078Sbinkertn@umich.edu } 1814078Sbinkertn@umich.edu 1824078Sbinkertn@umich.edu virtual void 1834078Sbinkertn@umich.edu process() 1844078Sbinkertn@umich.edu { 1854078Sbinkertn@umich.edu if (dump) 1864078Sbinkertn@umich.edu Stats::dump(); 1874078Sbinkertn@umich.edu 1884078Sbinkertn@umich.edu if (reset) 1894078Sbinkertn@umich.edu Stats::reset(); 1904078Sbinkertn@umich.edu 1915606Snate@binkert.org if (repeat) { 1927823Ssteve.reinhardt@amd.com Stats::schedStatEvent(dump, reset, curTick() + repeat, repeat); 1935606Snate@binkert.org } 1944078Sbinkertn@umich.edu } 195695SN/A}; 196695SN/A 1974078Sbinkertn@umich.eduvoid 1987822Ssteve.reinhardt@amd.comschedStatEvent(bool dump, bool reset, Tick when, Tick repeat) 199695SN/A{ 2007822Ssteve.reinhardt@amd.com Event *event = new StatEvent(dump, reset, repeat); 2015606Snate@binkert.org mainEventQueue.schedule(event, when); 202695SN/A} 203695SN/A 2047811Ssteve.reinhardt@amd.com} // namespace Stats 205