1*9c5db199SXin Li# Lint as: python2, python3 2*9c5db199SXin Li""" 3*9c5db199SXin LiLockstat is the basic tool used to control the kernel's Lockmeter 4*9c5db199SXin Lifunctionality: e.g., turning the kernel's data gathering on or off, and 5*9c5db199SXin Liretrieving that data from the kernel so that Lockstat can massage it and 6*9c5db199SXin Liproduce printed reports. See http://oss.sgi.com/projects/lockmeter for 7*9c5db199SXin Lidetails. 8*9c5db199SXin Li 9*9c5db199SXin LiNOTE: if you get compile errors from config.h, referring you to a FAQ, 10*9c5db199SXin Liyou might need to do 'cat < /dev/null > /usr/include/linux/config.h'. 11*9c5db199SXin LiBut read the FAQ first. 12*9c5db199SXin Li""" 13*9c5db199SXin Lifrom __future__ import absolute_import 14*9c5db199SXin Lifrom __future__ import division 15*9c5db199SXin Lifrom __future__ import print_function 16*9c5db199SXin Li 17*9c5db199SXin Liimport os 18*9c5db199SXin Lifrom autotest_lib.client.bin import utils, profiler 19*9c5db199SXin Li 20*9c5db199SXin Liclass lockmeter(profiler.profiler): 21*9c5db199SXin Li version = 1 22*9c5db199SXin Li 23*9c5db199SXin Li# ftp://oss.sgi.com/projects/lockmeter/download/lockstat-1.4.11.tar.gz 24*9c5db199SXin Li# patched with lockstat.diff 25*9c5db199SXin Li# ftp://oss.sgi.com/projects/lockmeter/download/v2.6/patch.2.6.14-lockmeter-1.gz 26*9c5db199SXin Li# is the kernel patch 27*9c5db199SXin Li 28*9c5db199SXin Li def setup(self, tarball = 'lockstat-1.4.11.tar.bz2'): 29*9c5db199SXin Li self.tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) 30*9c5db199SXin Li utils.extract_tarball_to_dir(self.tarball, self.srcdir) 31*9c5db199SXin Li os.chdir(self.srcdir) 32*9c5db199SXin Li 33*9c5db199SXin Li utils.make() 34*9c5db199SXin Li self.cmd = self.srcdir + '/lockstat' 35*9c5db199SXin Li 36*9c5db199SXin Li 37*9c5db199SXin Li def initialize(self): 38*9c5db199SXin Li self.job.require_gcc() 39*9c5db199SXin Li 40*9c5db199SXin Li if not os.path.exists('/proc/lockmeter'): 41*9c5db199SXin Li msg = ('Lockmeter is not compiled into your kernel' 42*9c5db199SXin Li 'Please fix and try again') 43*9c5db199SXin Li print(msg) 44*9c5db199SXin Li raise AssertionError(msg) 45*9c5db199SXin Li 46*9c5db199SXin Li 47*9c5db199SXin Li def start(self, test): 48*9c5db199SXin Li utils.system(self.cmd + ' off') 49*9c5db199SXin Li utils.system(self.cmd + ' reset') 50*9c5db199SXin Li utils.system(self.cmd + ' on') 51*9c5db199SXin Li 52*9c5db199SXin Li 53*9c5db199SXin Li def stop(self, test): 54*9c5db199SXin Li utils.system(self.cmd + ' off') 55*9c5db199SXin Li 56*9c5db199SXin Li 57*9c5db199SXin Li def report(self, test): 58*9c5db199SXin Li args = ' -m ' + utils.get_systemmap() 59*9c5db199SXin Li self.output = self.profdir + '/results/lockstat' 60*9c5db199SXin Li utils.system(self.cmd + args + ' print > ' + self.output) 61