blob: c52e76bc5b768df5ebe825e2cca7d852f6e56561 [file] [log] [blame]
Javi Merinoe4c1d452014-04-01 17:00:47 +01001#!/usr/bin/python
Javi Merino034e7cc2015-04-22 18:39:21 +01002# $Copyright:
3# ----------------------------------------------------------------
4# This confidential and proprietary software may be used only as
5# authorised by a licensing agreement from ARM Limited
6# (C) COPYRIGHT 2015 ARM Limited
7# ALL RIGHTS RESERVED
8# The entire notice above must be reproduced on all authorised
9# copies and copies may only be made to the extent permitted
10# by a licensing agreement from ARM Limited.
11# ----------------------------------------------------------------
Javi Merino2cfd1e82015-04-21 17:22:28 +010012# File: test_cpu_power.py
Javi Merino034e7cc2015-04-22 18:39:21 +010013# ----------------------------------------------------------------
14# $
15#
Javi Merinoe4c1d452014-04-01 17:00:47 +010016
Javi Merino86f3bb92014-08-11 17:07:35 +010017import matplotlib
Javi Merinofff33672014-06-18 16:56:34 +010018import pandas as pd
19
Javi Merino076277d2014-07-02 18:48:18 +010020from test_thermal import BaseTestThermal
Javi Merino9d6dabd2014-08-14 15:32:36 +010021import cr2
Javi Merino2cfd1e82015-04-21 17:22:28 +010022import cpu_power
Javi Merinoe4c1d452014-04-01 17:00:47 +010023
Javi Merino2cfd1e82015-04-21 17:22:28 +010024class TestCpuPower(BaseTestThermal):
Javi Merino34f9da12014-06-19 15:48:16 +010025 def __init__(self, *args, **kwargs):
Javi Merino2cfd1e82015-04-21 17:22:28 +010026 super(TestCpuPower, self).__init__(*args, **kwargs)
Javi Merinod721b272015-04-20 15:37:53 +010027 self.map_label = {"00000000,00000039": "A53", "00000000,00000006": "A57"}
Javi Merino34f9da12014-06-19 15:48:16 +010028
Javi Merinofff33672014-06-18 16:56:34 +010029 def test_pivot_with_labels(self):
30 """Test pivot_with_labels()"""
Javi Merinoc68e3792014-07-02 18:14:33 +010031 map_label = {"000000f0": "A15", "0000000f": "A7"}
Javi Merinofff33672014-06-18 16:56:34 +010032 dfr_in = pd.DataFrame({'cpus': ["000000f0", "0000000f", "000000f0", "0000000f"],
33 'freq': [1, 3, 2, 6]})
Javi Merinofff33672014-06-18 16:56:34 +010034
Javi Merino2cfd1e82015-04-21 17:22:28 +010035 dfr_out = cpu_power.pivot_with_labels(dfr_in, "freq", "cpus", map_label)
Javi Merinofff33672014-06-18 16:56:34 +010036
37 self.assertEquals(dfr_out["A15"].iloc[0], 1)
38 self.assertEquals(dfr_out["A15"].iloc[1], 1)
39 self.assertEquals(dfr_out["A15"].iloc[2], 2)
40 self.assertEquals(dfr_out["A7"].iloc[1], 3)
41
Javi Merino2cfd1e82015-04-21 17:22:28 +010042 def test_cpuoutpower_dataframe(self):
43 """Test that CpuOutPower() creates a proper data_frame"""
44 outp = cr2.Run().cpu_out_power
Javi Merinoe4c1d452014-04-01 17:00:47 +010045
Javi Merinod721b272015-04-20 15:37:53 +010046 self.assertEquals(outp.data_frame["power"].iloc[0], 1344)
Javi Merino92f4d012014-08-08 17:55:32 +010047 self.assertTrue("cdev_state" in outp.data_frame.columns)
Javi Merino62c56dc2014-05-07 17:41:12 +010048
Javi Merino2cfd1e82015-04-21 17:22:28 +010049 def test_cpuoutpower_get_all_freqs(self):
50 """Test CpuOutPower.get_all_freqs()"""
51 dfr = cr2.Run().cpu_out_power.get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010052
Javi Merinod721b272015-04-20 15:37:53 +010053 self.assertEquals(dfr["A57"].iloc[0], 1100)
54 self.assertEquals(dfr["A53"].iloc[1], 850)
Javi Merino73234c12014-06-18 17:27:16 +010055
Javi Merino2cfd1e82015-04-21 17:22:28 +010056 def test_cpuinpower_get_dataframe(self):
57 """Test that CpuInPower() creates a proper data_frame()"""
58 inp = cr2.Run().cpu_in_power
Javi Merino62c56dc2014-05-07 17:41:12 +010059
Javi Merino92f4d012014-08-08 17:55:32 +010060 self.assertTrue("load0" in inp.data_frame.columns)
Javi Merinod721b272015-04-20 15:37:53 +010061 self.assertEquals(inp.data_frame["load0"].iloc[0], 24)
Javi Merino8a79fb32014-05-07 17:56:23 +010062
Javi Merino2cfd1e82015-04-21 17:22:28 +010063 def test_cpuinpower_big_cpumask(self):
64 """CpuInPower()'s data_frame is not confused by 64-bit cpumasks"""
Javi Merino66492492015-01-12 15:43:43 +000065 in_data = """ kworker/2:2-679 [002] 676.256284: thermal_power_cpu_get: cpus=00000000,0000000f freq=261888 cdev_state=5 power=12
66 kworker/2:2-679 [002] 676.276200: thermal_power_cpu_get: cpus=00000000,00000030 freq=261888 cdev_state=5 power=0
67 kworker/2:2-679 [002] 676.416202: thermal_power_cpu_get: cpus=00000000,0000000f freq=261888 cdev_state=5 power=0
Javi Merino35c1ac72014-07-04 10:29:04 +010068 """
69 with open("trace.txt", "w") as fout:
70 fout.write(in_data)
71
Javi Merino2cfd1e82015-04-21 17:22:28 +010072 inp = cr2.Run(normalize_time=False).cpu_in_power
Javi Merino92f4d012014-08-08 17:55:32 +010073 self.assertEquals(round(inp.data_frame.index[0], 6), 676.256284)
Javi Merinod6284da2014-08-14 12:12:13 +010074 self.assertEquals(inp.data_frame["cpus"].iloc[1], "00000000,00000030")
Javi Merino35c1ac72014-07-04 10:29:04 +010075
Javi Merino2cfd1e82015-04-21 17:22:28 +010076 def test_cpuinpower_data_frame_asymmetric_clusters(self):
77 """Test that CpuInPower()'s data_frame can handle asymmetric clusters
Javi Merino9ce2fb62014-07-04 20:02:13 +010078
79 That is 2 cpus in one cluster and 4 in another, like Juno
80 """
Javi Merino978ebfb2015-02-17 15:30:38 +000081 in_data = """
82 kworker/2:2-679 [002] 676.256261: thermal_power_cpu_get: cpus=00000000,00000030 freq=1900000 raw_cpu_power=1259 load={74 49} power=451
83 kworker/2:2-679 [002] 676.256271: thermal_power_cpu_get: cpus=00000000,0000000f freq=450000 raw_cpu_power=36 load={1 2 1 3} power=9
Javi Merino9ce2fb62014-07-04 20:02:13 +010084"""
85
86 with open("trace.txt", "w") as fout:
87 fout.write(in_data)
88
Javi Merino2cfd1e82015-04-21 17:22:28 +010089 inp = cr2.Run(normalize_time=False).cpu_in_power
Javi Merino9ce2fb62014-07-04 20:02:13 +010090
Javi Merino978ebfb2015-02-17 15:30:38 +000091 self.assertEquals(inp.data_frame["load0"].iloc[0], 74)
92 self.assertEquals(inp.data_frame["load1"].iloc[0], 49)
93 self.assertEquals(inp.data_frame["load2"].iloc[0], 0)
94 self.assertEquals(inp.data_frame["load3"].iloc[0], 0)
95 self.assertEquals(inp.data_frame["load0"].iloc[1], 1)
96 self.assertEquals(inp.data_frame["load1"].iloc[1], 2)
97 self.assertEquals(inp.data_frame["load2"].iloc[1], 1)
98 self.assertEquals(inp.data_frame["load3"].iloc[1], 3)
Javi Merino35c1ac72014-07-04 10:29:04 +010099
Javi Merino2cfd1e82015-04-21 17:22:28 +0100100 def test_cpuinpower_get_all_freqs(self):
101 """Test CpuInPower.get_all_freqs()"""
102 dfr = cr2.Run().cpu_in_power.get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +0100103
Javi Merinod721b272015-04-20 15:37:53 +0100104 self.assertEquals(dfr["A57"].iloc[0], 1100)
105 self.assertEquals(dfr["A53"].iloc[1], 850)
106 self.assertEquals(dfr["A57"].iloc[5], 1100)
Javi Merino73234c12014-06-18 17:27:16 +0100107
Javi Merino2cfd1e82015-04-21 17:22:28 +0100108 def test_cpuinpower_get_load_data(self):
109 """Test CpuInPower.get_load_data()"""
Javi Merino7ad9ce02015-06-16 16:34:10 +0100110 run = cr2.Run()
111 first_load = run.cpu_in_power.data_frame["load0"].iloc[0]
112 load_data = run.cpu_in_power.get_load_data(self.map_label)
Javi Merino9237a3c2014-06-18 12:18:51 +0100113
Javi Merinod721b272015-04-20 15:37:53 +0100114 self.assertEquals(load_data["A57"].iloc[0], 24 + 19)
115 self.assertEquals(load_data["A53"].iloc[3], 32 + 28 + 46 + 44)
116 self.assertEquals(load_data["A57"].iloc[0], load_data["A57"].iloc[1])
Javi Merino7ad9ce02015-06-16 16:34:10 +0100117
118 self.assertEquals(run.cpu_in_power.data_frame["load0"].iloc[0],
119 first_load)