summaryrefslogtreecommitdiff
path: root/opendc-simulator/opendc-simulator-compute/src/main
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2024-04-22 14:32:53 +0200
committerGitHub <noreply@github.com>2024-04-22 14:32:53 +0200
commit7ffa97502d2725c1fe0a84677a654a5ea12cb454 (patch)
tree7f08b88a8e5bd1d39585b9cfcb530bd43f1a4733 /opendc-simulator/opendc-simulator-compute/src/main
parentd4c1d8468a17eb7adf8bf20949c2fdc4b2f93fec (diff)
Updated the power models and added tests (#222)
* Updated the power models and added tests * Updated test topologies
Diffstat (limited to 'opendc-simulator/opendc-simulator-compute/src/main')
-rw-r--r--opendc-simulator/opendc-simulator-compute/src/main/java/org/opendc/simulator/compute/power/CpuPowerModels.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/opendc-simulator/opendc-simulator-compute/src/main/java/org/opendc/simulator/compute/power/CpuPowerModels.java b/opendc-simulator/opendc-simulator-compute/src/main/java/org/opendc/simulator/compute/power/CpuPowerModels.java
index 7ba9eaed..537fb8d8 100644
--- a/opendc-simulator/opendc-simulator-compute/src/main/java/org/opendc/simulator/compute/power/CpuPowerModels.java
+++ b/opendc-simulator/opendc-simulator-compute/src/main/java/org/opendc/simulator/compute/power/CpuPowerModels.java
@@ -163,6 +163,12 @@ public class CpuPowerModels {
this.idlePower = idlePower;
}
+ // Clamps the provided utilization in the range of 0.0 and 1.0
+ // This is done to avoid floating point errors
+ public double clampUtilization(double utilization) {
+ return Math.max(0.0, Math.min(1.0, utilization));
+ }
+
@Override
public String toString() {
return getClass().getSimpleName() + "[max=" + maxPower + ",idle=" + idlePower + "]";
@@ -174,12 +180,14 @@ public class CpuPowerModels {
SqrtPowerModel(double maxPower, double idlePower) {
super(maxPower, idlePower);
- this.factor = (maxPower - idlePower) / Math.sqrt(100);
+ this.factor = (maxPower - idlePower);
}
@Override
public double computePower(double utilization) {
- return idlePower + factor * Math.sqrt(utilization * 100);
+ utilization = clampUtilization(utilization);
+
+ return idlePower + factor * Math.sqrt(utilization);
}
@Override
@@ -198,12 +206,14 @@ public class CpuPowerModels {
LinearPowerModel(double maxPower, double idlePower) {
super(maxPower, idlePower);
- this.factor = (maxPower - idlePower) / 100;
+ this.factor = maxPower - idlePower;
}
@Override
public double computePower(double utilization) {
- return idlePower + factor * utilization * 100;
+ utilization = clampUtilization(utilization);
+
+ return idlePower + factor * utilization;
}
@Override
@@ -222,12 +232,14 @@ public class CpuPowerModels {
SquarePowerModel(double maxPower, double idlePower) {
super(maxPower, idlePower);
- this.factor = (maxPower - idlePower) / Math.pow(100, 2);
+ this.factor = (maxPower - idlePower);
}
@Override
public double computePower(double utilization) {
- return idlePower + factor * Math.pow(utilization * 100, 2);
+ utilization = clampUtilization(utilization);
+
+ return idlePower + factor * Math.pow(utilization, 2);
}
@Override
@@ -246,12 +258,14 @@ public class CpuPowerModels {
CubicPowerModel(double maxPower, double idlePower) {
super(maxPower, idlePower);
- this.factor = (maxPower - idlePower) / Math.pow(100, 3);
+ this.factor = (maxPower - idlePower);
}
@Override
public double computePower(double utilization) {
- return idlePower + factor * Math.pow(utilization * 100, 3);
+ utilization = clampUtilization(utilization);
+
+ return idlePower + factor * Math.pow(utilization, 3);
}
@Override