From 64e4efdba3750b827a071a0208cdf39810329cf0 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Thu, 14 Jul 2022 20:16:14 +0200 Subject: Find current load more reliably --- .../vespa/hosted/provision/autoscale/ClusterModel.java | 6 ++---- .../provision/autoscale/ClusterNodesTimeseries.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java index b7a5c1e7fe7..34e31671491 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java @@ -27,8 +27,6 @@ public class ClusterModel { /** Containers typically use more cpu right after generation change, so discard those metrics */ public static final Duration warmupDuration = Duration.ofMinutes(5); - private static final Duration currentLoadDuration = Duration.ofMinutes(5); - static final double idealQueryCpuLoad = 0.8; static final double idealWriteCpuLoad = 0.95; static final double idealMemoryLoad = 0.65; @@ -110,8 +108,8 @@ public class ClusterModel { return queryFractionOfMax = clusterTimeseries().queryFractionOfMax(scalingDuration(), clock); } - /** Returns average load during the last {@link #currentLoadDuration} */ - public Load currentLoad() { return nodeTimeseries().averageLoad(clock.instant().minus(currentLoadDuration)); } + /** Returns average of the last load reading from each node. */ + public Load currentLoad() { return nodeTimeseries().currentLoad(); } /** Returns average load during the last {@link #scalingDuration()} */ public Load averageLoad() { return nodeTimeseries().averageLoad(clock.instant().minus(scalingDuration())); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java index 5ad4ef2e263..36056665a15 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java @@ -7,6 +7,7 @@ import com.yahoo.vespa.hosted.provision.applications.Cluster; import java.time.Duration; import java.time.Instant; import java.util.List; +import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -69,6 +70,20 @@ public class ClusterNodesTimeseries { return total.divide(count); } + /** Returns average of the latest load reading from each node */ + public Load currentLoad() { + Load total = Load.zero(); + int count = 0; + for (var nodeTimeseries : timeseries) { + Optional last = nodeTimeseries.last(); + if (last.isEmpty()) continue; + + total = total.add(last.get().load()); + count++; + } + return total.divide(count); + } + private static List keep(List timeseries, Predicate filter) { return timeseries.stream().map(nodeTimeseries -> nodeTimeseries.keep(filter)).collect(Collectors.toList()); } -- cgit v1.2.3