On Tue, Sep 14, 2010 at 4:46 AM, Lucas Meneghel Rodrigues 
<[email protected]>wrote:

> On Mon, 2010-09-13 at 14:49 -0700, Gregory P. Smith wrote:
> > Add ftrace profiler. Uses trace-cmd unpacked from trace-cmd.tar.bz2 into
> > /home/ftrace to set up tracepoints and filters, and record a trace.dat.
> >
> > Signed-off-by: David Sharp <[email protected]>
>
> I will check with David and Steve Rosted how to best handle ftrace build
> and install. It seems to me that unpacking the tarball
> under /home/frtrace is not a very satisfactory solution, let's see if
> there is a better way.
>

Yeah I don't like that either, its fragile and odd.  It is "working" for us
but this could be done better.

-gps


>
> Thanks!
>
> >
> > --- /dev/null 2009-12-17 12:29:38.000000000 -0800
> > +++ autotest/client/profilers/ftrace/control  2010-09-07
> 14:02:55.000000000 -0700
> > @@ -0,0 +1,3 @@
> > +job.profilers.add('ftrace', tracepoints=['syscalls'])
> > +job.run_test('sleeptest', seconds=1)
> > +job.profilers.delete('ftrace')
> > --- /dev/null 2009-12-17 12:29:38.000000000 -0800
> > +++ autotest/client/profilers/ftrace/ftrace.py        2010-09-07
> 14:02:55.000000000 -0700
> > @@ -0,0 +1,71 @@
> > +import os
> > +import signal
> > +import subprocess
> > +from autotest_lib.client.bin import profiler
> > +from autotest_lib.client.bin import utils
> > +
> > +class ftrace(profiler.profiler):
> > +    version = 1
> > +
> > +    mountpoint = '/sys/kernel/debug'
> > +    tracing_dir = os.path.join(mountpoint, 'tracing')
> > +    trace_cmd = '/home/ftrace/bin/trace-cmd'
> > +
> > +    @staticmethod
> > +    def join_command(cmd):
> > +        """Shell escape the command for BgJob. grmbl."""
> > +        result = []
> > +        for arg in cmd:
> > +            arg = '"%s"' % utils.sh_escape(arg)
> > +            result += [arg]
> > +        return ' '.join(result)
> > +
> > +    def setup(self, tarball='trace-cmd.tar.bz2', **kwargs):
> > +        self.tarball = utils.unmap_url(self.bindir, tarball,
> self.tmpdir)
> > +        # can't use utils.extract_tarball_to_dir(tarball, '/'),
> > +        # because it will 'rm -rf /'. Fun.
> > +        os.chdir('/')
> > +        utils.system('tar xjf %s -C /' % self.tarball)
> > +
> > +    def initialize(self, tracepoints, buffer_size_kb=1408, **kwargs):
> > +        """Initialize ftrace profiler.
> > +
> > +        Args:
> > +            tracepoints: list containing a mix of tracpoint names and
> > +                (tracepoint name, filter) tuples. Tracepoint names are
> as
> > +                accepted by trace-cmd -e, eg "syscalls", or
> > +                "syscalls:sys_enter_read". Filters are as accepted by
> > +                trace-cmd -f, eg "((sig >= 10 && sig < 15) || sig ==
> 17)"
> > +            buffer_size_kb: Set the size of the ring buffer (per cpu).
> > +        """
> > +        # Make sure debugfs is mounted.
> > +        utils.system('%s reset' % self.trace_cmd)
> > +
> > +        self.trace_cmd_args = ['-b', str(buffer_size_kb)]
> > +        for tracepoint in tracepoints:
> > +            if isinstance(tracepoint, tuple):
> > +                tracepoint, event_filter = tracepoint
> > +            else:
> > +                event_filter = None
> > +            self.trace_cmd_args += ['-e', tracepoint]
> > +            if event_filter:
> > +                self.trace_cmd_args += ['-f', event_filter]
> > +
> > +    def start(self, test):
> > +        output_dir = os.path.join(test.profdir, 'ftrace')
> > +        if not os.path.isdir(output_dir):
> > +            os.makedirs(output_dir)
> > +        self.output = os.path.join(output_dir, 'trace.dat')
> > +        cmd = [self.trace_cmd, 'record', '-o', self.output]
> > +        cmd += self.trace_cmd_args
> > +        self.record_job = utils.BgJob(self.join_command(cmd))
> > +
> > +    def stop(self, test):
> > +        os.kill(self.record_job.sp.pid, signal.SIGINT)
> > +        utils.join_bg_jobs([self.record_job])
> > +        # shrink the buffer to free memory.
> > +        utils.system('%s reset -b 1' % self.trace_cmd)
> > +        utils.system('bzip2 %s' % self.output)
> > +
> > +
> > +# vim: set sts=4 sw=4 ai et :
> > _______________________________________________
> > Autotest mailing list
> > [email protected]
> > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
>
>
>
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to