blob: aa84823f851be2945d86dc987c1ee24c31cb43c6 [file] [log] [blame]
Javi Merinoe4c1d452014-04-01 17:00:47 +01001#!/usr/bin/python
2
Javi Merinofff33672014-06-18 16:56:34 +01003import pandas as pd
4
Javi Merino076277d2014-07-02 18:48:18 +01005from test_thermal import BaseTestThermal
Javi Merino62c56dc2014-05-07 17:41:12 +01006from cr2 import OutPower, InPower
Javi Merinofff33672014-06-18 16:56:34 +01007import power
Javi Merinoe4c1d452014-04-01 17:00:47 +01008
Javi Merino076277d2014-07-02 18:48:18 +01009class TestPower(BaseTestThermal):
Javi Merino34f9da12014-06-19 15:48:16 +010010 def __init__(self, *args, **kwargs):
11 super(TestPower, self).__init__(*args, **kwargs)
12 self.map_label = {"000000f0": "A15", "0000000f": "A7"}
13
Javi Merinofff33672014-06-18 16:56:34 +010014 def test_pivot_with_labels(self):
15 """Test pivot_with_labels()"""
Javi Merinoc68e3792014-07-02 18:14:33 +010016 map_label = {"000000f0": "A15", "0000000f": "A7"}
Javi Merinofff33672014-06-18 16:56:34 +010017 dfr_in = pd.DataFrame({'cpus': ["000000f0", "0000000f", "000000f0", "0000000f"],
18 'freq': [1, 3, 2, 6]})
Javi Merinofff33672014-06-18 16:56:34 +010019
Javi Merinoc68e3792014-07-02 18:14:33 +010020 dfr_out = power.pivot_with_labels(dfr_in, "freq", "cpus", map_label)
Javi Merinofff33672014-06-18 16:56:34 +010021
22 self.assertEquals(dfr_out["A15"].iloc[0], 1)
23 self.assertEquals(dfr_out["A15"].iloc[1], 1)
24 self.assertEquals(dfr_out["A15"].iloc[2], 2)
25 self.assertEquals(dfr_out["A7"].iloc[1], 3)
26
Javi Merino493f2762014-06-19 09:42:06 +010027 def test_get_all_freqs_data(self):
28 """Test get_all_freqs_data()"""
29
30 inp = InPower()
31 outp = OutPower()
32
33 allfreqs = power.get_all_freqs_data(inp, outp, self.map_label)
34
35 self.assertEquals(allfreqs["A7"]["A7_freq_out"].iloc[1], 1400)
Javi Merinoe8576cb2014-06-30 16:31:46 +010036 self.assertEquals(allfreqs["A7"]["A7_freq_in"].iloc[35], 1400)
Javi Merino493f2762014-06-19 09:42:06 +010037 self.assertEquals(allfreqs["A15"]["A15_freq_out"].iloc[0], 1900)
38
39 # Make sure there are no NaNs in the middle of the array
40 self.assertTrue(allfreqs["A15"]["A15_freq_out"].notnull().all())
41
Javi Merino2e920b52014-05-07 17:29:36 +010042 def test_outpower_get_dataframe(self):
43 """Test OutPower.get_data_frame()"""
44 df = OutPower().get_data_frame()
Javi Merinoe4c1d452014-04-01 17:00:47 +010045
Javi Merino2b65c0b2014-06-04 18:16:42 +010046 self.assertEquals(df["power"].iloc[0], 5036)
Javi Merinoe4c1d452014-04-01 17:00:47 +010047 self.assertTrue("cdev_state" in df.columns)
Javi Merino62c56dc2014-05-07 17:41:12 +010048
Javi Merino73234c12014-06-18 17:27:16 +010049 def test_outpower_get_all_freqs(self):
50 """Test OutPower.get_all_freqs()"""
Javi Merino34f9da12014-06-19 15:48:16 +010051 dfr = OutPower().get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010052
53 self.assertEquals(dfr["A15"].iloc[0], 1900)
54 self.assertEquals(dfr["A7"].iloc[1], 1400)
55
Javi Merino62c56dc2014-05-07 17:41:12 +010056 def test_inpower_get_dataframe(self):
57 """Test InPower.get_data_frame()"""
58 df = InPower().get_data_frame()
59
Javi Merino62c56dc2014-05-07 17:41:12 +010060 self.assertTrue("load0" in df.columns)
Javi Merinof7968a72014-07-03 15:35:02 +010061 self.assertEquals(df["load0"].iloc[0], 2)
Javi Merino8a79fb32014-05-07 17:56:23 +010062
Javi Merino35c1ac72014-07-04 10:29:04 +010063 def test_inpower_big_cpumask(self):
64 """InPower.get_data_frame() is not confused by 64-bit cpumasks"""
65 in_data = """ kworker/2:2-679 [002] 676.256284: thermal_power_actor_cpu_get_dyn: cpus=00000000,0000000f freq=261888 cdev_state=5 power=12
66 kworker/2:2-679 [002] 676.276200: thermal_power_actor_cpu_get_dyn: cpus=00000000,00000030 freq=261888 cdev_state=5 power=0
67 kworker/2:2-679 [002] 676.416202: thermal_power_actor_cpu_get_dyn: cpus=00000000,0000000f freq=261888 cdev_state=5 power=0
68 """
69 with open("trace.txt", "w") as fout:
70 fout.write(in_data)
71
72 dfr = InPower().get_data_frame()
73 self.assertEquals(round(dfr.index[0], 6), 676.256284)
74 self.assertEquals(dfr["cpus"].iloc[1], "0000000000000030")
75
Javi Merino9ce2fb62014-07-04 20:02:13 +010076 def test_inpower_get_data_frame_asymmetric_clusters(self):
77 """Test that InPower.get_data_frame() can handle asymmetric clusters
78
79 That is 2 cpus in one cluster and 4 in another, like Juno
80 """
81 in_data = """ kworker/2:2-679 [002] 676.256261: thermal_power_actor_cpu_get_dyn_power: cpus=00000000,0000000f freq=450000 raw_cpu_power=36 load={1 2 1 3} power=9
82 kworker/2:2-679 [002] 676.256271: thermal_power_actor_cpu_get_dyn_power: cpus=00000000,00000030 freq=1900000 raw_cpu_power=1259 load={74 49} power=451
83"""
84
85 with open("trace.txt", "w") as fout:
86 fout.write(in_data)
87
88 dfr = InPower().get_data_frame()
89
90 self.assertEquals(dfr["load0"].iloc[0], 1)
91 self.assertEquals(dfr["load1"].iloc[0], 2)
92 self.assertEquals(dfr["load2"].iloc[0], 1)
93 self.assertEquals(dfr["load3"].iloc[0], 3)
94 self.assertEquals(dfr["load0"].iloc[1], 74)
95 self.assertEquals(dfr["load1"].iloc[1], 49)
96 self.assertEquals(dfr["load2"].iloc[1], 0)
97 self.assertEquals(dfr["load3"].iloc[1], 0)
Javi Merino35c1ac72014-07-04 10:29:04 +010098
Javi Merino73234c12014-06-18 17:27:16 +010099 def test_inpower_get_all_freqs(self):
100 """Test InPower.get_all_freqs()"""
Javi Merinocda0f992014-06-19 16:23:00 +0100101 dfr = InPower().get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +0100102
103 self.assertEquals(dfr["A15"].iloc[0], 1900)
Javi Merinoe8576cb2014-06-30 16:31:46 +0100104 self.assertEquals(dfr["A7"].iloc[1], 1400)
Javi Merinof7968a72014-07-03 15:35:02 +0100105 self.assertEquals(dfr["A15"].iloc[55], 1800)
Javi Merino73234c12014-06-18 17:27:16 +0100106
Javi Merino9237a3c2014-06-18 12:18:51 +0100107 def test_inpower_get_load_data(self):
108 """Test InPower.get_load_data()"""
Javi Merinocda0f992014-06-19 16:23:00 +0100109 load_data = InPower().get_load_data(self.map_label)
Javi Merino9237a3c2014-06-18 12:18:51 +0100110
Javi Merinof7968a72014-07-03 15:35:02 +0100111 self.assertEquals(load_data["A15"].iloc[0], 2 + 3 + 2 + 3)
Javi Merinoe8576cb2014-06-30 16:31:46 +0100112 self.assertEquals(load_data["A7"].iloc[3], 100 + 100 + 100 + 100)
Javi Merino9237a3c2014-06-18 12:18:51 +0100113 self.assertEquals(load_data["A15"].iloc[0], load_data["A15"].iloc[1])
114
Javi Merino9237a3c2014-06-18 12:18:51 +0100115 def test_inpower_plot_load(self):
116 """Test that InPower.plot_load() doesn't explode"""
Javi Merinocda0f992014-06-19 16:23:00 +0100117 InPower().plot_load(self.map_label, title="Util")