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
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev