# Lint as: python2, python3 """ Lockstat is the basic tool used to control the kernel's Lockmeter functionality: e.g., turning the kernel's data gathering on or off, and retrieving that data from the kernel so that Lockstat can massage it and produce printed reports. See http://oss.sgi.com/projects/lockmeter for details. NOTE: if you get compile errors from config.h, referring you to a FAQ, you might need to do 'cat < /dev/null > /usr/include/linux/config.h'. But read the FAQ first. """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import os from autotest_lib.client.bin import utils, profiler class lockmeter(profiler.profiler): version = 1 # ftp://oss.sgi.com/projects/lockmeter/download/lockstat-1.4.11.tar.gz # patched with lockstat.diff # ftp://oss.sgi.com/projects/lockmeter/download/v2.6/patch.2.6.14-lockmeter-1.gz # is the kernel patch def setup(self, tarball = 'lockstat-1.4.11.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.make() self.cmd = self.srcdir + '/lockstat' def initialize(self): self.job.require_gcc() if not os.path.exists('/proc/lockmeter'): msg = ('Lockmeter is not compiled into your kernel' 'Please fix and try again') print(msg) raise AssertionError(msg) def start(self, test): utils.system(self.cmd + ' off') utils.system(self.cmd + ' reset') utils.system(self.cmd + ' on') def stop(self, test): utils.system(self.cmd + ' off') def report(self, test): args = ' -m ' + utils.get_systemmap() self.output = self.profdir + '/results/lockstat' utils.system(self.cmd + args + ' print > ' + self.output)