aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java26
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java10
3 files changed, 22 insertions, 16 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
index 7f563b876a7..0548bc7520f 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java
@@ -316,4 +316,6 @@ public class NodeResources {
return value;
}
+ public static NodeResources zero() { return new NodeResources(0, 0, 0, 0); }
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
index f135b395b3a..ca18028ad5a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
@@ -57,7 +57,7 @@ public class NodeRepoStats {
}
private static Pair<Load, Load> computeLoad(NodeList allNodes, List<NodeTimeseries> allNodeTimeseries) {
- NodeResources totalActiveResources = new NodeResources(0, 0, 0, 0);
+ NodeResources totalActiveResources = NodeResources.zero();
Load load = Load.zero();
for (var nodeTimeseries : allNodeTimeseries) {
Optional<Node> node = allNodes.node(nodeTimeseries.hostname());
@@ -70,7 +70,7 @@ public class NodeRepoStats {
totalActiveResources = totalActiveResources.add(node.get().resources().justNumbers());
}
- NodeResources totalHostResources = new NodeResources(0, 0, 0, 0);
+ NodeResources totalHostResources = NodeResources.zero();
for (var host : allNodes.hosts())
totalHostResources = totalHostResources.add(host.resources().justNumbers());
@@ -86,25 +86,19 @@ public class NodeRepoStats {
.matching(node -> ! node.allocation().get().owner().instance().isTester())
.groupingBy(node -> node.allocation().get().owner()).entrySet()) {
- NodeResources totalResources = new NodeResources(0, 0, 0, 0);
- double utilizedCost = 0;
- double totalCpu = 0, totalMemory = 0, totalDisk = 0;
+ NodeResources totalResources = NodeResources.zero();
+ NodeResources totalUtilizedResources = NodeResources.zero();
for (var node : applicationNodes.getValue()) {
var snapshot = snapshotsByHost.get(node.hostname());
if (snapshot == null) continue;
- double cpu = snapshot.cpu() * node.resources().vcpu();
- double memory = snapshot.memory() * node.resources().memoryGb();
- double disk = snapshot.disk() * node.resources().diskGb();
- utilizedCost += new NodeResources(cpu, memory, disk, 0).cost();
- totalCpu += cpu;
- totalMemory += memory;
- totalDisk += disk;
+
totalResources = totalResources.add(node.resources().justNumbers());
+ totalUtilizedResources = totalUtilizedResources.add(snapshot.load().scaled(node.resources().justNumbers()));
}
- Load load = new Load(divide(totalCpu, totalResources.vcpu()),
- divide(totalMemory, totalResources.memoryGb()),
- divide(totalDisk, totalResources.diskGb()));
- applicationStats.add(new ApplicationStats(applicationNodes.getKey(), load, totalResources.cost(), utilizedCost));
+ applicationStats.add(new ApplicationStats(applicationNodes.getKey(),
+ Load.byDividing(totalUtilizedResources, totalResources),
+ totalResources.cost(),
+ totalUtilizedResources.cost()));
}
Collections.sort(applicationStats);
return applicationStats;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
index 1407b03e8dd..64649b1a0ef 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Load.java
@@ -34,6 +34,12 @@ public class Load {
return new Load(divide(cpu, resources.vcpu()), divide(memory, resources.memoryGb()), divide(disk, resources.diskGb()));
}
+ public NodeResources scaled(NodeResources resources) {
+ return resources.withVcpu(cpu * resources.vcpu())
+ .withMemoryGb(memory * resources.memoryGb())
+ .withDiskGb(disk * resources.diskGb());
+ }
+
private double requireNormalized(double value, String name) {
if (Double.isNaN(value))
throw new IllegalArgumentException(name + " must be a number but is NaN");
@@ -54,4 +60,8 @@ public class Load {
return a / b;
}
+ public static Load byDividing(NodeResources a, NodeResources b) {
+ return new Load(divide(a.vcpu(), b.vcpu()), divide(a.memoryGb(), b.memoryGb()), divide(a.diskGb(), b.diskGb()));
+ }
+
}