blob: 8fe3e95a4f6c625f1dcf1f94c0ad22d4b7c48c79 [file] [log] [blame]
# Copyright 2015-2016 ARM Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
An example file for usage of Analyzer for thermal assertions
"""
from bart.common.Analyzer import Analyzer
from trappy.stats.Topology import Topology
import unittest
import trappy
class TestThermal(unittest.TestCase):
@classmethod
def setUpClass(cls):
# We can run a workload invocation script here
# Which then copies the required traces for analysis to
# the host.
trace_file = "update_a_trace_path_here"
ftrace = trappy.FTrace(trace_file, "test_run")
# Define the parameters that you intend to use in the grammar
config = {}
config["THERMAL"] = trappy.thermal.Thermal
config["OUT"] = trappy.cpu_power.CpuOutPower
config["IN"] = trappy.cpu_power.CpuInPower
config["PID"] = trappy.pid_controller.PIDController
config["GOVERNOR"] = trappy.thermal.ThermalGovernor
config["CONTROL_TEMP"] = 77000
config["SUSTAINABLE_POWER"] = 2500
config["EXPECTED_TEMP_QRT"] = 95
config["EXPECTED_STD_PCT"] = 5
# Define a Topology
cls.BIG = '000000f0'
cls.LITTLE = '0000000f'
cls.tz = 0
cls.analyzer = Analyzer(ftrace, config)
def test_temperature_quartile(self):
"""Assert Temperature quartile"""
self.assertTrue(self.analyzer.assertStatement(
"numpy.percentile(THERMAL:temp, EXPECTED_TEMP_QRT) < (CONTROL_TEMP + 5000)"))
def test_average_temperature(self):
"""Assert Average temperature"""
self.assertTrue(self.analyzer.assertStatement(
"numpy.mean(THERMAL:temp) < CONTROL_TEMP", select=self.tz))
def test_temp_stdev(self):
"""Assert StdDev(temp) as % of mean"""
self.assertTrue(self.analyzer.assertStatement(
"(numpy.std(THERMAL:temp) * 100.0) / numpy.mean(THERMAL:temp)\
< EXPECTED_STD_PCT", select=self.tz))
def test_zero_load_input_power(self):
"""Test power demand when load is zero"""
zero_load_power_big = self.analyzer.getStatement("((IN:load0 + IN:load1 + IN:load2 + IN:load3) == 0) \
& (IN:dynamic_power > 0)", reference=True, select=self.BIG)
self.assertEquals(len(zero_load_power_big), 0)
zero_load_power_little = self.analyzer.getStatement("((IN:load0 + IN:load1 + IN:load2 + IN:load3) == 0) \
& (IN:dynamic_power > 0)", reference=True, select=self.LITTLE)
self.assertEquals(len(zero_load_power_little), 0)
def test_sustainable_power(self):
"""temp > control_temp, allocated_power < sustainable_power"""
self.analyzer.getStatement("(GOVERNOR:current_temperature > CONTROL_TEMP) &\
(PID:output > SUSTAINABLE_POWER)", reference=True, select=0)