From aeb8e8ccb7d9a69e44c3943a5e82b6e58e7082f3 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Wed, 24 Mar 2004 23:29:10 -0800 Subject: Minor cleanup from building & diffing behavior on various platforms. base/hashmap.hh: gcc on Alpha doesn't always define __LP64__, even though it arguably should. cpu/exec_context.cc: Clear register file on non-full-system too (even though it typically gets overwritten by the initial regs from the Process object). sim/process.cc: Clear initial register copy in Process object. Not all regs get initialized when the executable is loaded. --HG-- extra : convert_revision : f1fe4734a5ea81331d70994cb5284b1e9db0dceb --- sim/process.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'sim') diff --git a/sim/process.cc b/sim/process.cc index c5eee4527..28d59e22c 100644 --- a/sim/process.cc +++ b/sim/process.cc @@ -75,6 +75,7 @@ Process::Process(const string &name, // allocate initial register file init_regs = new RegFile; + memset(init_regs, 0, sizeof(RegFile)); // initialize first 3 fds (stdin, stdout, stderr) fd_map[STDIN_FILENO] = stdin_fd; -- cgit v1.2.3 From 13483c98be4ad4976f029f7856edbd2f8437fcd8 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Fri, 26 Mar 2004 05:43:29 -0500 Subject: Get rid of the printExtraOutput stuff --HG-- extra : convert_revision : d82718ad4b3c5dd56a99c727e78b39917f9d4541 --- sim/sim_object.cc | 23 ----------------------- sim/sim_object.hh | 7 ------- 2 files changed, 30 deletions(-) (limited to 'sim') diff --git a/sim/sim_object.cc b/sim/sim_object.cc index c55021e41..5534ea840 100644 --- a/sim/sim_object.cc +++ b/sim/sim_object.cc @@ -83,14 +83,6 @@ SimObject::resetStats() { } -// -// no default extra output -// -void -SimObject::printExtraOutput(ostream &os) -{ -} - // // static function: // call regStats() on all SimObjects and then regFormulas() on all @@ -161,21 +153,6 @@ SimObject::resetAllStats() } } -// -// static function: call printExtraOutput() on all SimObjects. -// -void -SimObject::printAllExtraOutput(ostream &os) -{ - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->printExtraOutput(os); - } -} - // // static function: serialize all SimObjects. // diff --git a/sim/sim_object.hh b/sim/sim_object.hh index aaaafc04b..b1dd19475 100644 --- a/sim/sim_object.hh +++ b/sim/sim_object.hh @@ -74,19 +74,12 @@ class SimObject : public Serializable virtual void regFormulas(); virtual void resetStats(); - // print extra results for this object not covered by registered - // statistics (called at end of simulation) - virtual void printExtraOutput(std::ostream&); - // static: call reg_stats on all SimObjects static void regAllStats(); // static: call resetStats on all SimObjects static void resetAllStats(); - // static: call printExtraOutput on all SimObjects - static void printAllExtraOutput(std::ostream&); - // static: call nameOut() & serialize() on all SimObjects static void serializeAll(std::ostream &); }; -- cgit v1.2.3 From 782fb42992076dfd88ffb7d0c4e689d1bb1220d8 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Fri, 2 Apr 2004 22:57:08 -0800 Subject: Basic cleanup pass to get rid of a few things that made the Python configuration unnecessarily awkward. Biggest changes are: - External and internal object names now match in all cases. The macros still allow them to be different; the only reason I didn't get rid of that is that the macros themselves should be going away soon. In the few conflicting cases, I sometimes renamed the C++ object and sometimes renamed the config object. The latter sets of substitions are: s/BaseBus/Bus/; s/MemoryObject/FunctionalMemory/; s/MemoryControl/MemoryController/; s/FUPool/FuncUnitPool/; - SamplingCPU is temporarily broken... we need to change the model of how this works in the .ini file. Having it as a CPU proxy is really awkward. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: cpu/simple_cpu/simple_cpu.cc: sim/process.cc: Rename objects to match config name. cpu/base_cpu.cc: Uncomment SimObject define since SamplingCPU no longer does this for us. dev/ethertap.cc: Use unsigned instead of uint16_t for params. kern/tru64/tru64_system.cc: Use unsigned instead of uint64_t for init_param param. test/paramtest.cc: Fix old SimObjectParam. --HG-- extra : convert_revision : 378ebbc6a71ad0694501d09979a44d111a59e8dc --- sim/process.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sim') diff --git a/sim/process.cc b/sim/process.cc index 28d59e22c..1523c093e 100644 --- a/sim/process.cc +++ b/sim/process.cc @@ -221,7 +221,7 @@ Process::sim_fd(int tgt_fd) // that can be constructed (i.e., no REGISTER_SIM_OBJECT() macro call, // which is where these get declared for concrete types). // -DEFINE_SIM_OBJECT_CLASS_NAME("Process object", Process) +DEFINE_SIM_OBJECT_CLASS_NAME("Process", Process) //////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 0ef91aa905df33bc013b223513982da898a8bed3 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Mon, 5 Apr 2004 11:00:48 -0700 Subject: Changes to config to allow everything (including 'children' and 'type') to be specified via instance name and not just config class. Old code only did instance-name lookup for SimObject parameters. This feature makes life easier for transitioning to the Python script-based config. sim/builder.cc: Use ConfigNode::find to look for "type" parameter so it can be found if set under instance name (not config class). sim/param.cc: Make Param accept "1" for true and "0" for false. --HG-- extra : convert_revision : f40d0878d0f03b2e216f0506c05d0e52db608cca --- sim/builder.cc | 3 ++- sim/param.cc | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'sim') diff --git a/sim/builder.cc b/sim/builder.cc index e2345556e..110c42f25 100644 --- a/sim/builder.cc +++ b/sim/builder.cc @@ -32,6 +32,7 @@ #include "base/misc.hh" #include "sim/builder.hh" #include "sim/configfile.hh" +#include "sim/config_node.hh" #include "sim/host.hh" #include "sim/sim_object.hh" #include "sim/universe.hh" @@ -153,7 +154,7 @@ SimObjectClass::createObject(IniFile &configDB, // (specified by 'type=' parameter) string simObjClassName; - if (!configDB.findDefault(configClassName, "type", simObjClassName)) { + if (!configNode->find("type", simObjClassName)) { cerr << "Configuration class '" << configClassName << "' not found." << endl; abort(); diff --git a/sim/param.cc b/sim/param.cc index 7affe4786..bb372f631 100644 --- a/sim/param.cc +++ b/sim/param.cc @@ -147,14 +147,14 @@ template <> bool parseParam(const string &s, bool &value) { - const string &lower = to_lower(s); + const string &ls = to_lower(s); - if (lower == "true" || lower == "t" || lower == "yes" || lower == "y") { + if (ls == "true" || ls == "t" || ls == "yes" || ls == "y" || ls == "1") { value = true; return true; } - if (lower == "false" || lower == "f" || lower == "no" || lower == "n") { + if (ls == "false" || ls == "f" || ls == "no" || ls == "n" || ls == "0") { value = false; return true; } -- cgit v1.2.3 From 25a358983a31167e048b19dd21bc1ec872890a74 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Tue, 4 May 2004 17:01:00 -0400 Subject: Major stats package cleanup Add support for generic visitors for stats and use them to implement independent output functions. Support for mysql output and some initial code for hacking on mysql output with python arch/alpha/pseudo_inst.cc: base/hybrid_pred.cc: base/hybrid_pred.hh: base/sat_counter.cc: base/sat_counter.hh: cpu/simple_cpu/simple_cpu.cc: kern/tru64/tru64_events.cc: sim/main.cc: sim/process.cc: sim/process.hh: sim/sim_events.cc: sim/sim_object.cc: sim/system.hh: update for changes in stats package base/statistics.cc: move the python output code to base/stats/puthon.(cc|hh) and reimplement it as a visitor. move the text output code to base/stats/text.(cc|hh) and reimplement it as a visitor. move the database stuff into base/stats/statdb.(cc|hh) and get rid of the class. Put everything as globals in the Statistics::Database namespace. allocate unique ids for all stats. directly implement the check routine and get rid of the various dumping routines since they're now in separate files. make sure that no two stats have the same name clean up some loops base/statistics.hh: major changes to the statistics package again lots of code was factored out of statistics.hh into several separate files in base/stats/ (this will continue) There are now two Stat package types Result and Counter that are specified to allow the user to keep the counted type separate from the result type. They are currently both doubles but that's an experiment. There is no more per stat ability to set the type. Statistics::Counter is not the same as Counter! Implement a visitor for statistics output so that new output types can be implemented independently from the stats package itself. Add a unique id to each stat so that it can be used to keep track of stats more simply. This number can also be used in debugging problems with stats. Tweak the bucket size stuff a bit to make it work better. fixed VectorDist size bug cpu/memtest/memtest.cc: Fix up for changes in stats package Don't use value() since it doesn't work with binning. If you want a number as a stat, and to use it in the program itself, you really want two separate variables, one that's a stat, and one that's not. cpu/memtest/memtest.hh: Fix up for changes in stats package test/Makefile: Try to build stuff now that directories matter test/stattest.cc: test all new output types choose which one with command line options --HG-- extra : convert_revision : e3a3f5f0828c67c0e2de415d936ad240adaddc89 --- sim/main.cc | 5 +- sim/process.cc | 2 +- sim/process.hh | 2 +- sim/sim_events.cc | 2 +- sim/sim_object.cc | 2 +- sim/stat_control.cc | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++++ sim/stat_control.hh | 52 +++++++++++++ sim/stats.hh | 41 +++++++++++ sim/system.hh | 2 +- 9 files changed, 308 insertions(+), 7 deletions(-) create mode 100644 sim/stat_control.cc create mode 100644 sim/stat_control.hh create mode 100644 sim/stats.hh (limited to 'sim') diff --git a/sim/main.cc b/sim/main.cc index 48d64d4cd..8861f3ef0 100644 --- a/sim/main.cc +++ b/sim/main.cc @@ -53,7 +53,8 @@ #include "sim/sim_exit.hh" #include "sim/sim_init.hh" #include "sim/sim_object.hh" -#include "sim/sim_stats.hh" +#include "sim/stat_control.hh" +#include "sim/stats.hh" #include "sim/universe.hh" using namespace std; @@ -235,7 +236,7 @@ main(int argc, char **argv) sayHello(cerr); // Initialize statistics database - initBaseStats(); + Statistics::InitSimStats(); vector cppArgs; diff --git a/sim/process.cc b/sim/process.cc index 1523c093e..c6b497343 100644 --- a/sim/process.cc +++ b/sim/process.cc @@ -43,7 +43,7 @@ #include "sim/builder.hh" #include "sim/fake_syscall.hh" #include "sim/process.hh" -#include "sim/sim_stats.hh" +#include "sim/stats.hh" #ifdef TARGET_ALPHA #include "arch/alpha/alpha_tru64_process.hh" diff --git a/sim/process.hh b/sim/process.hh index 5df5736ff..b23302b8f 100644 --- a/sim/process.hh +++ b/sim/process.hh @@ -40,7 +40,7 @@ #include "targetarch/isa_traits.hh" #include "sim/sim_object.hh" -#include "sim/sim_stats.hh" +#include "sim/stats.hh" #include "base/statistics.hh" class ExecContext; diff --git a/sim/sim_events.cc b/sim/sim_events.cc index f7b07359c..3530adedc 100644 --- a/sim/sim_events.cc +++ b/sim/sim_events.cc @@ -35,7 +35,7 @@ #include "sim/sim_events.hh" #include "sim/sim_exit.hh" #include "sim/sim_init.hh" -#include "sim/sim_stats.hh" +#include "sim/stats.hh" using namespace std; diff --git a/sim/sim_object.cc b/sim/sim_object.cc index 5534ea840..9626c54ea 100644 --- a/sim/sim_object.cc +++ b/sim/sim_object.cc @@ -35,7 +35,7 @@ #include "sim/configfile.hh" #include "sim/host.hh" #include "sim/sim_object.hh" -#include "sim/sim_stats.hh" +#include "sim/stats.hh" using namespace std; diff --git a/sim/stat_control.cc b/sim/stat_control.cc new file mode 100644 index 000000000..d6d7e2c91 --- /dev/null +++ b/sim/stat_control.cc @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2003 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// This file will contain default statistics for the simulator that +// don't really belong to a specific simulator object + +#include +#include +#include + +#include "base/callback.hh" +#include "base/hostinfo.hh" +#include "base/statistics.hh" +#include "base/str.hh" +#include "base/time.hh" +#include "base/stats/output.hh" +#include "sim/eventq.hh" +#include "sim/sim_object.hh" +#include "sim/stat_control.hh" +#include "sim/universe.hh" + +using namespace std; + +Statistics::Formula hostInstRate; +Statistics::Formula hostMemory; +Statistics::Formula hostSeconds; +Statistics::Formula hostTickRate; + +Statistics::Formula simInsts; +Statistics::Formula simSeconds; +Statistics::Formula simTicks; + +namespace Statistics { + +Time statTime(true); +Tick startTick; + +class SimTicksReset : public Callback +{ + public: + void process() + { + statTime.set(); + startTick = curTick; + } +}; + +double +statElapsedTime() +{ + Time now(true); + Time elapsed = now - statTime; + return elapsed(); +} + +SimTicksReset simTicksReset; + +void +InitSimStats() +{ + simInsts + .name("sim_insts") + .desc("Number of instructions simulated") + .precision(0) + .prereq(simInsts) + ; + + simSeconds + .name("sim_seconds") + .desc("Number of seconds simulated") + ; + + simTicks + .name("sim_ticks") + .desc("Number of ticks simulated") + ; + + hostInstRate + .name("host_inst_rate") + .desc("Simulator instruction rate (inst/s)") + .precision(0) + .prereq(simInsts) + ; + + hostMemory + .name("host_mem_usage") + .desc("Number of bytes of host memory used") + .prereq(hostMemory) + ; + + hostSeconds + .name("host_seconds") + .desc("Real time elapsed on the host") + .precision(2) + ; + + hostTickRate + .name("host_tick_rate") + .desc("Simulator tick rate (ticks/s)") + .precision(0) + ; + + simInsts = constant(0); + simTicks = scalar(curTick) - scalar(startTick); + simSeconds = simTicks / scalar(ticksPerSecond); + hostMemory = functor(memUsage); + hostSeconds = functor(statElapsedTime); + hostInstRate = simInsts / hostSeconds; + hostTickRate = simTicks / hostSeconds; + + registerResetCallback(&simTicksReset); +} + +class StatEvent : public Event +{ + protected: + int flags; + Tick repeat; + + public: + StatEvent(int _flags, Tick _when, Tick _repeat); + virtual void process(); + virtual const char *description(); +}; + +StatEvent::StatEvent(int _flags, Tick _when, Tick _repeat) + : Event(&mainEventQueue, Stat_Event_Pri), + flags(_flags), repeat(_repeat) +{ + setFlags(AutoDelete); + schedule(_when); +} + +const char * +StatEvent::description() +{ + return "Statistics dump and/or reset"; +} + +void +StatEvent::process() +{ + if (flags & Statistics::Dump) + DumpNow(); + + if (flags & Statistics::Reset) + reset(); + + if (repeat) + schedule(curTick + repeat); +} + +list OutputList; + +void +DumpNow() +{ + list::iterator i = OutputList.begin(); + list::iterator end = OutputList.end(); + for (; i != end; ++i) { + Output *output = *i; + if (!output->valid()) + continue; + + output->output(); + } +} + +void +SetupEvent(int flags, Tick when, Tick repeat) +{ + new StatEvent(flags, when, repeat); +} + +/* namespace Statistics */ } + +extern "C" void +debugDumpStats() +{ + Statistics::DumpNow(); +} + diff --git a/sim/stat_control.hh b/sim/stat_control.hh new file mode 100644 index 000000000..9a5e269e1 --- /dev/null +++ b/sim/stat_control.hh @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2003 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __SIM_STAT_CONTROL_HH__ +#define __SIM_STAT_CONTROL_HH__ + +#include +#include + +namespace Statistics { + +enum { + Reset = 0x1, + Dump = 0x2 +}; + +class Output; +extern std::list OutputList; + +void DumpNow(); +void SetupEvent(int flags, Tick when, Tick repeat = 0); + +void InitSimStats(); + +/* namespace Statistics */ } + +#endif // __SIM_STAT_CONTROL_HH__ diff --git a/sim/stats.hh b/sim/stats.hh new file mode 100644 index 000000000..b736850e7 --- /dev/null +++ b/sim/stats.hh @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2003 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __SIM_STATS_HH__ +#define __SIM_STATS_HH__ + +#include "base/statistics.hh" + +extern Statistics::Formula simTicks; +extern Statistics::Formula simSeconds; +extern Statistics::Formula simInsts; +extern Statistics::Formula hostSeconds; +extern Statistics::Formula hostTickRate; +extern Statistics::Formula hostInstRate; + +#endif // __SIM_SIM_STATS_HH__ diff --git a/sim/system.hh b/sim/system.hh index e5bf9cdac..050d1dd11 100644 --- a/sim/system.hh +++ b/sim/system.hh @@ -53,7 +53,7 @@ class System : public SimObject std::map swCtxMap; public: - Statistics::Scalar fnCalls; + Statistics::Scalar<> fnCalls; Statistics::MainBin *Kernel; Statistics::MainBin *User; -- cgit v1.2.3