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
