blob: e0e503ef8e8ecebfa00cde8fb43b7f85c7584b94 [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 Merino62c56dc2014-05-07 17:41:12 +01007from cr2 import OutPower, InPower
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"""
30 outp = OutPower()
Javi Merinoe4c1d452014-04-01 17:00:47 +010031
Javi Merino92f4d012014-08-08 17:55:32 +010032 self.assertEquals(outp.data_frame["power"].iloc[0], 5036)
33 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 Merino34f9da12014-06-19 15:48:16 +010037 dfr = OutPower().get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010038
39 self.assertEquals(dfr["A15"].iloc[0], 1900)
40 self.assertEquals(dfr["A7"].iloc[1], 1400)
41
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()"""
44 inp = InPower()
Javi Merino62c56dc2014-05-07 17:41:12 +010045
Javi Merino92f4d012014-08-08 17:55:32 +010046 self.assertTrue("load0" in inp.data_frame.columns)
47 self.assertEquals(inp.data_frame["load0"].iloc[0], 2)
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 Merino35c1ac72014-07-04 10:29:04 +010051 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
52 kworker/2:2-679 [002] 676.276200: thermal_power_actor_cpu_get_dyn: cpus=00000000,00000030 freq=261888 cdev_state=5 power=0
53 kworker/2:2-679 [002] 676.416202: thermal_power_actor_cpu_get_dyn: cpus=00000000,0000000f freq=261888 cdev_state=5 power=0
54 """
55 with open("trace.txt", "w") as fout:
56 fout.write(in_data)
57
Javi Merino92f4d012014-08-08 17:55:32 +010058 inp = InPower()
59 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 """
67 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
68 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
69"""
70
71 with open("trace.txt", "w") as fout:
72 fout.write(in_data)
73
Javi Merino92f4d012014-08-08 17:55:32 +010074 inp = InPower()
Javi Merino9ce2fb62014-07-04 20:02:13 +010075
Javi Merino92f4d012014-08-08 17:55:32 +010076 self.assertEquals(inp.data_frame["load0"].iloc[0], 1)
77 self.assertEquals(inp.data_frame["load1"].iloc[0], 2)
78 self.assertEquals(inp.data_frame["load2"].iloc[0], 1)
79 self.assertEquals(inp.data_frame["load3"].iloc[0], 3)
80 self.assertEquals(inp.data_frame["load0"].iloc[1], 74)
81 self.assertEquals(inp.data_frame["load1"].iloc[1], 49)
82 self.assertEquals(inp.data_frame["load2"].iloc[1], 0)
83 self.assertEquals(inp.data_frame["load3"].iloc[1], 0)
Javi Merino35c1ac72014-07-04 10:29:04 +010084
Javi Merino73234c12014-06-18 17:27:16 +010085 def test_inpower_get_all_freqs(self):
86 """Test InPower.get_all_freqs()"""
Javi Merinocda0f992014-06-19 16:23:00 +010087 dfr = InPower().get_all_freqs(self.map_label)
Javi Merino73234c12014-06-18 17:27:16 +010088
89 self.assertEquals(dfr["A15"].iloc[0], 1900)
Javi Merinoe8576cb2014-06-30 16:31:46 +010090 self.assertEquals(dfr["A7"].iloc[1], 1400)
Javi Merinof7968a72014-07-03 15:35:02 +010091 self.assertEquals(dfr["A15"].iloc[55], 1800)
Javi Merino73234c12014-06-18 17:27:16 +010092
Javi Merino9237a3c2014-06-18 12:18:51 +010093 def test_inpower_get_load_data(self):
94 """Test InPower.get_load_data()"""
Javi Merinocda0f992014-06-19 16:23:00 +010095 load_data = InPower().get_load_data(self.map_label)
Javi Merino9237a3c2014-06-18 12:18:51 +010096
Javi Merinof7968a72014-07-03 15:35:02 +010097 self.assertEquals(load_data["A15"].iloc[0], 2 + 3 + 2 + 3)
Javi Merinoe8576cb2014-06-30 16:31:46 +010098 self.assertEquals(load_data["A7"].iloc[3], 100 + 100 + 100 + 100)
Javi Merino9237a3c2014-06-18 12:18:51 +010099 self.assertEquals(load_data["A15"].iloc[0], load_data["A15"].iloc[1])
100
Javi Merino9237a3c2014-06-18 12:18:51 +0100101 def test_inpower_plot_load(self):
102 """Test that InPower.plot_load() doesn't explode"""
Javi Merino86f3bb92014-08-11 17:07:35 +0100103 inp = InPower()
104 inp.plot_load(self.map_label, title="Util")
105
106 _, ax = matplotlib.pyplot.subplots()
107 inp.plot_load(self.map_label, ax=ax)