Source code for trappy.wa.sysfs_extractor

#    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.
#


import os
import pandas as pd
import re

[docs]class SysfsExtractor(object): """Operate on the parameters of a dump of Workload Automation's sysfs extractor instrumentation. :param path: The path to the workload in a output directory created by WA. :type path: str """ def __init__(self, path): self.thermal_path = os.path.join(path, "after", "sys", "devices", "virtual", "thermal", "thermal_zone0") self.properties = ["integral_cutoff", "k_d", "k_i", "k_po", "k_pu", "policy", "sustainable_power"] try: sysfs_files = os.listdir(self.thermal_path) except OSError: sysfs_files = [] for fname in sysfs_files: if re.search(r"cdev\d+_weight", fname): self.properties.append(fname) elif re.search(r"trip_point_\d+_temp", fname): self.properties.append(fname)
[docs] def get_parameters(self): """Get the parameters from a sysfs extractor dump WorkloadAutomation (WA) can dump sysfs values using its sysfs_extractor instrumentation. Parse the tree and return the thermal parameters as a dict of key and values where the keys are the names of the files and values its corresponding values. """ ret = {} for property_name in self.properties: property_path = os.path.join(self.thermal_path, property_name) if not os.path.isfile(property_path): continue with open(property_path) as fin: contents = fin.read() # Trim trailing newline contents = contents[:-1] try: ret[property_name] = int(contents) except ValueError: ret[property_name] = contents return ret
[docs] def pretty_print_in_ipython(self): """Print parameters extracted from sysfs from a WA run in a pretty HTML table. This won't work if the code is not running in an ipython notebook.""" from IPython.display import display, HTML params = self.get_parameters() # Don't print anything if we couldn't find any parameters if len(params) == 0: return params_items = [(key, [value]) for key, value in sorted(params.items())] dfr = pd.DataFrame.from_items(params_items, orient="index", columns=["Value"]) display(HTML(dfr.to_html(header=False)))