xref: /aosp_15_r20/external/autotest/client/profilers/turbostat/turbostat.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li"""
2*9c5db199SXin Liturbostat prints out CPU stats
3*9c5db199SXin Li"""
4*9c5db199SXin Li
5*9c5db199SXin Liimport os, subprocess, signal
6*9c5db199SXin Liimport logging
7*9c5db199SXin Lifrom autotest_lib.client.bin import profiler, os_dep
8*9c5db199SXin Li
9*9c5db199SXin Li
10*9c5db199SXin Liclass turbostat(profiler.profiler):
11*9c5db199SXin Li    """
12*9c5db199SXin Li    turbostat reports processor topology, frequency, idle power-state
13*9c5db199SXin Li    statistics, etc.
14*9c5db199SXin Li    """
15*9c5db199SXin Li    version = 1
16*9c5db199SXin Li
17*9c5db199SXin Li    def initialize(self):
18*9c5db199SXin Li        self.bin = os_dep.command('turbostat')
19*9c5db199SXin Li
20*9c5db199SXin Li    def start(self, test):
21*9c5db199SXin Li        self._output = open(os.path.join(test.profdir, "turbostat"), "wt")
22*9c5db199SXin Li
23*9c5db199SXin Li        cmd = [self.bin]
24*9c5db199SXin Li        logging.debug("Starting turbostat: %s", cmd)
25*9c5db199SXin Li
26*9c5db199SXin Li        # Log the start time so a complete datetime can be computed later
27*9c5db199SXin Li        subprocess.call(['date', '-Iseconds'], stdout=self._output)
28*9c5db199SXin Li
29*9c5db199SXin Li        self._process = subprocess.Popen(
30*9c5db199SXin Li                cmd,
31*9c5db199SXin Li                stdout=self._output,
32*9c5db199SXin Li                stderr=subprocess.STDOUT,
33*9c5db199SXin Li                close_fds=True)
34*9c5db199SXin Li
35*9c5db199SXin Li    def stop(self, test):
36*9c5db199SXin Li        logging.debug("Stopping turbostat")
37*9c5db199SXin Li
38*9c5db199SXin Li        os.kill(self._process.pid, signal.SIGTERM)
39*9c5db199SXin Li
40*9c5db199SXin Li        self._process.wait()
41*9c5db199SXin Li
42*9c5db199SXin Li        logging.debug("Stopped turbostat")
43*9c5db199SXin Li
44*9c5db199SXin Li        self._output.close()
45*9c5db199SXin Li
46*9c5db199SXin Li    def report(self, test):
47*9c5db199SXin Li        pass
48