blob: f2d9a45dc9137e8009e0c83eb43b7fa822a1823f [file] [log] [blame]
Javi Merinoe4c1d452014-04-01 17:00:47 +01001#!/usr/bin/python
2
Javi Merino86f3bb92014-08-11 17:07:35 +01003import matplotlib
Javi Merinofff33672014-06-18 16:56:34 +01004import pandas as pd
5
Javi Merino076277d2014-07-02 18:48:18 +01006from test_thermal import BaseTestThermal
Javi Merino9d6dabd2014-08-14 15:32:36 +01007import cr2
Javi Merinofff33672014-06-18 16:56:34 +01008import power
Javi Merinoe4c1d452014-04-01 17:00:47 +01009
Javi Merino076277d2014-07-02 18:48:18 +010010class TestPower(BaseTestThermal):
Javi Merino34f9da12014-06-19 15:48:16 +010011 def __init__(self, *args, **kwargs):
12 super(TestPower, self).__init__(*args, **kwargs)
13 self.map_label = {"000000f0": "A15", "0000000f": "A7"}
14
Javi Merinofff33672014-06-18 16:56:34 +010015 def test_pivot_with_labels(self):
16 """Test pivot_with_labels()"""
Javi Merinoc68e3792014-07-02 18:14:33 +010017 map_label = {"000000f0": "A15", "0000000f": "A7"}
Javi Merinofff33672014-06-18 16:56:34 +010018 dfr_in = pd.DataFrame({'cpus': ["000000f0", "0000000f", "000000f0", "0000000f"],
19 'freq': [1, 3, 2, 6]})
Javi Merinofff33672014-06-18 16:56:34 +010020
Javi Merinoc68e3792014-07-02 18:14:33 +010021 dfr_out = power.pivot_with_labels(dfr_in, "freq", "cpus", map_label)
Javi Merinofff33672014-06-18 16:56:34 +010022
23 self.assertEquals(dfr_out["A15"].iloc[0], 1)
24 self.assertEquals(dfr_out["A15"].iloc[1], 1)
25 self.assertEquals(dfr_out["A15"].iloc[2], 2)
26 self.assertEquals(dfr_out["A7"].iloc[1], 3)
27
Javi Merino92f4d012014-08-08 17:55:32 +010028 def test_outpower_dataframe(self):
29 """Test that OutPower() creates a proper data_frame"""
Javi Merino9d6dabd2014-08-14 15:32:36 +010030 outp = cr2.Run().out_power
Javi Merinoe4c1d452014-04-01 17:00:47 +010031
Javi Merino66492492015-01-12 15:43:43 +000032 self.assertEquals(outp.data_frame["power"].iloc[0], 2429)
Javi Merino92f4d012014-08-08 17:55:32 +010033 self.assertTrue("cdev_state" in outp.data_frame.columns)
Javi Merino62c56dc2014-05-07 17:41:12 +010034
Javi Merino73234c12014-06-18 17:27:16 +010035 def test_outpower_get_all_freqs(self):
36 """Test OutPower.get_all_freqs()"""
Javi Merino9d6dabd2014-08-14 15:32:36 +010037 dfr = cr2.Run().out_power.get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010038
Javi Merino66492492015-01-12 15:43:43 +000039 self.assertEquals(dfr["A15"].iloc[0], 1000)
40 self.assertEquals(dfr["A7"].iloc[1], 1600)
Javi Merino73234c12014-06-18 17:27:16 +010041
Javi Merino62c56dc2014-05-07 17:41:12 +010042 def test_inpower_get_dataframe(self):
Javi Merino92f4d012014-08-08 17:55:32 +010043 """Test that InPower() creates a proper data_frame()"""
Javi Merino9d6dabd2014-08-14 15:32:36 +010044 inp = cr2.Run().in_power
Javi Merino62c56dc2014-05-07 17:41:12 +010045
Javi Merino92f4d012014-08-08 17:55:32 +010046 self.assertTrue("load0" in inp.data_frame.columns)
Javi Merino66492492015-01-12 15:43:43 +000047 self.assertEquals(inp.data_frame["load0"].iloc[0], 100)
Javi Merino8a79fb32014-05-07 17:56:23 +010048
Javi Merino35c1ac72014-07-04 10:29:04 +010049 def test_inpower_big_cpumask(self):
Javi Merino92f4d012014-08-08 17:55:32 +010050 """InPower()'s data_frame is not confused by 64-bit cpumasks"""
Javi Merino66492492015-01-12 15:43:43 +000051 in_data = """ kworker/2:2-679 [002] 676.256284: thermal_power_cpu_get: cpus=00000000,0000000f freq=261888 cdev_state=5 power=12
52 kworker/2:2-679 [002] 676.276200: thermal_power_cpu_get: cpus=00000000,00000030 freq=261888 cdev_state=5 power=0
53 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 +010054 """
55 with open("trace.txt", "w") as fout:
56 fout.write(in_data)
57
Javi Merinoe6dc1ae2014-10-25 10:56:51 +010058 inp = cr2.Run(normalize_time=False).in_power
Javi Merino92f4d012014-08-08 17:55:32 +010059 self.assertEquals(round(inp.data_frame.index[0], 6), 676.256284)
Javi Merinod6284da2014-08-14 12:12:13 +010060 self.assertEquals(inp.data_frame["cpus"].iloc[1], "00000000,00000030")
Javi Merino35c1ac72014-07-04 10:29:04 +010061
Javi Merino92f4d012014-08-08 17:55:32 +010062 def test_inpower_data_frame_asymmetric_clusters(self):
63 """Test that InPower()'s data_frame can handle asymmetric clusters
Javi Merino9ce2fb62014-07-04 20:02:13 +010064
65 That is 2 cpus in one cluster and 4 in another, like Juno
66 """
Javi Merino978ebfb2015-02-17 15:30:38 +000067 in_data = """
68 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
69 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 +010070"""
71
72 with open("trace.txt", "w") as fout:
73 fout.write(in_data)
74
Javi Merinoe6dc1ae2014-10-25 10:56:51 +010075 inp = cr2.Run(normalize_time=False).in_power
Javi Merino9ce2fb62014-07-04 20:02:13 +010076
Javi Merino978ebfb2015-02-17 15:30:38 +000077 self.assertEquals(inp.data_frame["load0"].iloc[0], 74)
78 self.assertEquals(inp.data_frame["load1"].iloc[0], 49)
79 self.assertEquals(inp.data_frame["load2"].iloc[0], 0)
80 self.assertEquals(inp.data_frame["load3"].iloc[0], 0)
81 self.assertEquals(inp.data_frame["load0"].iloc[1], 1)
82 self.assertEquals(inp.data_frame["load1"].iloc[1], 2)
83 self.assertEquals(inp.data_frame["load2"].iloc[1], 1)
84 self.assertEquals(inp.data_frame["load3"].iloc[1], 3)
Javi Merino35c1ac72014-07-04 10:29:04 +010085
Javi Merino73234c12014-06-18 17:27:16 +010086 def test_inpower_get_all_freqs(self):
87 """Test InPower.get_all_freqs()"""
Javi Merino9d6dabd2014-08-14 15:32:36 +010088 dfr = cr2.Run().in_power.get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010089
Javi Merino66492492015-01-12 15:43:43 +000090 self.assertEquals(dfr["A15"].iloc[0], 1100)
91 self.assertEquals(dfr["A7"].iloc[1], 1500)
92 self.assertEquals(dfr["A15"].iloc[5], 1100)
Javi Merino73234c12014-06-18 17:27:16 +010093
Javi Merino9237a3c2014-06-18 12:18:51 +010094 def test_inpower_get_load_data(self):
95 """Test InPower.get_load_data()"""
Javi Merino9d6dabd2014-08-14 15:32:36 +010096 load_data = cr2.Run().in_power.get_load_data(self.map_label)
Javi Merino9237a3c2014-06-18 12:18:51 +010097
Javi Merino66492492015-01-12 15:43:43 +000098 self.assertEquals(load_data["A15"].iloc[0], 100 + 100 + 100 + 100)
Javi Merinoe8576cb2014-06-30 16:31:46 +010099 self.assertEquals(load_data["A7"].iloc[3], 100 + 100 + 100 + 100)
Javi Merino9237a3c2014-06-18 12:18:51 +0100100 self.assertEquals(load_data["A15"].iloc[0], load_data["A15"].iloc[1])