changeset be7f03723412 in /z/repo/m5 details: http://repo.m5sim.org/m5?cmd=changeset;node=be7f03723412 description: stats: move code that loops over all stats into python
diffstat: src/base/SConscript | 2 - src/base/statistics.cc | 60 +++------------------------------ src/base/statistics.hh | 28 ++------------ src/base/stats/info.hh | 4 +- src/base/stats/mysql.cc | 52 +++++++++++++++++----------- src/base/stats/mysql.hh | 10 +++-- src/base/stats/output.cc | 73 ----------------------------------------- src/base/stats/output.hh | 24 ++++++++++-- src/base/stats/text.cc | 29 +++++++-------- src/base/stats/text.hh | 5 +- src/base/stats/visit.cc | 41 ----------------------- src/base/stats/visit.hh | 59 --------------------------------- src/python/m5/simulate.py | 2 +- src/python/m5/stats/__init__.py | 57 ++++++++++++++++++++++++++----- src/python/swig/stats.i | 56 +++++++++++++++++++++++++++--- 15 files changed, 183 insertions(+), 319 deletions(-) diffs (truncated from 858 to 300 lines): diff -r 221013f9fd2f -r be7f03723412 src/base/SConscript --- a/src/base/SConscript Thu May 12 11:19:32 2011 -0700 +++ b/src/base/SConscript Thu May 12 11:19:35 2011 -0700 @@ -71,9 +71,7 @@ Source('loader/raw_object.cc') Source('loader/symtab.cc') -Source('stats/output.cc') Source('stats/text.cc') -Source('stats/visit.cc') if env['USE_MYSQL']: Source('mysql.cc') diff -r 221013f9fd2f -r be7f03723412 src/base/statistics.cc --- a/src/base/statistics.cc Thu May 12 11:19:32 2011 -0700 +++ b/src/base/statistics.cc Thu May 12 11:19:35 2011 -0700 @@ -433,66 +433,18 @@ return root ? root->str() : ""; } -void -enable() -{ - typedef list<Info *>::iterator iter_t; - - iter_t i, end = statsList().end(); - for (i = statsList().begin(); i != end; ++i) { - Info *info = *i; - assert(info); - if (!info->check() || !info->baseCheck()) - panic("stat check failed for '%s' %d\n", info->name, info->id); - } - - off_t j = 0; - for (i = statsList().begin(); i != end; ++i) { - Info *info = *i; - if (!(info->flags & display)) - info->name = "__Stat" + to_string(j++); - } - - statsList().sort(Info::less); - - for (i = statsList().begin(); i != end; ++i) { - Info *info = *i; - info->enable(); - } -} - -void -prepare() -{ - list<Info *>::iterator i = statsList().begin(); - list<Info *>::iterator end = statsList().end(); - while (i != end) { - Info *info = *i; - info->prepare(); - ++i; - } -} - CallbackQueue resetQueue; void -reset() -{ - list<Info *>::iterator i = statsList().begin(); - list<Info *>::iterator end = statsList().end(); - while (i != end) { - Info *info = *i; - info->reset(); - ++i; - } - - resetQueue.process(); -} - -void registerResetCallback(Callback *cb) { resetQueue.add(cb); } } // namespace Stats + +void +debugDumpStats() +{ + Stats::dump(); +} diff -r 221013f9fd2f -r be7f03723412 src/base/statistics.hh --- a/src/base/statistics.hh Thu May 12 11:19:32 2011 -0700 +++ b/src/base/statistics.hh Thu May 12 11:19:35 2011 -0700 @@ -60,8 +60,8 @@ #include <vector> #include "base/stats/info.hh" +#include "base/stats/output.hh" #include "base/stats/types.hh" -#include "base/stats/visit.hh" #include "base/cast.hh" #include "base/cprintf.hh" #include "base/intmath.hh" @@ -90,7 +90,7 @@ void prepare() { s.prepare(); } void reset() { s.reset(); } void - visit(Visit &visitor) + visit(Output &visitor) { visitor.visit(*static_cast<Base *>(this)); } @@ -738,7 +738,7 @@ void reset() { } bool zero() const { return value() == 0; } - void visit(Visit &visitor) { visitor.visit(*this); } + void visit(Output &visitor) { visitor.visit(*this); } }; template <class T> @@ -2933,28 +2933,10 @@ return NodePtr(new SumNode<std::plus<Result> >(val)); } -/** - * Enable the statistics package. Before the statistics package is - * enabled, all statistics must be created and initialized and once - * the package is enabled, no more statistics can be created. - */ -void enable(); - -/** - * Prepare all stats for data access. This must be done before - * dumping and serialization. - */ -void prepare(); - -/** - * Dump all statistics data to the registered outputs - */ +/** Dump all statistics data to the registered outputs */ void dump(); - -/** - * Reset all statistics to the base state - */ void reset(); + /** * Register a callback that should be called whenever statistics are * reset diff -r 221013f9fd2f -r be7f03723412 src/base/stats/info.hh --- a/src/base/stats/info.hh Thu May 12 11:19:32 2011 -0700 +++ b/src/base/stats/info.hh Thu May 12 11:19:35 2011 -0700 @@ -62,7 +62,7 @@ const FlagsType __reserved = init | display; struct StorageParams; -struct Visit; +struct Output; class Info { @@ -129,7 +129,7 @@ /** * Visitor entry for outputing statistics data */ - virtual void visit(Visit &visitor) = 0; + virtual void visit(Output &visitor) = 0; /** * Checks if the first stat's name is alphabetically less than the second. diff -r 221013f9fd2f -r be7f03723412 src/base/stats/mysql.cc --- a/src/base/stats/mysql.cc Thu May 12 11:19:32 2011 -0700 +++ b/src/base/stats/mysql.cc Thu May 12 11:19:35 2011 -0700 @@ -395,7 +395,8 @@ list<Info *>::const_iterator i, end = statsList().end(); for (i = statsList().begin(); i != end; ++i) { - (*i)->visit(*this); + Info *info = *i; + info->visit(*this); } for (i = statsList().begin(); i != end; ++i) { @@ -606,7 +607,7 @@ } void -MySql::output() +MySql::begin() { assert(valid()); @@ -615,18 +616,20 @@ // store sample # newdata.tick = curTick(); +} +void +MySql::end() +{ + newdata.flush(); +} + +void +MySql::commit() +{ MySQL::Connection &mysql = run->conn(); - - list<Info *>::const_iterator i, end = statsList().end(); - for (i = statsList().begin(); i != end; ++i) { - Info *stat = *i; - stat->visit(*this); - if (mysql.commit()) - panic("could not commit transaction\n%s\n", mysql.error); - } - - newdata.flush(); + if (mysql.commit()) + panic("could not commit transaction\n%s\n", mysql.error); } void @@ -641,6 +644,8 @@ newdata.data = info.value(); newdata.insert(); + + commit(); } void @@ -659,6 +664,8 @@ newdata.data = cvec[x]; newdata.insert(); } + + commit(); } void @@ -708,6 +715,8 @@ newdata.insert(); } } + + commit(); } void @@ -719,6 +728,8 @@ newdata.stat = find(info.id); newdata.y = 0; output(info.data, safe_cast<const DistParams *>(info.storageParams)); + + commit(); } void @@ -735,6 +746,8 @@ output(info.data[y], safe_cast<const DistParams *>(info.storageParams)); } + + commit(); } void @@ -754,6 +767,8 @@ newdata.insert(); } } + + commit(); } void @@ -821,20 +836,17 @@ output(info); } -bool +Output * initMySQL(string host, string user, string password, string database, string project, string name, string sample) { - extern list<Output *> OutputList; static MySql mysql; - if (mysql.connected()) - return false; + if (mysql.connected()) { + mysql.connect(host, user, password, database, name, sample, project); + } - mysql.connect(host, user, password, database, name, sample, project); - OutputList.push_back(&mysql); - _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev