diff -r edde97a6ea7c -r 73d1aaf6c6ff src/sim/eventq.hh --- a/src/sim/eventq.hh Sun Apr 18 21:33:59 2010 -0700 +++ b/src/sim/eventq.hh Sun Apr 18 22:24:37 2010 -0700 @@ -49,6 +49,11 @@ #include "base/types.hh" #include "sim/serialize.hh" +#ifndef NDEBUG +#define EVENTQ_STATS +#include "base/statistics.hh" +#endif + class EventQueue; // forward declaration extern EventQueue mainEventQueue; @@ -420,7 +425,19 @@ #ifndef SWIG virtual void serialize(std::ostream &os); virtual void unserialize(Checkpoint *cp, const std::string §ion); -#endif + + void regStats(); +#ifdef EVENTQ_STATS + Stats::Scalar scheduled; + Stats::Scalar descheduled; + Stats::Scalar rescheduled; + Stats::Scalar squashed; + + Stats::Formula deschedule_rate; + Stats::Formula reschedule_rate; + Stats::Formula squash_rate; +#endif // EVENTQ_STATS +#endif // SWIG }; #ifndef SWIG @@ -500,6 +517,10 @@ if (DTRACE(Event)) event->trace("scheduled"); + +#ifdef EVENTQ_STATS + scheduled++; +#endif } inline void @@ -518,6 +539,10 @@ if (DTRACE(Event)) event->trace("descheduled"); + +#ifdef EVENTQ_STATS + descheduled++; +#endif } inline void @@ -541,6 +566,10 @@ if (DTRACE(Event)) event->trace("rescheduled"); + +#ifdef EVENTQ_STATS + rescheduled++; +#endif } template diff -r edde97a6ea7c -r 73d1aaf6c6ff src/sim/eventq.cc --- a/src/sim/eventq.cc Sun Apr 18 21:33:59 2010 -0700 +++ b/src/sim/eventq.cc Sun Apr 18 22:24:37 2010 -0700 @@ -207,6 +207,9 @@ } } else { event->flags.clear(Event::Squashed); +#ifdef EVENTQ_STATS + squashed++; +#endif } if (event->flags.isSet(Event::AutoDelete) && !event->scheduled()) @@ -412,3 +415,48 @@ EventQueue::EventQueue(const string &n) : objName(n), head(NULL) {} + +void +EventQueue::regStats() +{ +#ifdef EVENTQ_STATS + scheduled + .name(name() + ".scheduled") + .desc("Total number of events scheduled") + ; + + descheduled + .name(name() + ".descheduled") + .desc("Total number of events descheduled") + ; + + rescheduled + .name(name() + ".rescheduled") + .desc("Total number of events rescheduled") + ; + + squashed + .name(name() + ".squashed") + .desc("Total number of events squashed from processing") + ; + + deschedule_rate + .name(name() + ".deschedule_rate") + .desc("Rate of total deschedules to total schedules") + ; + + reschedule_rate + .name(name() + ".reschedule_rate") + .desc("Rate of total reschedules to total schedules") + ; + + squash_rate + .name(name() + ".squash_rate") + .desc("Rate of events squashed from processing to scheduled events") + ; + + deschedule_rate = descheduled / scheduled; + reschedule_rate = rescheduled / scheduled; + squash_rate = squashed / scheduled; +#endif // EVENTQ_STATS +} diff -r edde97a6ea7c -r 73d1aaf6c6ff src/sim/root.cc --- a/src/sim/root.cc Sun Apr 18 21:33:59 2010 -0700 +++ b/src/sim/root.cc Sun Apr 18 22:24:37 2010 -0700 @@ -37,12 +37,19 @@ #include "base/misc.hh" #include "params/Root.hh" +#include "sim/eventq.hh" #include "sim/sim_object.hh" // Dummy Object struct Root : public SimObject { Root(RootParams *params) : SimObject(params) {} + + void + regStats() + { + mainEventQueue.regStats(); + } }; Root *