Workforce: requirement analysis

This commit is contained in:
Fischlurch 2023-09-04 18:31:45 +02:00
parent 2e28f5d278
commit 70cd8af806
8 changed files with 401 additions and 9 deletions

View file

@ -63,10 +63,24 @@ namespace gear {
short nothing_;
public:
template<typename FUN>
explicit
WorkForce (char const& b)
: nothing_(b)
WorkForce (FUN&& fun)
: nothing_{42}
{ }
void
activate (double degree =1.0)
{
UNIMPLEMENTED ("scale up");
}
void
deactivate()
{
UNIMPLEMENTED ("scale down to halt");
}
};

View file

@ -8,7 +8,7 @@ END
Test "BlockFlow memory management scheme" BlockFlow_test <<END
TEST "BlockFlow memory management scheme" BlockFlow_test <<END
return: 0
END
@ -35,3 +35,9 @@ END
PLANNED "Scheduler Integration" SchedulerUsage_test <<END
return: 0
END
PLANNED "Worker Thread Service" WorkForce_test <<END
return: 0
END

View file

@ -39,7 +39,7 @@ using test::Test;
namespace vault{
namespace mem {
namespace gear {
namespace test {
// using lib::time::FrameRate;

View file

@ -39,7 +39,7 @@ using test::Test;
namespace vault{
namespace mem {
namespace gear {
namespace test {
// using lib::time::FrameRate;

View file

@ -39,7 +39,7 @@ using test::Test;
namespace vault{
namespace mem {
namespace gear {
namespace test {
// using lib::time::FrameRate;
@ -100,4 +100,4 @@ namespace test {
}}} // namespace vault::mem::test
}}} // namespace vault::gear::test

View file

@ -0,0 +1,115 @@
/*
WorkForce(Test) - verify worker thread service
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 work-force-test.cpp
** unit test \ref WorkForce_test
*/
#include "lib/test/run.hpp"
#include "vault/gear/work-force.hpp"
//#include "lib/time/timevalue.hpp"
//#include "lib/format-cout.hpp"
//#include "lib/util.hpp"
//#include <utility>
//#include <chrono>
#include <thread>
using test::Test;
//using std::move;
//using util::isSameObject;
namespace vault{
namespace gear {
namespace test {
using std::this_thread::sleep_for;
using namespace std::chrono_literals;
// using lib::time::FrameRate;
// using lib::time::Offset;
// using lib::time::Time;
/*************************************************************************//**
* @test WorkForce-Service: maintain a pool of active worker threads.
* @see SchedulerUsage_test
*/
class WorkForce_test : public Test
{
virtual void
run (Arg)
{
simpleUsage();
walkingDeadline();
setupLalup();
}
/** @test demonstrate simple worker pool usage
*/
void
simpleUsage()
{
uint check{0};
WorkForce wof{[&]{ ++check; return true; }};
CHECK (0 == check);
wof.activate();
sleep_for(20ms);
CHECK (0 < check);
}
/** @test TODO
*/
void
walkingDeadline()
{
}
/** @test TODO
*/
void
setupLalup()
{
}
};
/** Register this test class... */
LAUNCHER (WorkForce_test, "unit engine");
}}} // namespace vault::mem::test

View file

@ -7245,6 +7245,19 @@ The primary scaling effects exploited to achieve this level of performance are t
The way other parts of the system are built, requires us to obtain a guaranteed knowledge of some job's termination. It is possible to obtain that knowledge with some limited delay, but it nees to be absoultely reliable (violations leading to segfault). The requirements stated above assume this can be achieved through //jobs with guaranteed execution.// Alternatively we could consider installing specific callbacks -- in this case the scheduler itself has to guarantee the invocation of these callbacks, even if the corresponding job fails or is never invoked. It doesn't seem there is any other option.
</pre>
</div>
<div title="SchedulerWorker" creator="Ichthyostega" modifier="Ichthyostega" created="202309041605" modified="202309041621" tags="Rendering spec draft" changecount="2">
<pre>The Scheduler //maintains a ''Work Force'' (a pool of workers) to perform the next [[render activities|RenderActivity]] continuously.//
Each worker runs in a dedicated thread; the Activities are arranged in a way to avoid blocking those worker threads
* IO operations are performed asynchronously {{red{planned as of 9/23}}}
* the actual calculation job is started only when all prerequisites are available
!Workload and invocation scheme
Using a pool of workers to perform small isolated steps of work atomically and in parallel is an well established pattern in high performance computing. However, the workload for rendering media is known to have some distinctive traits, calling for a slightly different approach compared with an operation system scheduler or a load balancer. Notably, the demand for resources is high, often using „whatever it takes“ -- driving the system into load saturation. The individual chunks of work, which can be computed independently, are comparatively large, and must often be computed in a constrained order. For real-time performance, it is desirable to compute data as late as possible, to avoid blocking memory with computed results. And for the final quality render, for the same reason it is advisable to proceed in data dependency order to keep as much data as possible in memory and avoid writing temporary files.
This leads to a situation where it is more adequate to //distribute the scarce computation resources// to the tasks //sequenced in temporary and dependence order//. The computation tasks must be prepared and ordered -- but beyond that, there is not much that can be »managed« with a computation task. For this reason, the Scheduler in the Lumiera Render Engine uses a pool of workers, each providing one unit of computation resource (a »core«), and these workers will ''pull work'' actively, rather then distributing, queuing and dispatching tasks to a passive set of workers.
Moreover, the actual computation tasks, which can be parallelised, are at least by an order of magnitude more expensive than any administrative work for sorting tasks, checking dependencies and maintaining process state. This leads to a scheme where a worker first performs some »management work«, until encountering the next actual computation job, at which point the worker leaves the //management mode// and transitions into //concurrent work mode//. All workers are expected to be in work mode almost entirely most of the time, and thus we can expect not much contention between workers performing »management work« -- allowing to confine this management work to //single threaded operation,// thereby drastically reducing the complexity of management data structures and memory allocation.
</pre>
</div>
<div title="ScopeLocator" modifier="Ichthyostega" created="200911192145" modified="200911202035" tags="def SessionLogic">
<pre>A link to relate a compound of [[nested placement scopes|PlacementScope]] to the //current// session and the //current//&amp;nbsp; [[focus for querying|QueryFocus]] and exploring the structure. ScopeLocator is a singleton service, allowing to ''explore'' a [[Placement]] as a scope, i.e. discover any other placements within this scope, and allowing to locate the position of this scope by navigating up the ScopePath finally to reach the root scope of the HighLevelModel.

View file

@ -79314,10 +79314,15 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1693171997528" ID="ID_1481946764" MODIFIED="1693172169618" TEXT="Komponenten aufbauen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1693171997528" ID="ID_862845398" MODIFIED="1693172169618" TEXT="Komponenten aufbauen">
<linktarget COLOR="#87584c" DESTINATION="ID_862845398" ENDARROW="Default" ENDINCLINATION="-1041;0;" ID="Arrow_ID_735728098" SOURCE="ID_204159198" STARTARROW="None" STARTINCLINATION="-238;-282;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1693172095351" ID="ID_605062962" MODIFIED="1693172311344" TEXT="Scheduler">
<node CREATED="1693172098402" ID="ID_671792975" MODIFIED="1693172099590" TEXT="DI"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693841227130" ID="ID_1537960830" MODIFIED="1693841284055" TEXT="WorkForce einbinden">
<arrowlink COLOR="#5f39b2" DESTINATION="ID_987966047" ENDARROW="Default" ENDINCLINATION="-1039;-52;" ID="Arrow_ID_818972822" STARTARROW="None" STARTINCLINATION="-609;73;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1693172069235" ID="ID_1573845677" MODIFIED="1693172084048" TEXT="Layer-1: SchedulerInvocation"/>
<node CREATED="1693172074855" ID="ID_101356551" MODIFIED="1693172090591" TEXT="Layer-2: SchedulerCommutator"/>
@ -79440,11 +79445,188 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689170064181" HGAP="5" ID="ID_987966047" MODIFIED="1689170075605" TEXT="WorkForce zur Ausf&#xfc;hrung" VSHIFT="7">
<linktarget COLOR="#5f39b2" DESTINATION="ID_987966047" ENDARROW="Default" ENDINCLINATION="-1039;-52;" ID="Arrow_ID_818972822" SOURCE="ID_1537960830" STARTARROW="None" STARTINCLINATION="-609;73;"/>
<linktarget COLOR="#5f39b2" DESTINATION="ID_987966047" ENDARROW="Default" ENDINCLINATION="-1039;-52;" ID="Arrow_ID_7965989" SOURCE="ID_1957090536" STARTARROW="None" STARTINCLINATION="-1231;87;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1689170081403" ID="ID_196314311" MODIFIED="1689171233757" TEXT="Technologie-Entscheidung">
<linktarget COLOR="#694db0" DESTINATION="ID_196314311" ENDARROW="Default" ENDINCLINATION="-56;-43;" ID="Arrow_ID_814147501" SOURCE="ID_1688483414" STARTARROW="None" STARTINCLINATION="-394;72;"/>
<linktarget COLOR="#b22e63" DESTINATION="ID_196314311" ENDARROW="Default" ENDINCLINATION="-1383;-51;" ID="Arrow_ID_134934445" SOURCE="ID_14638704" STARTARROW="None" STARTINCLINATION="-753;40;"/>
<icon BUILTIN="bell"/>
<node CREATED="1693773504249" ID="ID_181027430" MODIFIED="1693773549602" TEXT="Leitfrage">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693773517624" ID="ID_779344997" MODIFIED="1693773542645" TEXT="welche essentiellen M&#xf6;glichkeiten haben unsere selbst gebatuen L&#xf6;sungen?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node CREATED="1693778159526" ID="ID_86763478" MODIFIED="1693778165739" TEXT="eigener Worker-Pool">
<node CREATED="1693778172262" ID="ID_112349205" MODIFIED="1693778185072" TEXT="pr&#xe4;zise Kontrolle &#xfc;ber den Modus der Arbeitsverteilung"/>
<node CREATED="1693778186492" ID="ID_884250701" MODIFIED="1693778200216" TEXT="Anpassung an die konkrete Workload"/>
<node CREATED="1693778201612" ID="ID_134813800" MODIFIED="1693778219235" TEXT="zus&#xe4;tzliche Steuer- und Kontrollm&#xf6;glichkeiten"/>
<node CREATED="1693778245819" ID="ID_113777576" MODIFIED="1693778259397" TEXT="kann als dedizierter Service betrieben werden"/>
</node>
<node CREATED="1693787618970" ID="ID_1621791774" MODIFIED="1693787623646" TEXT="lib::Thread">
<node CREATED="1693787648687" ID="ID_1734153874" MODIFIED="1693787682238" TEXT="l&#xe4;uft fast komplett auf die Eigenschaften von std::thread hinaus"/>
<node CREATED="1693787682946" ID="ID_1584585093" MODIFIED="1693787698708" TEXT="allerdings gibt es Unsch&#xe4;rfen bei Referenz-Parametern f&#xfc;r die Funktion"/>
<node CREATED="1693787699344" ID="ID_1144215420" MODIFIED="1693787806325" TEXT="der verwendete Thread stammt aus einem automatisch verwalteten Threadpool"/>
<node CREATED="1693787815177" ID="ID_1720096544" MODIFIED="1693787844804" TEXT="join() wird erschwert / zum Spezialfall gemacht"/>
</node>
<node CREATED="1693789073665" ID="ID_1658974537" MODIFIED="1693789081779" TEXT="Mutex und ConditionVar">
<node CREATED="1693789083289" ID="ID_344539977" MODIFIED="1693789101083" TEXT="verpacken m&#xfc;hsamer zu verwendende POSIX-APIs"/>
<node CREATED="1693789106598" ID="ID_578647303" MODIFIED="1693789121791" TEXT="stellen Einheitlichkeit her, um darauf Policies aufzubauen"/>
</node>
<node CREATED="1693788920585" ID="ID_1811801110" MODIFIED="1693788927651" TEXT="der Monitor (lib::Sync)">
<node CREATED="1693788948827" ID="ID_1839763460" MODIFIED="1693788966716" TEXT="ist ein bew&#xe4;hrtes Design-Pattern mit guten Eigenschaften"/>
<node CREATED="1693788967376" ID="ID_1799182387" MODIFIED="1693788979634" TEXT="ist durch Policy konfigurierbar"/>
<node CREATED="1693788981334" ID="ID_697019077" MODIFIED="1693789010965" TEXT="bietet optional auch die wait / notify-Funktionalit&#xe4;t"/>
<node CREATED="1693789015665" ID="ID_1551495123" MODIFIED="1693789054009" TEXT="erm&#xf6;gilcht als Mix-In auch einen sehr kompakt verwendbaren Lock-Guard"/>
</node>
</node>
</node>
<node CREATED="1693773573993" ID="ID_1647001961" MODIFIED="1693777533642" TEXT="Eigenschaften der Standard-L&#xf6;sungen">
<icon BUILTIN="info"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1693777557361" ID="ID_1832737213" LINK="https://stackoverflow.com/q/58774356" MODIFIED="1693777611078" TEXT="es gibt (noch) keinen standardisierten Threadpool">
<icon BUILTIN="stop-sign"/>
<node CREATED="1693777627306" ID="ID_990313927" LINK="https://duckduckgo.com/l/?uddg=https%3A%2F%2Fwww.open%2Dstd.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2020%2Fp0443r12.html&amp;rut=18bac472d51ccd0d0d61ff44e67e95db26174d30580a58a460ddd659feba8179" MODIFIED="1693783619298" TEXT="&#xbb;unified executors&#xab; / Proposal still in discussion (vielleicht C++23)"/>
<node CREATED="1693777976879" ID="ID_980726893" LINK="https://web.archive.org/web/20230322194534/https://accu.org/journals/overload/29/164/teodorescu/" MODIFIED="1693777997279" TEXT="&#xbb;C++ Executors: the Good, the Bad, and Some Examples&#xab;"/>
<node CREATED="1693778375945" ID="ID_81861804" MODIFIED="1693778436222">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
&#8623; eine Standard-L&#246;sung <font color="#a61b1b">impliziert auch ein Ausf&#252;hrungs-Framework</font>
</p>
</body>
</html></richcontent>
<node CREATED="1693778458303" ID="ID_832214591" MODIFIED="1693778480076" TEXT="...aber wir bauen selber ein Ausf&#xfc;hrungs-Framework">
<icon BUILTIN="stop-sign"/>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1693778472069" ID="ID_1414699251" MODIFIED="1693778476487" TEXT="und zwar aus gutem Grund">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1693789205811" ID="ID_536058942" MODIFIED="1693789351784" TEXT="die Standard-Library bietet keinen Monitor">
<icon BUILTIN="idea"/>
<node CREATED="1693789352820" ID="ID_1126857833" MODIFIED="1693789360975" TEXT="(und wird vermutlich auch keinen bieten)"/>
<node CREATED="1693789228741" ID="ID_837192274" MODIFIED="1693789248765" TEXT="...denn das w&#xfc;rde dem Stil der STL widersprechen">
<node CREATED="1693789905354" ID="ID_835555737" MODIFIED="1693789923944" TEXT="stattdessen gibt es...">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1693789853537" ID="ID_1646017528" MODIFIED="1693789870620" TEXT="std::unique_lock&lt;MUT&gt;"/>
<node CREATED="1693789912326" ID="ID_471001146" MODIFIED="1693789920140" TEXT="std::lock_guard&lt;MUT&gt;"/>
<node CREATED="1693789948428" ID="ID_993053508" MODIFIED="1693789955848" TEXT="std::scoped_lock"/>
</node>
</node>
<node CREATED="1693787422981" ID="ID_179766855" MODIFIED="1693787426728" TEXT="std::thread">
<node CREATED="1693787431388" ID="ID_1591799675" MODIFIED="1693787439172" TEXT="startet sofort bei Konstruktion (RAII)"/>
<node CREATED="1693787440188" ID="ID_56679749" MODIFIED="1693787459455" TEXT="nimmt eine auszuf&#xfc;hrende funktion"/>
<node CREATED="1693787459992" ID="ID_1545457780" MODIFIED="1693787478426" TEXT="kopiert alle dieser Funktion gegebenen Argumente"/>
<node CREATED="1693787489228" ID="ID_572651416" MODIFIED="1693787550552" TEXT="stellt sicher, da&#xdf; die Funktion im neuen Thread beim verlassen des Konstruktors gestartet ist"/>
<node CREATED="1693787562730" ID="ID_1462251093" MODIFIED="1693787585283" TEXT="join() wird unterst&#xfc;tzt"/>
</node>
</node>
<node CREATED="1693783675300" ID="ID_1818177401" MODIFIED="1693790461409" TEXT="Entscheidungen">
<icon BUILTIN="forward"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693783691433" ID="ID_279372215" MODIFIED="1693783750796" TEXT="Worker-Management selber bauen">
<icon BUILTIN="yes"/>
<node CREATED="1693783766735" ID="ID_912764109" MODIFIED="1693783781449" TEXT="und zwar in C++">
<node CREATED="1693783781989" ID="ID_1709905837" MODIFIED="1693783798679" TEXT="wegen Atomics &amp; Futures"/>
<node CREATED="1693783810401" ID="ID_1691365318" MODIFIED="1693783825729" TEXT="wegen Funktoren und Typsicherheit"/>
<node CREATED="1693783799406" ID="ID_516886484" MODIFIED="1693783805118" TEXT="wegen Portabilit&#xe4;t"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1693787750689" ID="ID_1636630763" MODIFIED="1693787785090" TEXT="lib::Thread wird aufgegeben">
<icon BUILTIN="yes"/>
<node CREATED="1693787857875" ID="ID_1964973756" MODIFIED="1693787947679">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
die Limitierungen und der Threadpool waren <i>gut gemeint</i>
</p>
</body>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1693787905997" ID="ID_1862230955" MODIFIED="1693787943205" TEXT="aber: sie verlagern Architektur-Fragen in die LIbrary-Ebene">
<icon BUILTIN="closed"/>
<node CREATED="1693788079957" ID="ID_84816913" MODIFIED="1693788252833" TEXT="das ist bestenfalls wirkungslos">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...wenn es sich ohnehin nur um eine Einrichtung innerhalb einer bestimmten Applikation handelt, dann bleibt lediglich die Frage &#252;brig, wohin der Quell/Objektcode gepackt wird
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1693788121089" ID="ID_553756560" MODIFIED="1693788325694" TEXT="schafft aber ungesunde Strukturen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Da Library-Funktionen ohne Weiteres genutzt werden, zwingt das dazu, statische Instanzen und versteckte magische Initialisierung zu verwenden
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1693788148236" ID="ID_1859841213" MODIFIED="1693788618261" TEXT="und stellt im allgemeineren Fall eine Kompetenz&#xfc;berschreitung dar">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Sprachmittel sind stets aus gutem Grund da. Entweder es gibt aktuell ad&#228;quaten Nutzen, oder es gab fr&#252;her mal einen relevanten Nutzen. Daher stellt es eine Anma&#223;ung dar, wenn jemand nun einfach rundheraus behauptet, es sei <i>falsch</i>&#160;dieses Sprachmittel zu verwenden. Wenn man einen Anf&#228;nger ohne ausreichende Kompetenzen entlasten m&#246;chte, oder wenn man unter Einschr&#228;nkung ein bestimmtes Nutmuster vorgeben m&#246;chte, dann baut man ein <b>Framework</b>, und keine Library.
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1693788648105" ID="ID_426109467" MODIFIED="1693788808876">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
in allen sonstigen Eigenschaften hatte unsere Library-L&#246;sung <i>genau das Design</i>&#160;gew&#228;hlt,
</p>
<p>
das sich nun auch im Standard als angemessen herausgebildet hat &#8212;
</p>
<p>
aber die Standard-L&#246;sung ist ausgereifter und verwendet moderne Sprachmittel
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693789156806" ID="ID_128127845" MODIFIED="1693789195596" TEXT="Monitor erhalten und umschreiben">
<icon BUILTIN="yes"/>
<node CREATED="1693789376921" ID="ID_158507519" MODIFIED="1693789398154" TEXT="ein Monitor geh&#xf6;rt typischerweise in ein Framework"/>
<node CREATED="1693789399454" ID="ID_1417502572" MODIFIED="1693789408745" TEXT="und hier haben wir ein Applicatino-Framework"/>
<node CREATED="1693789410469" ID="ID_1281994248" MODIFIED="1693789423198" TEXT="in diesem Rahmen hat er sich hervorragend bew&#xe4;hrt"/>
</node>
</node>
</node>
<node CREATED="1693791978730" ID="ID_167871463" MODIFIED="1693791982741" TEXT="Spezifikation">
<node CREATED="1693792127590" ID="ID_399407420" MODIFIED="1693792149871" TEXT="St&#xe4;rke kann variiert werden">
<node CREATED="1693792157926" ID="ID_429801566" MODIFIED="1693792193345" TEXT="komplett heruntergeregelt &#x27f9; Render-Engine deaktiviert"/>
<node CREATED="1693792250942" ID="ID_1000686206" MODIFIED="1693792285653" TEXT="Obergrenze &#x2259; Hardware-concurrency * Provisionierungs-Faktor"/>
<node CREATED="1693792308542" ID="ID_1678880734" MODIFIED="1693792318777" TEXT="Herunterregeln erfolgt kooperativ"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693792585515" ID="ID_464175339" MODIFIED="1693792605896" TEXT="geplant: dynamische Kapazit&#xe4;tsregelung">
<icon BUILTIN="hourglass"/>
<node CREATED="1693792629986" ID="ID_1269240792" MODIFIED="1693792648043" TEXT="nur mindest-St&#xe4;rke l&#xe4;uft"/>
<node CREATED="1693792648648" ID="ID_1347574580" MODIFIED="1693792689438" TEXT="bei Bedarf wird hochsakliert"/>
</node>
</node>
<node CREATED="1693792477807" ID="ID_5065581" MODIFIED="1693792530740" TEXT="Zyklus: pull work / check / sleep">
<node CREATED="1693792715966" ID="ID_717442289" MODIFIED="1693792730000" TEXT="die &quot;pull-work&quot;-Funkton wird vom Scheduler-Layer-2 bereitgestellt"/>
<node CREATED="1693792744114" ID="ID_1037530409" MODIFIED="1693792754452" TEXT="die Schlaf-Periode ist ein (steuer)-Parameter"/>
<node CREATED="1693792760213" ID="ID_1223151647" MODIFIED="1693792767060" TEXT="ggfs leicht randomisiert">
<node CREATED="1693792791729" ID="ID_649360495" MODIFIED="1693792804966" TEXT="Einsch&#xe4;tzung: das gen&#xfc;gt um Contention zu vermeiden"/>
<node CREATED="1693792900758" ID="ID_1613781033" MODIFIED="1693792927222" TEXT="Vorraussetzung: Arbeitsphase &gt;&gt; Management-Phase"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693841488183" HGAP="-2" ID="ID_671611566" MODIFIED="1693841514321" TEXT="WorkForce_test (Komponententest)" VSHIFT="-3">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
@ -80574,6 +80756,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#338800" CREATED="1688337270626" FOLDED="true" ID="ID_1810148055" MODIFIED="1689994032309" TEXT="&#xbb;BlockFlow&#xab; : Implementation">
<linktarget COLOR="#578096" DESTINATION="ID_1810148055" ENDARROW="Default" ENDINCLINATION="-1144;102;" ID="Arrow_ID_1579502372" SOURCE="ID_1478014419" STARTARROW="None" STARTINCLINATION="549;39;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1688398675985" ID="ID_291772625" MODIFIED="1689188506325" TEXT="Basis: ExtentFamily">
<icon BUILTIN="button_ok"/>
@ -83367,6 +83550,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1693238644990" ID="ID_1196672113" MODIFIED="1693238729300" TEXT="Laststeuerung f&#xfc;r &#xbb;free-wheeling&#xab; / background render">
<arrowlink COLOR="#965d71" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="286;89;" ID="Arrow_ID_494620026" STARTARROW="None" STARTINCLINATION="2087;110;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693840934074" ID="ID_571516538" MODIFIED="1693840995972" TEXT="Render-Engie Lebenszyklus: start / stop">
<linktarget COLOR="#d87cae" DESTINATION="ID_571516538" ENDARROW="Default" ENDINCLINATION="-569;36;" ID="Arrow_ID_490264910" SOURCE="ID_1011982391" STARTARROW="None" STARTINCLINATION="-116;14;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1693841031260" ID="ID_204159198" MODIFIED="1693841088122" TEXT="Komponenten / DI">
<arrowlink COLOR="#87584c" DESTINATION="ID_862845398" ENDARROW="Default" ENDINCLINATION="-1041;0;" ID="Arrow_ID_735728098" STARTARROW="None" STARTINCLINATION="-238;-282;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693841347210" ID="ID_187251325" MODIFIED="1693841387431" TEXT="mu&#xdf; dann WorkForce hochskalieren">
<arrowlink COLOR="#7e4d5e" DESTINATION="ID_951861985" ENDARROW="Default" ENDINCLINATION="-213;-26;" ID="Arrow_ID_301980510" STARTARROW="None" STARTINCLINATION="186;14;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1684869810400" TEXT="Scheduler">
<icon BUILTIN="stop"/>
@ -83396,7 +83590,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1688438172401" ID="ID_1302126473" MODIFIED="1688438176429" TEXT="Memory-Manager"/>
<node CREATED="1688438172401" ID="ID_1302126473" MODIFIED="1688438176429" TEXT="Memory-Manager">
<node COLOR="#338800" CREATED="1693840789997" ID="ID_1478014419" MODIFIED="1693840887589" TEXT="BlockFlow (custom allocation scheme)">
<arrowlink COLOR="#578096" DESTINATION="ID_1810148055" ENDARROW="Default" ENDINCLINATION="-1144;102;" ID="Arrow_ID_1579502372" STARTARROW="None" STARTINCLINATION="549;39;"/>
<icon BUILTIN="forward"/>
</node>
</node>
<node CREATED="1688438177472" ID="ID_854658770" MODIFIED="1688438183516" TEXT="Weiterentwicklung">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1688438184671" ID="ID_1971690047" MODIFIED="1688438194457" TEXT="Pr&#xfc;fen / messen">
<icon BUILTIN="bell"/>
@ -83430,6 +83629,51 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1693840103305" ID="ID_1712403454" MODIFIED="1693840108876" TEXT="Subsystem / Lebenszyklus">
<node CREATED="1693840123854" ID="ID_1137026251" MODIFIED="1693840139943" TEXT="EngineFacade">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693840141571" ID="ID_675459196" MODIFIED="1693840151277" TEXT="EngineSubsyDescriptor">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1693840154226" ID="ID_1739899141" MODIFIED="1693840187853" TEXT="&#xd83d;&#xdc80; bisher nur ein Skelett"/>
<node CREATED="1693840205259" ID="ID_906117225" MODIFIED="1693840220900" TEXT="Services">
<node CREATED="1693840225944" ID="ID_546523595" MODIFIED="1693840228291" TEXT="der Scheduler"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693841227130" ID="ID_1957090536" MODIFIED="1693841404088" TEXT="WorkForce-Komponente bereitstellen">
<arrowlink COLOR="#5f39b2" DESTINATION="ID_987966047" ENDARROW="Default" ENDINCLINATION="-1039;-52;" ID="Arrow_ID_7965989" STARTARROW="None" STARTINCLINATION="-1231;87;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1693841364032" ID="ID_951861985" MODIFIED="1693841380195" TEXT="regulieren/skalieren">
<linktarget COLOR="#7e4d5e" DESTINATION="ID_951861985" ENDARROW="Default" ENDINCLINATION="-213;-26;" ID="Arrow_ID_301980510" SOURCE="ID_187251325" STARTARROW="None" STARTINCLINATION="186;14;"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693840260723" ID="ID_1171496185" MODIFIED="1693840333227" TEXT="lumiera_backend_init?">
<icon BUILTIN="help"/>
<node CREATED="1693840334713" ID="ID_904946730" MODIFIED="1693840352179" TEXT="wird bisher nur von C-Tests benutzt">
<icon BUILTIN="smiley-oh"/>
</node>
<node CREATED="1693840384866" ID="ID_1054659625" MODIFIED="1693840397133" TEXT="&#xd6;kosystem von C-Services">
<icon BUILTIN="info"/>
<node CREATED="1693840404680" ID="ID_1171974069" MODIFIED="1693840406556" TEXT="mpool"/>
<node CREATED="1693840420342" ID="ID_1716830295" MODIFIED="1693840423786" TEXT="resourcecollector"/>
<node CREATED="1693840438347" ID="ID_1911524559" MODIFIED="1693840446279" TEXT="safeclib (f&#xfc;r C-Strings)"/>
<node CREATED="1693840450337" ID="ID_1275294302" MODIFIED="1693840452934" TEXT="threadpool">
<node CREATED="1693840578969" ID="ID_868605937" MODIFIED="1693840593587" TEXT="wird separat von threadpool-init.cpp aufgerufen"/>
<node CREATED="1693840693336" ID="ID_861831989" MODIFIED="1693840715651" TEXT="LifecycleHook: ON_GLOBAL_INIT, &amp;initialise_Threadpool"/>
<node CREATED="1693840594607" ID="ID_58671517" MODIFIED="1693840623216" TEXT="&#x27f9; dies ist(war) der einzige tats&#xe4;chlich benutzte Servic">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1693840461057" ID="ID_932302464" MODIFIED="1693840466924" TEXT="filedescriptor-registry"/>
<node CREATED="1693840485318" ID="ID_1336910692" MODIFIED="1693840488755" TEXT="filehandle-cache"/>
<node CREATED="1693840510520" ID="ID_753991544" MODIFIED="1693840513131" TEXT="mmap-cache"/>
<node CREATED="1693840474319" ID="ID_472099840" MODIFIED="1693840477378" TEXT="config-system"/>
</node>
</node>
</node>
<node CREATED="1693840242198" ID="ID_1011982391" MODIFIED="1693840985506" TEXT="hoch / runterfahren">
<arrowlink COLOR="#d87cae" DESTINATION="ID_571516538" ENDARROW="Default" ENDINCLINATION="-569;36;" ID="Arrow_ID_490264910" STARTARROW="None" STARTINCLINATION="-116;14;"/>
</node>
</node>
<node CREATED="1693840231223" ID="ID_765939651" MODIFIED="1693840234691" TEXT="Lebenszyklus"/>
</node>
</node>
<node CREATED="1681085780230" ID="ID_667166448" MODIFIED="1681085784377" TEXT="Render Toolkit">
<node CREATED="1681085789797" ID="ID_435519695" MODIFIED="1681085821901" TEXT="Abstraktionsschicht &#xfc;ber Low-Level-Funktionalit&#xe4;t"/>
<node CREATED="1681085863204" ID="ID_136936235" MODIFIED="1681085881132" TEXT="isoliert system-Level Services und externe Library-Erweiterungen"/>