| """ |
| readprofile - a tool to read kernel profiling information |
| |
| The readprofile command uses the /proc/profile information to print ascii data |
| on standard output. The output is organized in three columns: the first is the |
| number of clock ticks, the second is the name of the C function in the kernel |
| where those many ticks occurred, and the third is the normalized `load' of the |
| procedure, calculated as a ratio between the number of ticks and the length of |
| the procedure. The output is filled with blanks to ease readability. |
| """ |
| import os, shutil |
| from autotest_lib.client.bin import utils, profiler |
| from autotest_lib.client.common_lib import error |
| |
| class readprofile(profiler.profiler): |
| version = 1 |
| |
| # http://www.kernel.org/pub/linux/utils/util-linux/util-linux-2.12r.tar.bz2 |
| def setup(self, tarball = 'util-linux-2.12r.tar.bz2'): |
| self.tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
| utils.extract_tarball_to_dir(self.tarball, self.srcdir) |
| os.chdir(self.srcdir) |
| |
| utils.configure() |
| os.chdir('sys-utils') |
| utils.make('readprofile') |
| |
| |
| def initialize(self): |
| self.job.require_gcc() |
| |
| try: |
| utils.system('grep -iq " profile=" /proc/cmdline') |
| except error.CmdError: |
| raise error.AutotestError('readprofile not enabled') |
| |
| self.cmd = self.srcdir + '/sys-utils/readprofile' |
| |
| |
| def start(self, test): |
| utils.system(self.cmd + ' -r') |
| |
| |
| def stop(self, test): |
| # There's no real way to stop readprofile, so we stash the |
| # raw data at this point instead. BAD EXAMPLE TO COPY! ;-) |
| self.rawprofile = test.profdir + '/profile.raw' |
| print "STOP" |
| shutil.copyfile('/proc/profile', self.rawprofile) |
| |
| |
| def report(self, test): |
| args = ' -n' |
| args += ' -m ' + utils.get_systemmap() |
| args += ' -p ' + self.rawprofile |
| cmd = self.cmd + ' ' + args |
| txtprofile = test.profdir + '/profile.text' |
| utils.system(cmd + ' | sort -nr > ' + txtprofile) |
| utils.system('bzip2 ' + self.rawprofile) |