From 9db341bd8bea3e0c36b5e0b49bfc9df40169e952 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 19 Oct 2023 22:04:30 +0200 Subject: [PATCH] Scheduler: plan for integration identified three distinct tasks - build the external API - establish component integration - performance testing --- src/vault/gear/activity-term.hpp | 2 +- tests/vault/gear/scheduler-service-test.cpp | 103 +++++ tests/vault/gear/scheduler-stress-test.cpp | 103 +++++ tests/vault/gear/scheduler-usage-test.cpp | 4 +- wiki/thinkPad.ichthyo.mm | 447 +++++++++++++++++++- 5 files changed, 650 insertions(+), 9 deletions(-) create mode 100644 tests/vault/gear/scheduler-service-test.cpp create mode 100644 tests/vault/gear/scheduler-stress-test.cpp diff --git a/src/vault/gear/activity-term.hpp b/src/vault/gear/activity-term.hpp index 1904deda8..fa57f97cf 100644 --- a/src/vault/gear/activity-term.hpp +++ b/src/vault/gear/activity-term.hpp @@ -234,7 +234,7 @@ namespace gear { /* use the minimal default wiring */ break; default: - NOTREACHED ("uncovered Activity verb in activation function."); + NOTREACHED ("unknown wiring scheme for Render Jobs."); break; } } diff --git a/tests/vault/gear/scheduler-service-test.cpp b/tests/vault/gear/scheduler-service-test.cpp new file mode 100644 index 000000000..aff267a5d --- /dev/null +++ b/tests/vault/gear/scheduler-service-test.cpp @@ -0,0 +1,103 @@ +/* + SchedulerService(Test) - component integration test for the scheduler + + Copyright (C) Lumiera.org + 2023, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + +/** @file scheduler-usage-test.cpp + ** unit test \ref SchedulerService_test + */ + + +#include "lib/test/run.hpp" +#include "vault/gear/scheduler.hpp" +//#include "lib/time/timevalue.hpp" +//#include "lib/format-cout.hpp" +//#include "lib/util.hpp" + +//#include + +using test::Test; +//using std::move; +//using util::isSameObject; + + +namespace vault{ +namespace gear { +namespace test { + +// using lib::time::FrameRate; +// using lib::time::Offset; +// using lib::time::Time; + + + + + + /*************************************************************************//** + * @test Scheduler component integration test: add and process dependent jobs. + * @see SchedulerActivity_test + * @see SchedulerInvocation_test + * @see SchedulerCommutator_test + */ + class SchedulerService_test : public Test + { + + virtual void + run (Arg) + { + simpleUsage(); + walkingDeadline(); + setupLalup(); + } + + + /** @test TODO demonstrate a simple usage scenario + */ + void + simpleUsage() + { + } + + + + /** @test TODO + */ + void + walkingDeadline() + { + } + + + + /** @test TODO + */ + void + setupLalup() + { + } + }; + + + /** Register this test class... */ + LAUNCHER (SchedulerService_test, "unit engine"); + + + +}}} // namespace vault::gear::test diff --git a/tests/vault/gear/scheduler-stress-test.cpp b/tests/vault/gear/scheduler-stress-test.cpp new file mode 100644 index 000000000..e47457515 --- /dev/null +++ b/tests/vault/gear/scheduler-stress-test.cpp @@ -0,0 +1,103 @@ +/* + SchedulerStress(Test) - verify scheduler performance characteristics + + Copyright (C) Lumiera.org + 2023, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + +/** @file scheduler-usage-test.cpp + ** unit test \ref SchedulerStress_test + */ + + +#include "lib/test/run.hpp" +#include "vault/gear/scheduler.hpp" +//#include "lib/time/timevalue.hpp" +//#include "lib/format-cout.hpp" +//#include "lib/util.hpp" + +//#include + +using test::Test; +//using std::move; +//using util::isSameObject; + + +namespace vault{ +namespace gear { +namespace test { + +// using lib::time::FrameRate; +// using lib::time::Offset; +// using lib::time::Time; + + + + + + /***************************************************************************//** + * @test Investigate and verify non-functional characteristics of the Scheduler. + * @see SchedulerActivity_test + * @see SchedulerInvocation_test + * @see SchedulerCommutator_test + */ + class SchedulerStress_test : public Test + { + + virtual void + run (Arg) + { + simpleUsage(); + walkingDeadline(); + setupLalup(); + } + + + /** @test TODO demonstrate a simple usage scenario + */ + void + simpleUsage() + { + } + + + + /** @test TODO + */ + void + walkingDeadline() + { + } + + + + /** @test TODO + */ + void + setupLalup() + { + } + }; + + + /** Register this test class... */ + LAUNCHER (SchedulerStress_test, "unit engine"); + + + +}}} // namespace vault::gear::test diff --git a/tests/vault/gear/scheduler-usage-test.cpp b/tests/vault/gear/scheduler-usage-test.cpp index 101f4846e..771f208e5 100644 --- a/tests/vault/gear/scheduler-usage-test.cpp +++ b/tests/vault/gear/scheduler-usage-test.cpp @@ -1,5 +1,5 @@ /* - SchedulerUsage(Test) - component integration test for the scheduler + SchedulerUsage(Test) - verify standard usage patterns of the scheduler service Copyright (C) Lumiera.org 2023, Hermann Vosseler @@ -51,7 +51,7 @@ namespace test { /*************************************************************************//** - * @test Scheduler component integration test: add and process dependent jobs. + * @test Ensure expected Scheduler functionality in standard usage situations. * @see SchedulerActivity_test * @see SchedulerInvocation_test * @see SchedulerCommutator_test diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 21348742f..13697e7e2 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -78564,6 +78564,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + @@ -80068,7 +80076,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + @@ -81607,6 +81616,71 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ weil sie sinnigerweise auf dem Kopf steht +

+ + +
+ + + + + +

+ ....das hat sich allerdings schon aus der Analyse des Pull-Processing im Node-Network so ergeben, denn dort geht man von der ExitNode rückwärts; damals konnte ich nicht vorhersehen, wie die Situation im Scheduler sich darstellen wird — möglicherweise verbirg sich eine tiefere, strukturelle Konvergenz dahinter, daß das jetzt so schön aufgeht +

+ + +
+ +
+
+
+ + +
+
+
@@ -86572,13 +86646,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + - + + + + + @@ -86587,6 +86665,140 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + + + + + + +

+ Einen komplett leeren Job-Funktor wiederholt back-to-back (ohne Wartezeit) aufrufen; dabei das System nicht in die Sättigung treiben +

+ +
+
+ + + + + + + + + + + +

+ z.B. 7 Cores auf meinem 8-Core-System — damit die sonstigen Sytem-aktivitäten nicht zu Stau-Zuständen führen +

+ +
+
+ + + + + + +

+ immer nur so viele Jobs einstellen, daß eine Epoche nicht ganz voll wird; aber die Startzeiten extrem dicht zusammen legen, so daß im alles effektiv sofort berechenbar wird; dann kann man sinnvoll messen, wenn alles abgearbeitet ist: dazu einen Zeitmesser-Job verwenden; man kann die Zeitmessung vor oder nach dem Einstellen der Jobs starten +

+ +
+
+ + + + + + +

+ Bei diesem Ansatz wird eine Dauerlast erzeugt, indem immer ein Planungs-Chunk eine Zahl an Jobs erzeugt, die im Verhältnis zur Epochen-Größe steht (dabei kann auch durchaus auf eine Überlastung des BlockFlow-Allokators abgezielt werden, indem man immer das N-Fache der Block-Kapazität einstellt). Diese Jobs werden getaktet gemäß der aktuellen Dichte, aber diese Dichte wird langsam gesteigert, bis ein Feedback-Signal auftritt: nämlich wenn der reale Zeitpunkt des nächsten Planungs-Chunks verspätet ist, dann elastisch zurückregeln. Bei richtiger Abstimmung sollte sich dann ein »Lockstate« einstellen, von dem man einen Meßwert für die erreichbare Dichte ablesen kann +

+ +
+
+
+
+
+ + + + + + + + +

+ Sollte ausgeführt werden wie der normale Leerlauf-Stresstest, aber nun mit zusätzlichen und zunehmend exzessiven Dependencies/Notifications in der kette; beobachtet wird die Degeneration der Leerlauf-Kapazität +

+ +
+
+
+ + + + + + + + + + + + +

+ Anders als in den Leerlauf-Tests wird hier eine überprüfbare Berechnung ausgeführt, die aber auch Dependencies mit einschließt. Auch unter Vollast muß die Prüfsumme korrekt sein. Für diesen Test könnte man das System sogar kurzzeitig extrem in die Sättigung treiben (und trotzdem muß das Ergebnis stimmen) +

+ +
+
+
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + +

+ Es wird aber kein Play-Prozess gebaut, sondern die entsprechende Funktionalität direkt aus dem Test aufgebaut +

+ +
+ +
+
+
@@ -88822,7 +89034,215 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + + + + + + + + + + + + +

+ An Libraries ist nur erlaubt, was ohnehin in Reichweite liegt (also elementare Video-Libraries und Cairo zum Zeichnen). Der Code wird Teil des Projekts, sollte daher in C++ stehen und allen Qualitätsstandards entsprechen. Sinnvollerweise wird der Code in ein ad-hoc-Plugin gepackt, um den Umgang mit Dependencies zu erleichtern +

+ +
+
+ + + + + + +

+ „viel“ ist relativ. Es darf schon Spaß machen, aber es sollte nicht in ein monatelanges Kunst-Projekt ausufern +

+ +
+
+ + + + + + +

+ Der Datengenerator bewegt sich in einem gewissen Rahmen: bei hinreichend kleiner Auflösung muß er zuverlässig und ohne Aussetzer in Echtzeit laufen, und zwar mit 30fps. Idealerweise gibt es Parameter, um die Last stark zu erhöhen, so daß man ihn auch zum Test von Qualitäts-Renders heranziehen kann. Weiterhin sollte es sich im Wesentlichen um eine computational load handeln; ein gewisser Speicherbedarf ist dabei akzeptabel, externe IO nicht. +

+ +
+
+ + + + + + +

+ Da das Projekt auf eine gewisse öffentliche Sichtbarkeit zusteuert, werden alle sichtbaren und leicht faßbaren Elemente auf subtile Weise zu einer Visitenkarte. Dieser Playback ist so ziemlich das Erste und Einzige seit vielen Jahren, das man sehen und erfassen kann. Es sollte daher klar sein, daß es in jeder Form einen Eindruck hinterläßt. +

+ +
+ + + + + + + + + + + + + + + + + + + + +

+ Beschreibt das Prinzip rekursiver fraktaler Funktionen, und stellt dann Erweiterungen vor, die in seinem »Flam3« implementiert sind. Auf dieser Basis hat er »Electric Sheep« aufgebaut, welches auch die Grafik-Definitionen selber durch einen generativen Prozeß weiterentwickelt. +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • + es wird eine echte Hash-Funktion verwendet, die auch Vertauschungen erkennt +
  • +
  • + eingerechnet wird in jedem Berechnungsschritt jeweils ein lokaler Zahlenwert +
  • +
  • + dieser ergibt sich im einfachsten Fall aus einem laufenden Zähler +
  • +
+ +
+
+ + + + + + +

+ Ein lokal berechneter Hashwert kann als pseudo-Zufallszahl verwendet werden, um eine gewisse Zahl an Neben-Zweigen zu erzeugen; diese greifen in einem limitierten Rahmen auf vorausgehende Ergebnisse zurück. Diese werden dadurch zu Voraussetzungen. +

+ +
+
+ + + + + + +

+ die Hash-Funktion wird N-fach auf das Zwischenergebnis angewendet, für großes N. Damit kann CPU-Last erzeugt werden +

+ +
+
+
+ + + + + + +

+ Wenn man nicht immer auf den unmittelbaren Vorgänger zurückgreift, sondern auf zufällige Vorgänger, entsteht ein chaotischer DAG, der aber aufgrund der Limitierung stets Forschritt macht. Durch die teilweise lokale Entkoppelung der Zweige wird die Berechnung parallelisierbar; da sich jede Entscheidung aber aus den Eingangsdaten ergibt, muß das Ergebnis 100% deterministisch sein. +

+ +
+
+ + + + + + +

+ Das Ergebnis muß ohnehin einmal auf konventionellem Weg berechnet werden; an dieser Stelle kann man die sich ergebende Verknüpfungs-Struktur ausgeben, um daraus verknüpfte Render-Jobs zu machen +

+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -89685,8 +90105,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + + @@ -95790,6 +96212,10 @@ class Something
+ + + +
@@ -95880,7 +96306,16 @@ class Something
- + + + + + + + + + +