Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Unified Diff: tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py

Issue 607733002: [telemetry] Detect and correct overflow in Intel energy MSRs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Docstring. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py b/tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py
index cf100174e197d2d60870851cde792e4d03d06154..c4ecd8547815e6f3c9c536a3935c2b9841e67b70 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/msr_power_monitor.py
@@ -78,8 +78,9 @@ class MsrPowerMonitor(power_monitor.PowerMonitor):
energy_consumption_j = self._PackageEnergyJoules() - self._start_energy_j
average_temp_c = (self._TemperatureCelsius() + self._start_temp_c) / 2.
- assert energy_consumption_j >= 0, ('Negative energy consumption. (Starting '
- 'energy was %s.)' % self._start_energy_j)
+ if energy_consumption_j < 0: # Correct overflow.
+ # The energy portion of the MSR is 4 bytes.
+ energy_consumption_j += 2 ** 32 * self._EnergyMultiplier()
self._start_energy_j = None
self._start_temp_c = None
@@ -96,19 +97,18 @@ class MsrPowerMonitor(power_monitor.PowerMonitor):
@decorators.Cache
def _EnergyMultiplier(self):
- return 0.5 ** ((self._backend.ReadMsr(MSR_RAPL_POWER_UNIT) >> 8) & 0x1f)
+ return 0.5 ** self._backend.ReadMsr(MSR_RAPL_POWER_UNIT, 8, 5)
def _PackageEnergyJoules(self):
- return (self._backend.ReadMsr(MSR_PKG_ENERGY_STATUS) *
+ return (self._backend.ReadMsr(MSR_PKG_ENERGY_STATUS, 0, 32) *
self._EnergyMultiplier())
def _TemperatureCelsius(self):
- tcc_activation_temp = (
- self._backend.ReadMsr(IA32_TEMPERATURE_TARGET) >> 16 & 0x7f)
+ tcc_activation_temp = self._backend.ReadMsr(IA32_TEMPERATURE_TARGET, 16, 7)
if tcc_activation_temp <= 0:
tcc_activation_temp = 105
- package_temp_headroom = (
- self._backend.ReadMsr(IA32_PACKAGE_THERM_STATUS) >> 16 & 0x7f)
+ package_temp_headroom = self._backend.ReadMsr(
+ IA32_PACKAGE_THERM_STATUS, 16, 7)
return tcc_activation_temp - package_temp_headroom
def _CheckMSRs(self):

Powered by Google App Engine
This is Rietveld 408576698