Skip to content
This repository was archived by the owner on Mar 11, 2019. It is now read-only.

Commit 53c00df

Browse files
committed
fix: improve the resilience to power conversion.
1 parent 545f8c5 commit 53c00df

File tree

7 files changed

+72
-8
lines changed

7 files changed

+72
-8
lines changed

powerapi-core/src/main/scala/org/powerapi/module/cpu/dvfs/CpuDvfsFormula.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,15 @@ class CpuDvfsFormula(eventBus: MessageBus, muid: UUID, target: Target, tdp: Doub
6969

7070
val totalTime = timeInStates.times.values.sum
7171

72-
if (totalTime != 0) (totalPower / totalTime.toDouble).W
73-
else 0.W
72+
try {
73+
if (totalTime != 0) (totalPower / totalTime.toDouble).W
74+
else 0.W
75+
}
76+
77+
catch {
78+
case _: Exception =>
79+
log.warning("The power value is out of range. Skip.")
80+
0.W
81+
}
7482
}
7583
}

powerapi-core/src/main/scala/org/powerapi/module/cpu/simple/CpuSimpleFormula.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,16 @@ class CpuSimpleFormula(eventBus: MessageBus, muid: UUID, target: Target, tdp: Do
5050

5151
def handler: Actor.Receive = LoggingReceive {
5252
case msg: SimpleUsageReport =>
53-
val power = ((tdp * tdpFactor) * msg.targetRatio.ratio).W
53+
val power = {
54+
try {
55+
((tdp * tdpFactor) * msg.targetRatio.ratio).W
56+
}
57+
catch {
58+
case _: Exception =>
59+
log.warning("The power value is out of range. Skip.")
60+
0.W
61+
}
62+
}
5463
publishRawPowerReport(msg.muid, msg.target, power, "cpu", msg.tick)(eventBus)
5564
}
5665
}

powerapi-core/src/main/scala/org/powerapi/module/disk/simple/DiskSimpleFormula.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,18 @@ class DiskSimpleFormula(eventBus: MessageBus, muid: UUID, target: Target, interv
7575
readPower.getOrElse(0.0) + writePower.getOrElse(0.0)
7676
}
7777

78-
publishRawPowerReport(muid, target, powers.sum.W, "disk", msg.tick)(eventBus)
78+
val accPower = {
79+
try {
80+
powers.sum.W
81+
}
82+
catch {
83+
case _: Exception =>
84+
log.warning("The power value is out of range. Skip.")
85+
0.W
86+
}
87+
}
88+
89+
publishRawPowerReport(muid, target, accPower, "disk", msg.tick)(eventBus)
7990
context.become(compute(now) orElse formulaDefault)
8091
}
8192
}

powerapi-core/src/main/scala/org/powerapi/module/extpowermeter/ExtPowerMeterSensor.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,14 @@ abstract class ExtPowerMeterSensor(eventBus: MessageBus, muid: UUID, target: Tar
7777
report match {
7878
case Some(r) =>
7979
val activePower = r.power.toMilliWatts - idlePower.toMilliWatts
80-
if (activePower > 0) activePower.mW else 0.mW
80+
try {
81+
if (activePower > 0) activePower.mW else 0.mW
82+
}
83+
catch {
84+
case _: Exception =>
85+
log.warning("The power value is out of range. Skip.")
86+
0.W
87+
}
8188
case _ =>
8289
0.mW
8390
}

powerapi-core/src/main/scala/org/powerapi/module/extpowermeter/powerspy/PowerSpyPMeter.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,14 @@ class PowerSpyPMeter(mac: String, interval: FiniteDuration) extends ExternalPMet
6969
while (running) {
7070
pSpy.readRealTime() match {
7171
case Some(rtValue) if eventBus.isDefined =>
72-
publishPowerSpyRawPowerReport(rtValue.power.W)(eventBus.get)
72+
try {
73+
publishPowerSpyRawPowerReport(rtValue.power.W)(eventBus.get)
74+
}
75+
catch {
76+
case _: Exception =>
77+
log.warn("The power value is out of range. Skip.")
78+
0.W
79+
}
7380
case _ =>
7481

7582
}

powerapi-core/src/main/scala/org/powerapi/module/libpfm/LibpfmFormula.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,18 @@ class LibpfmFormula(eventBus: MessageBus, muid: UUID, target: Target, formula: M
6464
}
6565
}
6666

67-
publishRawPowerReport(muid, target, powers.sum.W, "cpu", msg.tick)(eventBus)
67+
val accPower = {
68+
try {
69+
powers.sum.W
70+
}
71+
catch {
72+
case _: Exception =>
73+
log.warning("The power value is out of range. Skip.")
74+
0.W
75+
}
76+
}
77+
78+
publishRawPowerReport(muid, target, accPower, "cpu", msg.tick)(eventBus)
6879

6980
context.become(compute(now) orElse formulaDefault)
7081
}

powerapi-core/src/main/scala/org/powerapi/module/libpfm/cycles/LibpfmCoreCyclesFormula.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,18 @@ class LibpfmCoreCyclesFormula(eventBus: MessageBus, muid: UUID, target: Target,
7979
formula.zipWithIndex.foldLeft(0d)((acc, tuple) => acc + (tuple._1 * math.pow(scaledCycles, tuple._2)))
8080
}
8181

82-
publishRawPowerReport(muid, target, powers.sum.W, "cpu", msg.tick)(eventBus)
82+
val accPower = {
83+
try {
84+
powers.sum.W
85+
}
86+
catch {
87+
case _: Exception =>
88+
log.warning("The power value is out of range. Skip.")
89+
0.W
90+
}
91+
}
92+
93+
publishRawPowerReport(muid, target, accPower, "cpu", msg.tick)(eventBus)
8394
context.become(compute(now) orElse formulaDefault)
8495
}
8596
}

0 commit comments

Comments
 (0)