hi lucas yes, i have fix this error. On Wed, 2012-10-24 at 08:50 -0200, Lucas Meneghel Rodrigues wrote:
> On 10/24/2012 07:05 AM, [email protected] wrote: > > From: Yunping Zheng <[email protected]> > > > > This patch adds a systemtap profiler to autotest. Now systemtap > > can run during your test, providing useful debug data. > > > > When you use this profiler on virt tests, you should add > > 'profilers = systemtap' > > and > > 'stap_script_file = file_path_systemtap_script' > > > > On your test cfg file. If the 'file_path_systemtap_script' you > > assigned is a relative path,the script will try to find the file > > under 'test.autodir/profilers/systemtap/scripts'. > > > > Before using this patch make sure you host is support "stap",you can > > run "stap -e 'probe begin { log(\"Support\") exit() }'" to have a > > check, if you host not suppor stap,please install systemtap and > > related packages. > > Hey Yunping, I remember the first version of this patch brought problems > on next testing, it was breaking running the virttests from autotest. Do > you remember that, and if so, have you fixed that problem? > > > Signed-off-by: Yunping Zheng <[email protected]> > > --- > > client/profilers/catprofile/catprofile.py | 2 +- > > client/profilers/cmdprofile/cmdprofile.py | 2 +- > > client/profilers/cpistat/cpistat.py | 2 +- > > client/profilers/iostat/iostat.py | 2 +- > > client/profilers/kvm_modload/kvm_modload.py | 2 +- > > client/profilers/kvm_stat/kvm_stat.py | 2 +- > > client/profilers/lockmeter/lockmeter.py | 2 +- > > client/profilers/mpstat/mpstat.py | 2 +- > > client/profilers/oprofile/oprofile.py | 2 +- > > client/profilers/perf/perf.py | 2 +- > > client/profilers/readprofile/readprofile.py | 2 +- > > client/profilers/sar/sar.py | 2 +- > > client/profilers/systemtap/control | 5 ++ > > client/profilers/systemtap/src/.version | 2 + > > client/profilers/systemtap/systemtap.py | 82 > > +++++++++++++++++++++++++++++ > > client/profilers/vmstat/vmstat.py | 2 +- > > 16 files changed, 102 insertions(+), 13 deletions(-) > > create mode 100644 client/profilers/systemtap/__init__.py > > create mode 100644 client/profilers/systemtap/control > > create mode 100644 client/profilers/systemtap/src/.version > > create mode 100644 client/profilers/systemtap/systemtap.py > > > > diff --git a/client/profilers/catprofile/catprofile.py > > b/client/profilers/catprofile/catprofile.py > > index b854782..5b8464d 100644 > > --- a/client/profilers/catprofile/catprofile.py > > +++ b/client/profilers/catprofile/catprofile.py > > @@ -13,7 +13,7 @@ class catprofile(profiler.profiler): > > > > # filenames: list of filenames to cat > > def initialize(self, filenames = ['/proc/meminfo', '/proc/slabinfo'], > > - outfile = 'monitor', interval = 1): > > + outfile = 'monitor', interval = 1, **dargs): > > self.filenames = filenames > > self.outfile = outfile > > self.interval = interval > > diff --git a/client/profilers/cmdprofile/cmdprofile.py > > b/client/profilers/cmdprofile/cmdprofile.py > > index c4c6c5a..66e7fde 100644 > > --- a/client/profilers/cmdprofile/cmdprofile.py > > +++ b/client/profilers/cmdprofile/cmdprofile.py > > @@ -13,7 +13,7 @@ class cmdprofile(profiler.profiler): > > > > > > def initialize(self, cmds=['ps'], interval=60, > > outputfile='cmdprofile', > > - outputfiles=None): > > + outputfiles=None, **dargs): > > > > # do some basic sanity checking on the parameters > > if not outputfiles and not outputfile: > > diff --git a/client/profilers/cpistat/cpistat.py > > b/client/profilers/cpistat/cpistat.py > > index 8506958..b24e761 100644 > > --- a/client/profilers/cpistat/cpistat.py > > +++ b/client/profilers/cpistat/cpistat.py > > @@ -10,7 +10,7 @@ from autotest.client import profiler > > class cpistat(profiler.profiler): > > version = 1 > > > > - def initialize(self, interval = 1): > > + def initialize(self, interval = 1, **dargs): > > self.interval = interval > > > > > > diff --git a/client/profilers/iostat/iostat.py > > b/client/profilers/iostat/iostat.py > > index b3ebbbc..2a8a7dc 100644 > > --- a/client/profilers/iostat/iostat.py > > +++ b/client/profilers/iostat/iostat.py > > @@ -9,7 +9,7 @@ from autotest.client.shared import utils, error > > class iostat(profiler.profiler): > > version = 2 > > > > - def initialize(self, interval = 1, options = ''): > > + def initialize(self, interval = 1, options = '', **dargs): > > # Usage: iostat [ options... ] [ <interval> [ <count> ] ] > > # e.g, iostat -tmx 2 > > self.interval = interval > > diff --git a/client/profilers/kvm_modload/kvm_modload.py > > b/client/profilers/kvm_modload/kvm_modload.py > > index 1b9747e..fd234cd 100644 > > --- a/client/profilers/kvm_modload/kvm_modload.py > > +++ b/client/profilers/kvm_modload/kvm_modload.py > > @@ -14,7 +14,7 @@ class kvm_modload(profiler.profiler): > > version = 4 > > > > > > - def initialize(self, interval=None, options=None): > > + def initialize(self, interval=None, options=None, **dargs): > > pass > > > > > > diff --git a/client/profilers/kvm_stat/kvm_stat.py > > b/client/profilers/kvm_stat/kvm_stat.py > > index f4d2fa5..ef34e95 100644 > > --- a/client/profilers/kvm_stat/kvm_stat.py > > +++ b/client/profilers/kvm_stat/kvm_stat.py > > @@ -17,7 +17,7 @@ class kvm_stat(profiler.profiler): > > test execution, redirecting its output to a file on the profile dir. > > """ > > version = 1 > > - def initialize(self): > > + def initialize(self, **drags): > > """ > > Gets path of kvm_stat and verifies if debugfs needs to be mounted. > > """ > > diff --git a/client/profilers/lockmeter/lockmeter.py > > b/client/profilers/lockmeter/lockmeter.py > > index 7d774f9..07c5171 100644 > > --- a/client/profilers/lockmeter/lockmeter.py > > +++ b/client/profilers/lockmeter/lockmeter.py > > @@ -29,7 +29,7 @@ class lockmeter(profiler.profiler): > > self.cmd = self.srcdir + '/lockstat' > > > > > > - def initialize(self): > > + def initialize(self, **dargs): > > self.job.require_gcc() > > > > if not os.path.exists('/proc/lockmeter'): > > diff --git a/client/profilers/mpstat/mpstat.py > > b/client/profilers/mpstat/mpstat.py > > index 1c8a2a0..8fcbcc2 100644 > > --- a/client/profilers/mpstat/mpstat.py > > +++ b/client/profilers/mpstat/mpstat.py > > @@ -9,7 +9,7 @@ class mpstat(profiler.profiler): > > version = 1 > > > > > > - def initialize(self, interval = 1): > > + def initialize(self, interval = 1, **dargs): > > self.interval = interval > > > > > > diff --git a/client/profilers/oprofile/oprofile.py > > b/client/profilers/oprofile/oprofile.py > > index 0022fa5..f5dae4b 100644 > > --- a/client/profilers/oprofile/oprofile.py > > +++ b/client/profilers/oprofile/oprofile.py > > @@ -95,7 +95,7 @@ class oprofile(profiler.profiler): > > self._setup_oprofile() > > > > > > - def initialize(self, vmlinux=None, events=[], others=None, local=None): > > + def initialize(self, vmlinux=None, events=[], others=None, local=None, > > **dargs): > > self.job.require_gcc() > > > > if not vmlinux: > > diff --git a/client/profilers/perf/perf.py b/client/profilers/perf/perf.py > > index 21f7bd6..c3dc737 100644 > > --- a/client/profilers/perf/perf.py > > +++ b/client/profilers/perf/perf.py > > @@ -13,7 +13,7 @@ from autotest.client import profiler, os_dep, utils > > class perf(profiler.profiler): > > version = 1 > > > > - def initialize(self, events=["cycles","instructions"], trace=False): > > + def initialize(self, events=["cycles","instructions"], trace=False, > > **dargs): > > if type(events) == str: > > self.events = [events] > > else: > > diff --git a/client/profilers/readprofile/readprofile.py > > b/client/profilers/readprofile/readprofile.py > > index 255d90a..c5caa4a 100644 > > --- a/client/profilers/readprofile/readprofile.py > > +++ b/client/profilers/readprofile/readprofile.py > > @@ -26,7 +26,7 @@ class readprofile(profiler.profiler): > > utils.make('readprofile') > > > > > > - def initialize(self): > > + def initialize(self, **dargs): > > self.job.require_gcc() > > > > try: > > diff --git a/client/profilers/sar/sar.py b/client/profilers/sar/sar.py > > index ce4d0ff..3d8578b 100644 > > --- a/client/profilers/sar/sar.py > > +++ b/client/profilers/sar/sar.py > > @@ -17,7 +17,7 @@ class sar(profiler.profiler): > > """ > > version = 1 > > > > - def initialize(self, interval=1): > > + def initialize(self, interval=1, **dargs): > > """ > > Set sar interval and verify what flags the installed sar supports. > > > > diff --git a/client/profilers/systemtap/__init__.py > > b/client/profilers/systemtap/__init__.py > > new file mode 100644 > > index 0000000..e69de29 > > diff --git a/client/profilers/systemtap/control > > b/client/profilers/systemtap/control > > new file mode 100644 > > index 0000000..bf600d2 > > --- /dev/null > > +++ b/client/profilers/systemtap/control > > @@ -0,0 +1,5 @@ > > +# You must provide a path to a systemtap script > > +st_script = '/usr/share/systemtap/tapset/timestamp.stp' > > +job.profilers.add('systemtap', stap_script_file=st_script) > > +job.run_test('sleeptest', seconds=5) > > +job.profilers.delete('systemtap') > > diff --git a/client/profilers/systemtap/src/.version > > b/client/profilers/systemtap/src/.version > > new file mode 100644 > > index 0000000..569369f > > --- /dev/null > > +++ b/client/profilers/systemtap/src/.version > > @@ -0,0 +1,2 @@ > > +I1 > > +. > > \ No newline at end of file > > diff --git a/client/profilers/systemtap/systemtap.py > > b/client/profilers/systemtap/systemtap.py > > new file mode 100644 > > index 0000000..ce5e4d8 > > --- /dev/null > > +++ b/client/profilers/systemtap/systemtap.py > > @@ -0,0 +1,82 @@ > > +""" > > +Autotest systemtap profiler. > > +""" > > +import logging, os, re, subprocess > > +from autotest.client import profiler, os_dep > > +from autotest.client.shared import utils, error > > + > > + > > +class systemtap(profiler.profiler): > > + """ > > + Tracing test process using systemtap tools. > > + """ > > + version = 1 > > + > > + def initialize(self, **dargs): > > + self.is_enabled = False > > + > > + stap_installed = False > > + try: > > + self.stap_path = os_dep.command('stap') > > + stap_installed = True > > + except ValueError: > > + logging.error('Command stap not present') > > + > > + if stap_installed: > > + self.is_enabled = True > > + self.script_name = dargs.get('stap_script_file') > > + stap_support_cmd = "stap -e 'probe begin { log(\"Support\") > > exit() }'" > > + if not re.findall("Support", > > utils.system_output(stap_support_cmd)): > > + logging.warning("Seems your host does not support > > systemtap") > > + self.is_enabled = False > > + if not self.script_name: > > + logging.warning("You should assign a script file") > > + self.is_enabled = False > > + > > + > > + def _get_stap_script_name(self, test): > > + try: > > + if os.path.isabs(self.script_name): > > + return self.script_name > > + else: > > + return os.path.join(test.autodir, > > "profilers/systemtap/scripts", self.script_name) > > + except AttributeError: > > + return self.script_name > > + > > + > > + def start(self, test): > > + if self.is_enabled: > > + stap_script = self._get_stap_script_name(test) > > + if os.path.isfile(stap_script): > > + cmd = "stap %s" % (stap_script) > > + logfile = open(os.path.join(test.profdir, > > "systemtap.log"), 'w') > > + p = subprocess.Popen(cmd, shell=True, stdout=logfile, > > + stderr=subprocess.STDOUT) > > + self.pid = p.pid > > + else: > > + logging.warning("Asked for systemtap profiling, but no > > script " > > + "file %s not found", stap_script) > > + self.is_enabled = False > > + else: > > + logging.warning("Asked for systemtap profiling, but it > > couldn't " > > + "be initialized") > > + > > + > > + def stop(self, test): > > + if self.is_enabled: > > + try: > > + term_profiler = "kill -15 %d" % self.pid > > + # send SIGTERM to iostat and give it a 5-sec timeout > > + utils.system(term_profiler, timeout=5) > > + except error.CmdError: # probably times out > > + pass > > + # do a ps again to see if iostat is still there > > + ps_cmd = "ps -p %d | grep stap" % self.pid > > + out = utils.system_output(ps_cmd, ignore_status=True) > > + if out != '': > > + kill_profiler = 'kill -9 %d' % self.pid > > + utils.system(kill_profiler, ignore_status=True) > > + > > + > > + def report(self, test): > > + return None > > diff --git a/client/profilers/vmstat/vmstat.py > > b/client/profilers/vmstat/vmstat.py > > index 6195032..6cc174c 100644 > > --- a/client/profilers/vmstat/vmstat.py > > +++ b/client/profilers/vmstat/vmstat.py > > @@ -11,7 +11,7 @@ from autotest.client import profiler > > class vmstat(profiler.profiler): > > version = 1 > > > > - def initialize(self, interval = 1): > > + def initialize(self, interval = 1, **dargs): > > self.interval = interval > > > > > > >
_______________________________________________ Autotest-kernel mailing list [email protected] https://www.redhat.com/mailman/listinfo/autotest-kernel
