stat_control.cc revision 729
16019SN/A/* 26019SN/A * Copyright (c) 2003 The Regents of The University of Michigan 37134Sgblack@eecs.umich.edu * All rights reserved. 47134Sgblack@eecs.umich.edu * 57134Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67134Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 77134Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 87134Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 97134Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 107134Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 117134Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 127134Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 137134Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 147134Sgblack@eecs.umich.edu * this software without specific prior written permission. 156019SN/A * 166019SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 176019SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 186019SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 196019SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 206019SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 216019SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 226019SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 236019SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 246019SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256019SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 266019SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276019SN/A */ 286019SN/A 296019SN/A// This file will contain default statistics for the simulator that 306019SN/A// don't really belong to a specific simulator object 316019SN/A 326019SN/A#include <fstream> 336019SN/A#include <iostream> 346019SN/A#include <list> 356019SN/A 366019SN/A#include "base/callback.hh" 376019SN/A#include "base/hostinfo.hh" 386019SN/A#include "base/statistics.hh" 396019SN/A#include "base/str.hh" 406019SN/A#include "base/time.hh" 416019SN/A#include "base/stats/output.hh" 426308SN/A#include "cpu/base_cpu.hh" 436308SN/A#include "sim/eventq.hh" 446309SN/A#include "sim/sim_object.hh" 456309SN/A#include "sim/stat_control.hh" 466309SN/A#include "sim/universe.hh" 476309SN/A 486309SN/Ausing namespace std; 497134Sgblack@eecs.umich.edu 507134Sgblack@eecs.umich.eduStats::Formula hostInstRate; 516309SN/AStats::Formula hostTickRate; 526309SN/AStats::Value hostMemory; 536309SN/AStats::Value hostSeconds; 547296Sgblack@eecs.umich.edu 556309SN/AStats::Value simTicks; 566309SN/AStats::Value simInsts; 577296Sgblack@eecs.umich.eduStats::Value simFreq; 587134Sgblack@eecs.umich.eduStats::Formula simSeconds; 596309SN/A 606309SN/Anamespace Stats { 616309SN/A 627296Sgblack@eecs.umich.eduTime statTime(true); 637174Sgblack@eecs.umich.eduTick startTick; 647174Sgblack@eecs.umich.edu 657296Sgblack@eecs.umich.educlass SimTicksReset : public Callback 667174Sgblack@eecs.umich.edu{ 677174Sgblack@eecs.umich.edu public: 687174Sgblack@eecs.umich.edu void process() 697174Sgblack@eecs.umich.edu { 706754SN/A statTime.set(); 717296Sgblack@eecs.umich.edu startTick = curTick; 727134Sgblack@eecs.umich.edu } 737296Sgblack@eecs.umich.edu}; 747134Sgblack@eecs.umich.edu 757134Sgblack@eecs.umich.edudouble 767296Sgblack@eecs.umich.edustatElapsedTime() 776754SN/A{ 786754SN/A Time now(true); 796754SN/A Time elapsed = now - statTime; 806754SN/A return elapsed(); 816754SN/A} 827134Sgblack@eecs.umich.edu 836754SN/ASimTicksReset simTicksReset; 846754SN/A 856754SN/Avoid 867296Sgblack@eecs.umich.eduInitSimStats() 876309SN/A{ 886309SN/A simInsts 897296Sgblack@eecs.umich.edu .functor(BaseCPU::numSimulatedInstructions) 907303Sgblack@eecs.umich.edu .name("sim_insts") 917134Sgblack@eecs.umich.edu .desc("Number of instructions simulated") 926309SN/A .precision(0) 936309SN/A .prereq(simInsts) 946309SN/A ; 957296Sgblack@eecs.umich.edu 967174Sgblack@eecs.umich.edu simSeconds 977174Sgblack@eecs.umich.edu .name("sim_seconds") 987296Sgblack@eecs.umich.edu .desc("Number of seconds simulated") 997303Sgblack@eecs.umich.edu ; 1007174Sgblack@eecs.umich.edu 1017174Sgblack@eecs.umich.edu simFreq 1027174Sgblack@eecs.umich.edu .scalar(ticksPerSecond) 1037174Sgblack@eecs.umich.edu .name("sim_freq") 1047174Sgblack@eecs.umich.edu .desc("Frequency of simulated ticks") 1057174Sgblack@eecs.umich.edu ; 1067174Sgblack@eecs.umich.edu 1077174Sgblack@eecs.umich.edu simTicks 1087174Sgblack@eecs.umich.edu .scalar(curTick) 1097174Sgblack@eecs.umich.edu .name("sim_ticks") 1107174Sgblack@eecs.umich.edu .desc("Number of ticks simulated") 1117174Sgblack@eecs.umich.edu ; 1127174Sgblack@eecs.umich.edu 1137174Sgblack@eecs.umich.edu hostInstRate 1147174Sgblack@eecs.umich.edu .name("host_inst_rate") 1157174Sgblack@eecs.umich.edu .desc("Simulator instruction rate (inst/s)") 1167174Sgblack@eecs.umich.edu .precision(0) 1177174Sgblack@eecs.umich.edu .prereq(simInsts) 1187174Sgblack@eecs.umich.edu ; 1196309SN/A 1206308SN/A hostMemory 1216308SN/A .functor(memUsage) 1226308SN/A .name("host_mem_usage") 1236308SN/A .desc("Number of bytes of host memory used") 1246308SN/A .prereq(hostMemory) 1256308SN/A ; 1266308SN/A 1276308SN/A hostSeconds 1286308SN/A .functor(statElapsedTime) 1296308SN/A .name("host_seconds") 1306308SN/A .desc("Real time elapsed on the host") 1316308SN/A .precision(2) 1326308SN/A ; 1336308SN/A 1346308SN/A hostTickRate 1356308SN/A .name("host_tick_rate") 1366308SN/A .desc("Simulator tick rate (ticks/s)") 1376308SN/A .precision(0) 1386308SN/A ; 1396308SN/A 1406308SN/A simSeconds = simTicks / simFreq; 1417134Sgblack@eecs.umich.edu hostInstRate = simInsts / hostSeconds; 1427134Sgblack@eecs.umich.edu hostTickRate = simTicks / hostSeconds; 1436308SN/A 1446308SN/A registerResetCallback(&simTicksReset); 1456308SN/A} 1466019SN/A 1477134Sgblack@eecs.umich.educlass StatEvent : public Event 1487170Sgblack@eecs.umich.edu{ 1497134Sgblack@eecs.umich.edu protected: 1507134Sgblack@eecs.umich.edu int flags; 1517179Sgblack@eecs.umich.edu Tick repeat; 1527179Sgblack@eecs.umich.edu 1537179Sgblack@eecs.umich.edu public: 1547179Sgblack@eecs.umich.edu StatEvent(int _flags, Tick _when, Tick _repeat); 1556019SN/A virtual void process(); 156 virtual const char *description(); 157}; 158 159StatEvent::StatEvent(int _flags, Tick _when, Tick _repeat) 160 : Event(&mainEventQueue, Stat_Event_Pri), 161 flags(_flags), repeat(_repeat) 162{ 163 setFlags(AutoDelete); 164 schedule(_when); 165} 166 167const char * 168StatEvent::description() 169{ 170 return "Statistics dump and/or reset"; 171} 172 173void 174StatEvent::process() 175{ 176 if (flags & Stats::Dump) 177 DumpNow(); 178 179 if (flags & Stats::Reset) 180 reset(); 181 182 if (repeat) 183 schedule(curTick + repeat); 184} 185 186list<Output *> OutputList; 187 188void 189DumpNow() 190{ 191 list<Output *>::iterator i = OutputList.begin(); 192 list<Output *>::iterator end = OutputList.end(); 193 for (; i != end; ++i) { 194 Output *output = *i; 195 if (!output->valid()) 196 continue; 197 198 output->output(); 199 } 200} 201 202void 203SetupEvent(int flags, Tick when, Tick repeat) 204{ 205 new StatEvent(flags, when, repeat); 206} 207 208/* namespace Stats */ } 209 210extern "C" void 211debugDumpStats() 212{ 213 Stats::DumpNow(); 214} 215 216