From a087e52ab1258f8f322f4f2a8f4d54fed82c66a9 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 30 Oct 2023 20:22:06 +0100 Subject: [PATCH] Scheduler: draft a load indicator ...using a state fusion based on both the threadpool size and the average distance or lag to the next task to be scheduled. --- src/vault/gear/load-controller.hpp | 22 ++++--- tests/vault/gear/scheduler-service-test.cpp | 6 -- wiki/thinkPad.ichthyo.mm | 73 ++++++++++++++++----- 3 files changed, 70 insertions(+), 31 deletions(-) diff --git a/src/vault/gear/load-controller.hpp b/src/vault/gear/load-controller.hpp index be23821ba..21b05e259 100644 --- a/src/vault/gear/load-controller.hpp +++ b/src/vault/gear/load-controller.hpp @@ -164,16 +164,14 @@ namespace gear { void markLagSample (Time head, Time now) { + double headroom = _raw(std::clamp (now - (head.isRegular()? head:now) + , -SLEEP_HORIZON + , WORK_HORIZON)); const int64_t N = wiring_.maxCapacity * 3; - double headroom = _raw(head.isRegular()? head:now) - _raw(now); int64_t average = sampledLag_.load (std::memory_order_relaxed); int64_t newAverage; - do{ - double chango = (headroom + (N-1)*average) / N; - newAverage = std::floor (chango); - } + do newAverage = std::floor ((headroom + (N-1)*average) / N); while (not sampledLag_.compare_exchange_weak (average, newAverage, std::memory_order_relaxed)); -//cout<<"NAV "<< newAverage<< " headroom="< ...weil wir im Moment immer mit Vollast einsteigen und dann zwar im Idle-Fall herunterregeln; letzteres passiert typischerweise aber schnell. Also im Test sehe ich daher immer nur 1.0 oder keine Last

- - + @@ -82661,8 +82660,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...das kann aber erst beurteilt werden, wenn wir echte Last-Szenarien kennen. Denkbar wäre, daß z.B. ein real-Time Render in etwa mit 3 Cores über die Runden kommt

- - +
@@ -82688,8 +82686,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - +
@@ -82736,8 +82733,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
 mean ≔ mean · 1/N · ( N-1  + newVal/mean)

- - +
@@ -82751,8 +82747,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
Bei einem moving-Average interessiert es uns eigentlich nicht, wann genau der Wert gilt und für wen er gilt. Es interessiert uns nur, was am Ende rausgekommen ist, bzw. wie der Trend im Moment so ist

- - + @@ -82770,8 +82765,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
»irgendwann eventuell« in das MA ein

- -
+
@@ -82784,8 +82778,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
und das läßt sich mit zwei Atomic-Operationen realisieren

- - + @@ -82797,9 +82790,57 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +