summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/abi-spec.json1
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java29
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java29
7 files changed, 49 insertions, 27 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json
index 32fb870150e..4e50d31d74a 100644
--- a/config-provisioning/abi-spec.json
+++ b/config-provisioning/abi-spec.json
@@ -617,6 +617,7 @@
"public com.yahoo.config.provision.NodeResources withDiskGb(double)",
"public com.yahoo.config.provision.NodeResources withBandwidthGbps(double)",
"public com.yahoo.config.provision.NodeResources withDiskSpeed(com.yahoo.config.provision.NodeResources$DiskSpeed)",
+ "public com.yahoo.config.provision.NodeResources anySpeed()",
"public com.yahoo.config.provision.NodeResources subtract(com.yahoo.config.provision.NodeResources)",
"public com.yahoo.config.provision.NodeResources add(com.yahoo.config.provision.NodeResources)",
"public boolean equals(java.lang.Object)",
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 5687697aff9..66baecf6c82 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
@@ -88,6 +88,11 @@ public class NodeResources {
return new NodeResources(vcpu, memoryGb, diskGb, bandwidthGbps, speed);
}
+ /** A shorthand for withDiskSpeed(NodeResources.DiskSpeed.any) */
+ public NodeResources anySpeed() {
+ return withDiskSpeed(NodeResources.DiskSpeed.any);
+ }
+
public NodeResources subtract(NodeResources other) {
if ( ! this.isInterchangeableWith(other))
throw new IllegalArgumentException(this + " and " + other + " are not interchangeable");
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
index fa439e50fbd..3d502d2b3da 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
@@ -16,6 +16,7 @@ import com.yahoo.vespa.hosted.provision.node.Reports;
import com.yahoo.vespa.hosted.provision.node.Status;
import java.time.Instant;
+import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -332,6 +333,19 @@ public final class Node {
}
}
+ /** Computes the allocation skew of a host node */
+ public static double skew(NodeResources totalHostCapacity, NodeResources freeHostCapacity) {
+ NodeResources all = totalHostCapacity.anySpeed();
+ NodeResources allocated = all.subtract(freeHostCapacity.anySpeed());
+
+ return new Mean(allocated.vcpu() / all.vcpu(),
+ allocated.memoryGb() / all.memoryGb(),
+ allocated.diskGb() / all.diskGb())
+ .deviation();
+ }
+
+
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -389,4 +403,19 @@ public final class Node {
}
}
+ /** The mean and mean deviation (squared difference) of a bunch of numbers */
+ private static class Mean {
+
+ private final double mean;
+ private final double deviation;
+
+ private Mean(double ... numbers) {
+ mean = Arrays.stream(numbers).sum() / numbers.length;
+ deviation = Arrays.stream(numbers).map(n -> Math.pow(mean - n, 2)).sum() / numbers.length;
+ }
+
+ public double deviation() { return deviation; }
+
+ }
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java
new file mode 100644
index 00000000000..d2158dd08db
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java
@@ -0,0 +1,5 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.provision.maintenance;
+
+public class Rebalancer {
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
index 4eea36c342a..112f118705b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
@@ -26,6 +26,12 @@ public class DockerHostCapacity {
this.hostResourcesCalculator = Objects.requireNonNull(hostResourcesCalculator, "hostResourcesCalculator must be non-null");
}
+ /** Returns the allocation skew of this host */
+ public double skew(Node host) {
+ NodeResources free = freeCapacityOf(host, false);
+ return Node.skew(host.flavor().resources(), free);
+ }
+
int compareWithoutInactive(Node hostA, Node hostB) {
int result = compare(freeCapacityOf(hostB, true), freeCapacityOf(hostA, true));
if (result != 0) return result;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java
index 50aeb464e9f..c5808a53837 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java
@@ -10,4 +10,5 @@ public interface HostResourcesCalculator {
/** Calculates the resources that are reserved for host level processes and returns the remainder. */
NodeResources availableCapacityOf(NodeResources hostResources);
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
index d53e36b7501..d6ac5eb2c57 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/PrioritizableNode.java
@@ -117,18 +117,8 @@ class PrioritizableNode implements Comparable<PrioritizableNode> {
private double skewWith(NodeResources resources) {
if (parent.isEmpty()) return 0;
- NodeResources all = anySpeed(parent.get().flavor().resources());
- NodeResources allocated = all.subtract(anySpeed(freeParentCapacity)).add(anySpeed(resources));
-
- return new Mean(allocated.vcpu() / all.vcpu(),
- allocated.memoryGb() / all.memoryGb(),
- allocated.diskGb() / all.diskGb())
- .deviation();
- }
-
- /** We don't care about disk speed in calculations here */
- private NodeResources anySpeed(NodeResources resources) {
- return resources.withDiskSpeed(NodeResources.DiskSpeed.any);
+ NodeResources free = freeParentCapacity.anySpeed().subtract(resources.anySpeed());
+ return Node.skew(parent.get().flavor().resources(), free);
}
private boolean isInNodeRepoAndReserved() {
@@ -186,19 +176,4 @@ class PrioritizableNode implements Comparable<PrioritizableNode> {
}
}
- /** The mean and mean deviation (squared difference) of a bunch of numbers */
- private static class Mean {
-
- private final double mean;
- private final double deviation;
-
- private Mean(double ... numbers) {
- mean = Arrays.stream(numbers).sum() / numbers.length;
- deviation = Arrays.stream(numbers).map(n -> Math.pow(mean - n, 2)).sum() / numbers.length;
- }
-
- public double deviation() { return deviation; }
-
- }
-
}