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