1*9c5db199SXin Li""" 2*9c5db199SXin LiRun iostat with a default interval of 1 second. 3*9c5db199SXin Li""" 4*9c5db199SXin Liimport time, os, subprocess 5*9c5db199SXin Lifrom autotest_lib.client.bin import profiler 6*9c5db199SXin Lifrom autotest_lib.client.common_lib import utils, error 7*9c5db199SXin Li 8*9c5db199SXin Li 9*9c5db199SXin Liclass iostat(profiler.profiler): 10*9c5db199SXin Li version = 2 11*9c5db199SXin Li 12*9c5db199SXin Li def initialize(self, interval = 1, options = ''): 13*9c5db199SXin Li # Usage: iostat [ options... ] [ <interval> [ <count> ] ] 14*9c5db199SXin Li # e.g, iostat -tmx 2 15*9c5db199SXin Li self.interval = interval 16*9c5db199SXin Li self.options = options 17*9c5db199SXin Li 18*9c5db199SXin Li 19*9c5db199SXin Li def start(self, test): 20*9c5db199SXin Li cmd = "/usr/bin/iostat %s %d" % (self.options, self.interval) 21*9c5db199SXin Li filename = "iostat." + time.strftime("%Y-%m-%d-%H-%M-%S") 22*9c5db199SXin Li logfile = open(os.path.join(test.profdir, filename), 'w') 23*9c5db199SXin Li p = subprocess.Popen(cmd, shell=True, stdout=logfile, 24*9c5db199SXin Li stderr=subprocess.STDOUT) 25*9c5db199SXin Li self.pid = p.pid 26*9c5db199SXin Li 27*9c5db199SXin Li 28*9c5db199SXin Li def stop(self, test): 29*9c5db199SXin Li try: 30*9c5db199SXin Li term_profiler = "kill -15 %d" % self.pid 31*9c5db199SXin Li # send SIGTERM to iostat and give it a 5-sec timeout 32*9c5db199SXin Li utils.system(term_profiler, timeout=5) 33*9c5db199SXin Li except error.CmdError: # probably times out 34*9c5db199SXin Li pass 35*9c5db199SXin Li # do a ps again to see if iostat is still there 36*9c5db199SXin Li ps_cmd = "ps -p %d | grep iostat" % self.pid 37*9c5db199SXin Li out = utils.system_output(ps_cmd, ignore_status=True) 38*9c5db199SXin Li if out != '': 39*9c5db199SXin Li kill_profiler = 'kill -9 %d' % self.pid 40*9c5db199SXin Li utils.system(kill_profiler, ignore_status=True) 41*9c5db199SXin Li 42*9c5db199SXin Li 43*9c5db199SXin Li def report(self, test): 44*9c5db199SXin Li return None 45