Scheduler: component wiring
The »Scheduler Service« will be assembled from the components developed during the last months - Layer-1 - Layer-2 - Activity-Language - Block-Flow - Work-Force
This commit is contained in:
parent
9db341bd8b
commit
74c97614b3
7 changed files with 365 additions and 66 deletions
|
|
@ -117,7 +117,7 @@ namespace gear {
|
|||
/* === characteristic parameters === */
|
||||
const static size_t EPOCH_SIZ = 100; ///< Number of storage slots to fit into one »Epoch«
|
||||
const Duration DUTY_CYCLE{FSecs(1)}; ///< typical relaxation time or average pre-roll to deadline
|
||||
const size_t INITIAL_STREAMS = 2; ///< Number of streams with TYPICAL_FPS to expect for normal use
|
||||
const size_t INITIAL_STREAMS = 2; ///< Number of streams with #REFERENCE_FPS to expect for normal use
|
||||
|
||||
/* === algorithm tuning settings === */
|
||||
const double TARGET_FILL = 0.90; ///< aim at using this fraction of Epoch space on average (slightly below 100%)
|
||||
|
|
|
|||
79
src/vault/gear/engine-observer.hpp
Normal file
79
src/vault/gear/engine-observer.hpp
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
ENGINE-OBSERVER.hpp - collection and maintenance of engine performance indicators
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2023, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
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 engine-observer.hpp
|
||||
** Render Engine performance data collection service. Data indicative of the
|
||||
** current operational state is emitted at various levels of processing as
|
||||
** synchronous notification calls. The information transmitted must be offloaded
|
||||
** quickly for asynchronous processing to generate the actual observable values.
|
||||
**
|
||||
** @see scheduler.hpp
|
||||
** @see job-planning.hpp
|
||||
** @see Activity::Verb::WORKSTART
|
||||
**
|
||||
** @todo WIP-WIP-WIP 10/2023 »Playback Vertical Slice« created as a stub
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SRC_VAULT_GEAR_ENGINE_OBSERVER_H_
|
||||
#define SRC_VAULT_GEAR_ENGINE_OBSERVER_H_
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
#include "vault/gear/block-flow.hpp"
|
||||
#include "vault/gear/scheduler-commutator.hpp"
|
||||
#include "vault/gear/scheduler-invocation.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
//#include <string>
|
||||
|
||||
|
||||
namespace vault{
|
||||
namespace gear {
|
||||
|
||||
// using util::isnil;
|
||||
// using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Collector and aggregator for performance data.
|
||||
* @todo WIP-WIP 10/2023 - stub as placeholder for later development
|
||||
* @see Scheduler
|
||||
*/
|
||||
class EngineObserver
|
||||
: util::NonCopyable
|
||||
{
|
||||
|
||||
public:
|
||||
explicit
|
||||
EngineObserver()
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
|
||||
}}// namespace vault::gear
|
||||
#endif /*SRC_VAULT_GEAR_ENGINE_OBSERVER_H_*/
|
||||
83
src/vault/gear/load-controller.hpp
Normal file
83
src/vault/gear/load-controller.hpp
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
LOAD-CONTROLLER.hpp - coordinator for scheduler resource usage
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2023, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
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 load-controller.hpp
|
||||
** Scheduler resource usage coordination.
|
||||
** Operating the render activities in the engine involves several low-level
|
||||
** support systems, which must be actively guided to remain within sustainable
|
||||
** limits. While all parts of the engine are tuned towards typical expected
|
||||
** scenarios, a wide array of load patterns may be encountered, complicating
|
||||
** any generic performance optimisation. Rather, the participating components
|
||||
** are designed to withstand a short-term imbalance, expecting that general
|
||||
** engine parametrisation will be adjusted based on moving averages.
|
||||
**
|
||||
** @see scheduler.hpp
|
||||
** @see SchedulerStress_test
|
||||
**
|
||||
** @todo WIP-WIP-WIP 10/2023 »Playback Vertical Slice«
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SRC_VAULT_GEAR_LOAD_CONTROLLER_H_
|
||||
#define SRC_VAULT_GEAR_LOAD_CONTROLLER_H_
|
||||
|
||||
|
||||
#include "lib/error.hpp"
|
||||
//#include "vault/gear/block-flow.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
//#include <string>
|
||||
|
||||
|
||||
namespace vault{
|
||||
namespace gear {
|
||||
|
||||
// using util::isnil;
|
||||
// using std::string;
|
||||
|
||||
|
||||
/**
|
||||
* Controller to coordinate resource usage related to the Scheduler.
|
||||
* @todo WIP-WIP 10/2023 just a placeholder for now
|
||||
* @see BlockFlow
|
||||
* @see Scheduler
|
||||
*/
|
||||
class LoadController
|
||||
: util::NonCopyable
|
||||
{
|
||||
BlockFlowAlloc& allocator_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
LoadController (BlockFlowAlloc& blockFlow)
|
||||
: allocator_{blockFlow}
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
|
||||
}}// namespace vault::gear
|
||||
#endif /*SRC_VAULT_GEAR_LOAD_CONTROLLER_H_*/
|
||||
|
|
@ -44,8 +44,12 @@
|
|||
|
||||
#include "lib/error.hpp"
|
||||
#include "vault/gear/block-flow.hpp"
|
||||
#include "vault/gear/work-force.hpp"
|
||||
#include "vault/gear/activity-lang.hpp"
|
||||
#include "vault/gear/scheduler-commutator.hpp"
|
||||
#include "vault/gear/scheduler-invocation.hpp"
|
||||
#include "vault/gear/load-controller.hpp"
|
||||
#include "vault/gear/engine-observer.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
|
@ -67,18 +71,86 @@ namespace gear {
|
|||
* @see SchedulerUsage_test
|
||||
*/
|
||||
class Scheduler
|
||||
: util::NonCopyable
|
||||
{
|
||||
using Setup = work::Config; ////////////////////////////////////////////////////OOO actually need subclass to attach the work-function
|
||||
|
||||
SchedulerInvocation layer1_;
|
||||
SchedulerCommutator layer2_;
|
||||
// WorkForce<Setup> workForce_;
|
||||
|
||||
ActivityLang activityLang_;
|
||||
LoadController loadControl_;
|
||||
EngineObserver& engineObserver_;
|
||||
|
||||
public:
|
||||
explicit
|
||||
Scheduler()
|
||||
Scheduler (BlockFlowAlloc& activityAllocator
|
||||
,EngineObserver& engineObserver)
|
||||
: layer1_{}
|
||||
, layer2_{}
|
||||
// , workForce_{connectWorkers()}
|
||||
, activityLang_{activityAllocator}
|
||||
, loadControl_{activityAllocator}
|
||||
, engineObserver_{engineObserver}
|
||||
{ }
|
||||
|
||||
// using default copy/assignment
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
terminateProcessing()
|
||||
{
|
||||
UNIMPLEMENTED("suicide");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
double
|
||||
getLoadIndicator()
|
||||
{
|
||||
UNIMPLEMENTED("load indicator");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
seedCalcStream()
|
||||
{
|
||||
UNIMPLEMENTED("get it going");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
buildJob()
|
||||
{
|
||||
UNIMPLEMENTED("wrap the ActivityTerm");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
getWork()
|
||||
{
|
||||
UNIMPLEMENTED("the Worker-Funkction");
|
||||
}
|
||||
|
||||
private:
|
||||
Setup
|
||||
connectWorkers()
|
||||
{
|
||||
UNIMPLEMENTED("build Worker pool operational setup");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,19 @@ END
|
|||
|
||||
|
||||
|
||||
PLANNED "Scheduler Integration" SchedulerUsage_test <<END
|
||||
PLANNED "Scheduler Integration" SchedulerService_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
||||
|
||||
PLANNED "Scheduler Performance" SchedulerStress_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
||||
|
||||
PLANNED "Scheduler Usage" SchedulerUsage_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -69,24 +69,31 @@ namespace test {
|
|||
|
||||
|
||||
/** @test TODO demonstrate a simple usage scenario
|
||||
* @todo WIP 10/23 ✔ define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
simpleUsage()
|
||||
{
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler{bFlow, watch};
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
walkingDeadline()
|
||||
{
|
||||
UNIMPLEMENTED ("walking Deadline");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
setupLalup()
|
||||
|
|
|
|||
|
|
@ -78565,8 +78565,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1697754985639" ID="ID_799408544" MODIFIED="1697755265544" TEXT="Verschaltung: Prerequisite ↷ Dependent-Job">
|
||||
<linktarget COLOR="#3e9bb9" DESTINATION="ID_799408544" ENDARROW="Default" ENDINCLINATION="1223;78;" ID="Arrow_ID_184937137" SOURCE="ID_107749731" STARTARROW="None" STARTINCLINATION="370;22;"/>
|
||||
<linktarget COLOR="#7a96a6" DESTINATION="ID_799408544" ENDARROW="Default" ENDINCLINATION="651;46;" ID="Arrow_ID_1767879061" SOURCE="ID_1696760158" STARTARROW="None" STARTINCLINATION="267;-849;"/>
|
||||
<linktarget COLOR="#3e9bb9" DESTINATION="ID_799408544" ENDARROW="Default" ENDINCLINATION="1223;78;" ID="Arrow_ID_184937137" SOURCE="ID_107749731" STARTARROW="None" STARTINCLINATION="370;22;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1697755215608" HGAP="42" ID="ID_70962304" MODIFIED="1697755242505" TEXT="wird in der Activity-Language im Scheduler genau so benötigt" VSHIFT="-4">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -81651,27 +81651,21 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#7350b1" CREATED="1697755288338" HGAP="29" ID="ID_612802023" MODIFIED="1697755490162" VSHIFT="11">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil sie sinnigerweise <i>auf dem Kopf steht</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
....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 <i>schön aufgeht</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -81679,6 +81673,36 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697745850749" ID="ID_48640613" MODIFIED="1697745867438" TEXT="Worker-Function"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697756690787" ID="ID_87589773" MODIFIED="1697756717299" TEXT="Design: delegierende äußere Hülle"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756746748" ID="ID_1029141907" MODIFIED="1697757702430" TEXT="Interface bauen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697756762145" ID="ID_685418556" MODIFIED="1697756903799" TEXT="auf abstraktes Interface kann (vorerst) verzichtet werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...bedingt durch den stark gegliederten Aufbau wird es auf Service-Ebene nichts zu verbergen geben — zudem bewegen sich voraussichtlich auch alle Clients im gleichen Code-Universums (so daß es keine Probleme mit Dependencies gibt.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756908166" ID="ID_1142273023" MODIFIED="1697756948024" TEXT="Wrapper-Builder um den Activity-Term legen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756956736" ID="ID_830267980" MODIFIED="1697756972566" TEXT="Top-level-Implementierung der Worker-Funktion">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697757025906" ID="ID_180161439" MODIFIED="1697757063868" TEXT="seedCalcStream()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697757058002" ID="ID_603254465" MODIFIED="1697757063869" TEXT="terminateProcessing()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697757694037" ID="ID_1433751218" MODIFIED="1697757700693" TEXT="ein vorläufiger Load-Indicator">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -81744,9 +81768,33 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693841227130" ID="ID_1537960830" MODIFIED="1697675265270" TEXT="WorkForce einbinden">
|
||||
<arrowlink COLOR="#397cb2" DESTINATION="ID_987966047" ENDARROW="Default" ENDINCLINATION="-962;-41;" ID="Arrow_ID_818972822" STARTARROW="None" STARTINCLINATION="-609;73;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697768180196" ID="ID_1541537637" MODIFIED="1697768202330" TEXT="work::Config konstruieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697768205409" ID="ID_489957180" MODIFIED="1697768215224" TEXT="mit dem Load-Controller verbinden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697675135117" ID="ID_880133050" MODIFIED="1697675148836" TEXT="ActivityLang + BlockFlow">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697758561025" ID="ID_107853136" MODIFIED="1697758575911">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ActivityLang gehört sinnvollerweise <i>in den Scheduler</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697758577471" ID="ID_805214343" MODIFIED="1697758585886" TEXT="dagegen BlockFlow ist eine externe Komponente"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697763699242" ID="ID_272943268" MODIFIED="1697763810547" TEXT="EngineObserver-Schnittstelle">
|
||||
<arrowlink COLOR="#4f3156" DESTINATION="ID_1642973256" ENDARROW="Default" ENDINCLINATION="-628;-472;" ID="Arrow_ID_1213898118" STARTARROW="None" STARTINCLINATION="-1771;162;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697763821714" ID="ID_1158248288" MODIFIED="1697763853485" TEXT="vorerst nur eine Senke für die WORKSTART|STOP-Activities">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697663918107" ID="ID_210862409" MODIFIED="1697675123151" TEXT="Load-Controller vorsehen">
|
||||
<linktarget COLOR="#75769b" DESTINATION="ID_210862409" ENDARROW="Default" ENDINCLINATION="-667;72;" ID="Arrow_ID_1800712901" SOURCE="ID_464175339" STARTARROW="None" STARTINCLINATION="-540;37;"/>
|
||||
|
|
@ -86664,6 +86712,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697758391611" ID="ID_124711923" MODIFIED="1697758397083" TEXT="Fälle">
|
||||
<node CREATED="1697758425500" ID="ID_1450418166" MODIFIED="1697758430911" TEXT="simpleUsage">
|
||||
<node CREATED="1697758440737" ID="ID_1211803424" MODIFIED="1697758454084" TEXT="zeigt hier vor allem was man braucht"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697755558855" ID="ID_278365674" MODIFIED="1697741858009" TEXT="SchedulerStress_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -86676,9 +86729,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697733279313" ID="ID_1511632308" MODIFIED="1697734150888" TEXT="Ziel: Feststellen des Implementierungs-Overhead">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Einen komplett leeren Job-Funktor wiederholt back-to-back (ohne Wartezeit) aufrufen; dabei das System nicht in die Sättigung treiben
|
||||
|
|
@ -86693,9 +86744,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697734330989" ID="ID_1732860802" MODIFIED="1697734334809" TEXT="Lösungsansätze">
|
||||
<node CREATED="1697734356370" ID="ID_1254835839" MODIFIED="1697734436578" TEXT="WorkForce nicht ganz auf Volllast">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
z.B. 7 Cores auf meinem 8-Core-System — damit die <i>sonstigen Sytem-aktivitäten</i> nicht zu Stau-Zuständen führen
|
||||
|
|
@ -86705,9 +86754,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697734513005" ID="ID_803781887" MODIFIED="1697734840822" TEXT="immer nur eine Epoche rechnen mit Deadline=ASAP">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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 <i>vor</i> oder <i>nach</i> dem Einstellen der Jobs starten
|
||||
|
|
@ -86717,9 +86764,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697734845040" ID="ID_348047225" MODIFIED="1697735849618" TEXT="Last mit gedämpfter Rückkopplung geregelt hochfahren bis zur Sättigung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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
|
||||
|
|
@ -86734,9 +86779,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697733314115" ID="ID_537940927" MODIFIED="1697736103683" TEXT="Ziel: Overhead exzessiv vernetzter Activities">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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
|
||||
|
|
@ -86753,9 +86796,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697736121279" ID="ID_1940006605" MODIFIED="1697736240729" TEXT="Ziel: Fehler in der Ausführungslogik ausschließen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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)
|
||||
|
|
@ -86786,9 +86827,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697736275498" ID="ID_1296200966" MODIFIED="1697736334906" TEXT="Einsatz wie im Play-Process">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Es wird aber kein Play-Prozess gebaut, sondern die entsprechende Funktionalität direkt aus dem Test aufgebaut
|
||||
|
|
@ -88887,6 +88926,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684984312239" ID="ID_1397136569" MODIFIED="1684984327473" TEXT="Dependencies repräsentieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697759022092" ID="ID_1686263066" MODIFIED="1697759031147" TEXT="Render-Nodes">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node CREATED="1697759087931" ID="ID_1166391944" MODIFIED="1697759133905" TEXT="Job-Ticket: abstrahiert als Prerequisite ↷ anderes Ticket"/>
|
||||
<node CREATED="1697759154154" ID="ID_39776878" MODIFIED="1697759165180" TEXT="Render-Activity-Network">
|
||||
<node CREATED="1697759166171" ID="ID_1324159119" MODIFIED="1697759177547" TEXT="Aufschalten einer Notification"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681347258814" ID="ID_1046752034" MODIFIED="1681347345729" TEXT="TimingObservable">
|
||||
<linktarget COLOR="#a54e77" DESTINATION="ID_1046752034" ENDARROW="Default" ENDINCLINATION="-1519;212;" ID="Arrow_ID_1830118942" SOURCE="ID_1139462793" STARTARROW="None" STARTINCLINATION="836;79;"/>
|
||||
|
|
@ -88895,6 +88941,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#8f29b2" DESTINATION="ID_1462535336" ENDARROW="Default" ENDINCLINATION="885;-44;" ID="Arrow_ID_1037995856" SOURCE="ID_321040814" STARTARROW="None" STARTINCLINATION="503;38;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687909270889" ID="ID_453814959" MODIFIED="1687909331969" TEXT="Meßpunkte">
|
||||
<linktarget COLOR="#9291ae" DESTINATION="ID_453814959" ENDARROW="Default" ENDINCLINATION="-76;125;" ID="Arrow_ID_271419388" SOURCE="ID_1817482022" STARTARROW="None" STARTINCLINATION="92;-5;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687909320050" ID="ID_1843968618" MODIFIED="1687909327679" TEXT="Speicher-Ort">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -88974,6 +89021,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697763685621" ID="ID_1642973256" MODIFIED="1697763887954" TEXT="EngineObserver">
|
||||
<linktarget COLOR="#4f3156" DESTINATION="ID_1642973256" ENDARROW="Default" ENDINCLINATION="-628;-472;" ID="Arrow_ID_1213898118" SOURCE="ID_272943268" STARTARROW="None" STARTINCLINATION="-1771;162;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1697763889873" ID="ID_1880953372" MODIFIED="1697763896717" TEXT="Aufgaben">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1697763898072" ID="ID_51060127" MODIFIED="1697763919401" TEXT="empfängt einzelne Zeitmessungen"/>
|
||||
<node CREATED="1697763920773" ID="ID_1817482022" MODIFIED="1697763990347" TEXT="ordnet diese den Meßpunkten zu">
|
||||
<arrowlink COLOR="#9291ae" DESTINATION="ID_453814959" ENDARROW="Default" ENDINCLINATION="-76;125;" ID="Arrow_ID_271419388" STARTARROW="None" STARTINCLINATION="92;-5;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697764000874" ID="ID_525721456" MODIFIED="1697764038363" TEXT="könnte noch weitere Performance-Daten empfangen">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697764018200" ID="ID_222314932" MODIFIED="1697764038362" TEXT="könnte Notifications und Triggerschwellen verwalten">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1689468998095" ID="ID_32989316" MODIFIED="1689469005279" TEXT="Selbstregulierung">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1689468860552" ID="ID_1323627214" MODIFIED="1689468865077" TEXT="offene Themen">
|
||||
|
|
@ -89043,9 +89109,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1697737465179" ID="ID_1204584376" MODIFIED="1697737798383" TEXT="selber Programmieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
An Libraries ist nur erlaubt, was ohnehin <i>in Reichweite liegt</i> (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
|
||||
|
|
@ -89055,9 +89119,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697737473137" ID="ID_1145748705" MODIFIED="1697737860816" TEXT="nicht viel Zeit darauf verwenden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
„viel“ ist relativ. Es darf schon Spaß machen, aber es sollte nicht in ein monatelanges Kunst-Projekt ausufern
|
||||
|
|
@ -89067,9 +89129,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697737543296" ID="ID_635918288" MODIFIED="1697738301537" TEXT="sollte gewisse Lastformen erzeugen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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.
|
||||
|
|
@ -89079,9 +89139,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697737491239" ID="ID_815953078" MODIFIED="1697738077728" TEXT="Ergebnis soll Stil haben">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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.
|
||||
|
|
@ -89104,9 +89162,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697738465629" ID="ID_95162985" MODIFIED="1697738467361" TEXT="Quellen">
|
||||
<node CREATED="1697738525765" ID="ID_1218093676" LINK="https://flam3.com/flame_draves.pdf" MODIFIED="1697738678279" TEXT="Scott Draves: Flame-Algo">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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.
|
||||
|
|
@ -89145,9 +89201,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697739314316" ID="ID_1389662036" MODIFIED="1697739320743" TEXT="Randomised Side-Chains">
|
||||
<node CREATED="1697739585271" ID="ID_214582424" MODIFIED="1697739867461" TEXT="Zahlenfolge in eine Hash-Summe einbuchen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -89165,9 +89219,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697739654662" ID="ID_200209889" MODIFIED="1697740265583" TEXT="„zufälliger“ limitierter Rückgriff auf ältere Ergebnisse">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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.
|
||||
|
|
@ -89177,9 +89229,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697739748719" ID="ID_1722048889" MODIFIED="1697740071380" TEXT="lokale Iteration um Last zu erzeugen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
die Hash-Funktion wird N-fach auf das Zwischenergebnis angewendet, für großes N. Damit kann CPU-Last erzeugt werden
|
||||
|
|
@ -89190,9 +89240,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697740269884" ID="ID_1006441438" MODIFIED="1697740623243" TEXT="ist deterministisch und parallelisierbar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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.
|
||||
|
|
@ -89202,9 +89250,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697740624211" ID="ID_1773119907" MODIFIED="1697740764084" TEXT="für den Test wird die Verzweigungsstruktur vorgeneriert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue