power_rapl: Add PL1 logger
Add logger for PL1 to get better data on thermal.
BUG=b:146021591
TEST=power_Idle.fast
Change-Id: I061a7ac42c7db192bec971a063f8f551ee01c522
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/1970838
Tested-by: Puthikorn Voravootivat <puthik@chromium.org>
Auto-Submit: Puthikorn Voravootivat <puthik@chromium.org>
Commit-Queue: Todd Broch <tbroch@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
diff --git a/client/cros/power/power_rapl.py b/client/cros/power/power_rapl.py
index 33aad58..14c5c02 100644
--- a/client/cros/power/power_rapl.py
+++ b/client/cros/power/power_rapl.py
@@ -248,7 +248,13 @@
with open(root + '/name', 'r') as fn:
name = fn.read().rstrip()
rapl_map[name] = root
- return [Powercap(name, root) for name, root in rapl_map.iteritems()]
+ powercaps = [Powercap(name, root) for name, root in rapl_map.iteritems()]
+
+ pl1_path = os.path.join(powercap, 'intel-rapl:0',
+ 'constraint_0_power_limit_uw')
+ if os.path.isfile(pl1_path):
+ powercaps.append(PowercapPL1(pl1_path))
+ return powercaps
class Powercap(power_status.PowerMeasurement):
@@ -310,3 +316,36 @@
self._energy_start = energy_now
self._time_start = time_now
return average_power
+
+
+class PowercapPL1(power_status.PowerMeasurement):
+ """Classes to support RAPL power limit via powercap sysfs
+
+ This class utilizes the subset of Linux powercap driver to report
+ energy consumption, in this manner, we do not need microarchitecture
+ knowledge in userspace program.
+ """
+
+ def __init__(self, file):
+ """Constructor.
+
+ Args:
+ file: path to file containing PL1.
+ """
+ super(PowercapPL1, self).__init__('PL1')
+ self._file = open(file, 'r')
+
+
+ def __del__(self):
+ """Deconstructor for PowercapPL1 class.
+ """
+ self._file.close()
+
+
+ def refresh(self):
+ """refresh method.
+
+ Get PL1 in Watt.
+ """
+ self._file.seek(0)
+ return int(self._file.read().rstrip()) / 1000000.