stats: better expose statistics to python.

Build a python list and dict of all stats and expose flags properly.

--HG--
rename : src/python/m5/stats.py => src/python/m5/stats/__init__.py
This commit is contained in:
Nathan Binkert 2011-05-12 11:19:32 -07:00
parent 9c4c1419a7
commit 35b0c1d391
3 changed files with 97 additions and 5 deletions

View file

@ -46,10 +46,10 @@ PySource('m5', 'm5/options.py')
PySource('m5', 'm5/params.py') PySource('m5', 'm5/params.py')
PySource('m5', 'm5/proxy.py') PySource('m5', 'm5/proxy.py')
PySource('m5', 'm5/simulate.py') PySource('m5', 'm5/simulate.py')
PySource('m5', 'm5/stats.py')
PySource('m5', 'm5/ticks.py') PySource('m5', 'm5/ticks.py')
PySource('m5', 'm5/trace.py') PySource('m5', 'm5/trace.py')
PySource('m5.objects', 'm5/objects/__init__.py') PySource('m5.objects', 'm5/objects/__init__.py')
PySource('m5.stats', 'm5/stats/__init__.py')
PySource('m5.util', 'm5/util/__init__.py') PySource('m5.util', 'm5/util/__init__.py')
PySource('m5.util', 'm5/util/attrdict.py') PySource('m5.util', 'm5/util/attrdict.py')
PySource('m5.util', 'm5/util/code_formatter.py') PySource('m5.util', 'm5/util/code_formatter.py')

View file

@ -1,4 +1,5 @@
# Copyright (c) 2007 The Regents of The University of Michigan # Copyright (c) 2007 The Regents of The University of Michigan
# Copyright (c) 2010 The Hewlett-Packard Development Company
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -26,10 +27,10 @@
# #
# Authors: Nathan Binkert # Authors: Nathan Binkert
import internal from m5 import internal
from m5.internal.stats import schedStatEvent as schedEvent
from internal.stats import schedStatEvent as schedEvent from m5.objects import Root
from objects import Root from m5.util import attrdict
def initText(filename, desc=True): def initText(filename, desc=True):
internal.stats.initText(filename, desc) internal.stats.initText(filename, desc)
@ -46,7 +47,38 @@ def initMySQL(host, database, user='', passwd='', project='test', name='test',
def initSimStats(): def initSimStats():
internal.stats.initSimStats() internal.stats.initSimStats()
names = []
stats_dict = {}
stats_list = []
raw_stats_list = []
def enable(): def enable():
'''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.'''
__dynamic_cast = []
for k, v in internal.stats.__dict__.iteritems():
if k.startswith('dynamic_'):
__dynamic_cast.append(v)
for stat in internal.stats.statsList():
for cast in __dynamic_cast:
val = cast(stat)
if val is not None:
stats_list.append(val)
raw_stats_list.append(val)
break
else:
fatal("unknown stat type %s", stat)
def less(stat1, stat2):
v1 = stat1.name.split('.')
v2 = stat2.name.split('.')
return v1 < v2
stats_list.sort(less)
for stat in stats_list:
stats_dict[stat.name] = stat
internal.stats.enable() internal.stats.enable()
def dump(): def dump():
@ -64,3 +96,15 @@ def reset():
# call any other registered stats reset callbacks # call any other registered stats reset callbacks
internal.stats.reset() internal.stats.reset()
flags = attrdict({
'none' : 0x0000,
'init' : 0x0001,
'display' : 0x0002,
'total' : 0x0010,
'pdf' : 0x0020,
'cdf' : 0x0040,
'dist' : 0x0080,
'nozero' : 0x0100,
'nonan' : 0x0200,
})

View file

@ -32,20 +32,68 @@
%include <std_list.i> %include <std_list.i>
%include <std_string.i> %include <std_string.i>
%include <std_vector.i>
%include <stdint.i>
%{ %{
#include "base/stats/mysql.hh" #include "base/stats/mysql.hh"
#include "base/stats/text.hh" #include "base/stats/text.hh"
#include "base/stats/types.hh"
#include "base/statistics.hh" #include "base/statistics.hh"
#include "sim/core.hh" #include "sim/core.hh"
#include "sim/stat_control.hh" #include "sim/stat_control.hh"
namespace Stats {
template <class T>
inline T
cast_info(Info *info)
{
return dynamic_cast<T>(info);
}
inline FlagsType
Stats_Info_flags_get(Info *info)
{
return info->flags;
}
inline void
Stats_Info_flags_set(Info *info, FlagsType flags)
{
info->flags = flags;
}
} // namespace Stats
%} %}
%extend Stats::Info {
short flags;
}
%ignore Stats::Info::flags;
%import "base/stats/types.hh" %import "base/stats/types.hh"
%include "base/stats/info.hh" %include "base/stats/info.hh"
namespace std {
%template(list_info) list<Stats::Info *>;
%template(vector_double) vector<double>;
%template(vector_string) vector<string>;
%template(vector_DistData) vector<Stats::DistData>;
}
namespace Stats { namespace Stats {
template <class T> T cast_info(Info *info);
%template(dynamic_ScalarInfo) cast_info<ScalarInfo *>;
%template(dynamic_VectorInfo) cast_info<VectorInfo *>;
%template(dynamic_DistInfo) cast_info<DistInfo *>;
%template(dynamic_VectorDistInfo) cast_info<VectorDistInfo *>;
%template(dynamic_Vector2dInfo) cast_info<Vector2dInfo *>;
%template(dynamic_FormulaInfo) cast_info<FormulaInfo *>;
void initSimStats(); void initSimStats();
void initText(const std::string &filename, bool desc); void initText(const std::string &filename, bool desc);
void initMySQL(std::string host, std::string database, std::string user, void initMySQL(std::string host, std::string database, std::string user,