Scheduler: rework load-regulation

The first complete integration test with Chain-Load
highlighted some difficulties with the overall load regulation:
- it works well in the standard case (but is possibly to eager to scale up)
- the scale-up sometimes needs several cycles to get "off the ground"
- when the first job is dispatched immediately instead of going
  through the queue, the scheduler fails to boot up
This commit is contained in:
Fischlurch 2023-12-07 03:55:20 +01:00
parent 21fbe09ee0
commit fa86228057
5 changed files with 591 additions and 40 deletions

View file

@ -129,9 +129,10 @@ namespace gear {
}
Duration SLEEP_HORIZON{_uTicks (20ms)};
Duration WORK_HORIZON {_uTicks ( 5ms)};
Duration NEAR_HORIZON {_uTicks (50us)};
Duration SLEEP_HORIZON{_uTicks (20ms)}; ///< schedules beyond that horizon justify going idle
Duration WORK_HORIZON {_uTicks ( 5ms)}; ///< the scope of activity _currently in the works_
Duration NEAR_HORIZON {_uTicks (50us)}; ///< what counts as "imminent" (e.g. for spin-waiting)
Duration STANDARD_LAG {_uTicks(200us)}; ///< Experience shows that on average scheduling happens with 200µs delay
const double LAG_SAMPLE_DAMPING = 2; ///< smoothing factor for exponential moving average of lag;
}
@ -154,6 +155,7 @@ namespace gear {
{
function<size_t()> maxCapacity {[]{ return 1; }};
function<size_t()> currWorkForceSize{[]{ return 0; }};
function<void(uint)> stepUpWorkForce{[](uint){/*NOP*/}};
///////TODO add here functors to access performance indicators
};
@ -232,8 +234,8 @@ namespace gear {
double
effectiveLoad() const
{
double lag = sampledLag_.load (memory_order_relaxed);
lag -= 200;
double lag = averageLag();
lag -= _raw(STANDARD_LAG);
lag /= _raw(WORK_HORIZON);
lag *= 10;
double lagFactor = lag<0? 1/(1-lag): 1+lag;
@ -246,6 +248,13 @@ namespace gear {
updateState (Time)
{
/////////////////////////////////////////////////////////////////////////////TODO anything we need to calculate on each »scheduler tick«?
//
auto lag = averageLag();
if (lag > _raw(WORK_HORIZON))
wiring_.stepUpWorkForce(+4);
else
if (averageLag() > 2*_raw(STANDARD_LAG))
wiring_.stepUpWorkForce(+1);
}
/** statistics update on scaling down the WorkForce */
@ -255,6 +264,18 @@ namespace gear {
///////do something deeply moving
}
/**
* Hook to check and possibly scale up WorkForce to handle one additional job
*/
void
ensureCapacity (Time startHorizon)
{
if (startHorizon > 2* SLEEP_HORIZON)
return;
if (averageLag() > 2*_raw(STANDARD_LAG))
wiring_.stepUpWorkForce(+1);
}
/**
* did we already tend for the indicated next relevant head time?
* @note const and non-grooming

View file

@ -142,6 +142,7 @@ namespace gear {
const auto IDLE_WAIT = 20ms; ///< sleep-recheck cycle for workers deemed _idle_
const size_t DISMISS_CYCLES = 100; ///< number of wait cycles before an idle worker terminates completely
Offset POLL_WAIT_DELAY{FSecs(1,1000)}; ///< delay until re-evaluating a condition previously found unsatisfied
Offset SEED_CALC_OFFSET{_uTicks(250us)}; ///< tiny delay to ensure the first job is actually enqueued to force ignite()
Offset DUTY_CYCLE_PERIOD{FSecs(1,20)}; ///< period of the regular scheduler »tick« for state maintenance.
Offset DUTY_CYCLE_TOLERANCE{FSecs(1,10)}; ///< maximum slip tolerated on duty-cycle start before triggering Scheduler-emergency
}
@ -271,7 +272,8 @@ namespace gear {
ignite()
{
TRACE (engine, "Ignite Scheduler Dispatch.");
handleDutyCycle (RealClock::now());
bool force_continued_run{true};
handleDutyCycle (RealClock::now(), force_continued_run);
if (not empty())
workForce_.activate();
}
@ -330,7 +332,7 @@ namespace gear {
{
layer1_.activate (manID);
activityLang_.announceLoad (expectedAdditionalLoad);
continueMetaJob (RealClock::now(), planningJob, manID);
continueMetaJob (RealClock::now()+SEED_CALC_OFFSET, planningJob, manID);
}
@ -379,9 +381,9 @@ namespace gear {
private:
void postChain (ActivationEvent);
void handleDutyCycle (Time now);
void handleDutyCycle (Time now, bool =false);
void handleWorkerTermination (bool isFailure);
void maybeScaleWorkForce();
void maybeScaleWorkForce (Time startHorizon);
void triggerEmergency();
@ -425,6 +427,7 @@ namespace gear {
LoadController::Wiring setup;
setup.maxCapacity = []{ return work::Config::COMPUTATION_CAPACITY; };
setup.currWorkForceSize = [this]{ return workForce_.size(); };
setup.stepUpWorkForce = [this](uint steps){ workForce_.incScale(steps); };
return setup;
}
@ -497,7 +500,7 @@ namespace gear {
/**
* λ-post: enqueue for time-bound execution, possibly dispatch immediately.
* @remark This function represents and _abstracted entrance to scheduling_
* @remark This function represents an _abstracted entrance to scheduling_
* for the ActivityLang and is relevant for recursive forwarding
* of activations and notifications. The concrete implementation
* needs some further contextual information, which is passed
@ -614,7 +617,7 @@ namespace{
inline void
Scheduler::postChain (ActivationEvent actEvent)
{
maybeScaleWorkForce ();
maybeScaleWorkForce (actEvent.startTime());
cout<<"‖SCH‖ "+markThread()+": @"+relT(RealClock::now())+" ○ start="+relT(actEvent.starting)+" dead:"+util::toString(actEvent.deadline - actEvent.starting)<<endl;
ExecutionCtx ctx{*this, actEvent};
layer2_.postDispatch (actEvent, ctx, layer1_);
@ -743,9 +746,11 @@ cout<<" ·‖ "+markThread()+": @ "+relT(now)+" HT:"+relT(layer1_.headTime())+
* immediate response, but with sufficient large time period to amortise even slightly
* more computational expensive work; IO and possibly blocking operations should be
* avoided here though. Exceptions emanating from here will shut down the engine.
* @param forceContinuation whether a follow-up DutyCycle _must_ happen,
* irrespective if the queue has still further entries (idle detection)
*/
inline void
Scheduler::handleDutyCycle (Time now)
Scheduler::handleDutyCycle (Time now, bool forceContinuation)
{
cout<<"‖▷▷▷‖ "+markThread()+": @ "+relT(now)+(empty()? string(" EMPTY"): " HT:"+relT(layer1_.headTime()))<<endl;
// consolidate queue content
@ -765,14 +770,16 @@ cout<<"‖▷▷▷‖ "+markThread()+": @ "+relT(now)+(empty()? string(" EMPTY"
loadControl_.updateState (now);
if (not empty())
if (not empty() or forceContinuation)
{// prepare next duty cycle »tick«
Time nextTick = now + DUTY_CYCLE_PERIOD;
Time deadline = nextTick + DUTY_CYCLE_TOLERANCE;
Activity& tickActivity = activityLang_.createTick (deadline);
postChain (ActivationEvent{tickActivity, nextTick, deadline, ManifestationID(), true});
}
}
ActivationEvent tickEvent{tickActivity, nextTick, deadline, ManifestationID(), true};
ExecutionCtx ctx{*this, tickEvent};
layer2_.postDispatch (tickEvent, ctx, layer1_);
} // *deliberately* use low-level entrance
} // to avoid ignite() cycles and derailed load-regulation
/**
* Callback invoked whenever a worker-thread is about to exit
@ -798,7 +805,7 @@ cout<<"‖▽▼▽‖ "+markThread()+": @ "+relT(now)<<endl;
* workers fall idle for extended time (> 2sec).
*/
inline void
Scheduler::maybeScaleWorkForce()
Scheduler::maybeScaleWorkForce (Time startHorizon)
{
if (empty())
{
@ -807,7 +814,7 @@ cout<<"‖IGN‖ wof:"+util::toString(workForce_.size())<<endl;
}
else
{
workForce_.incScale();
loadControl_.ensureCapacity (startHorizon);
cout<<"‖•△•‖ wof:"+util::toString(workForce_.size())+" HT:"+relT(layer1_.headTime())<<endl;
}
}

View file

@ -234,11 +234,11 @@ namespace gear {
}
void
incScale()
incScale(uint step =+1)
{
if (size() >= setup_.COMPUTATION_CAPACITY)
return;
else
uint i = workers_.size();
uint target = util::min (i+step, setup_.COMPUTATION_CAPACITY);
for ( ; i < target; ++i)
workers_.emplace_back (setup_);
}

View file

@ -134,10 +134,9 @@ namespace test {
auto postIt = [&] { postNewTask (scheduler, dummy, RealClock::now()+t200us); };
scheduler.ignite();
CHECK (isnil (scheduler)); // no start without any post()
CHECK (not isnil (scheduler));// repeated »tick« task enlisted....
postIt();
scheduler.ignite();
CHECK (not isnil (scheduler));
scheduler.terminateProcessing();

View file

@ -81251,6 +81251,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1701882391470" ID="ID_1462026060" LINK="#ID_441526961" MODIFIED="1701882415573" TEXT="Beschlu&#xdf;: nicht nur sinnlos, sogar gef&#xe4;hrlich &#x27f9; zur&#xfc;ckbauen">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1690069773157" FOLDED="true" ID="ID_1756992465" MODIFIED="1693501586447" TEXT="Problem: wer bestimmt um wie viel?">
<icon BUILTIN="messagebox_warning"/>
@ -82626,18 +82630,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1964298619" ENDARROW="Default" ENDINCLINATION="27;865;" ID="Arrow_ID_900145073" SOURCE="ID_760916314" STARTARROW="Default" STARTINCLINATION="-554;-36;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1699325172901" FOLDED="true" ID="ID_1435123962" MODIFIED="1699372410733" TEXT="mu&#xdf; Kapazit&#xe4;t pr&#xfc;fen / Hochskalieren">
<arrowlink COLOR="#57496c" DESTINATION="ID_745204926" ENDARROW="Default" ENDINCLINATION="249;-377;" ID="Arrow_ID_55492946" STARTARROW="None" STARTINCLINATION="668;346;"/>
<node COLOR="#338800" CREATED="1699325172901" FOLDED="true" ID="ID_1435123962" MODIFIED="1701918091701" TEXT="mu&#xdf; Kapazit&#xe4;t pr&#xfc;fen / Hochskalieren">
<arrowlink COLOR="#57496c" DESTINATION="ID_745204926" ENDARROW="Default" ENDINCLINATION="239;-525;" ID="Arrow_ID_55492946" STARTARROW="None" STARTINCLINATION="668;346;"/>
<linktarget COLOR="#373a76" DESTINATION="ID_1435123962" ENDARROW="Default" ENDINCLINATION="304;54;" ID="Arrow_ID_928822414" SOURCE="ID_1792556883" STARTARROW="None" STARTINCLINATION="-255;13;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1699329348003" ID="ID_396553511" MODIFIED="1699372243603" TEXT="Parameter zur WorkForce-St&#xe4;rke wird ber&#xfc;cksichtigt">
<linktarget COLOR="#45647f" DESTINATION="ID_396553511" ENDARROW="Default" ENDINCLINATION="486;26;" ID="Arrow_ID_329496296" SOURCE="ID_651840656" STARTARROW="None" STARTINCLINATION="728;32;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#435e98" CREATED="1699329449911" ID="ID_1960065591" MODIFIED="1699372221033" TEXT="wenn....">
<node COLOR="#435e98" CREATED="1699329454534" ID="ID_258337881" MODIFIED="1699372224340" TEXT="Scheduler l&#xe4;uft nicht &#x27f9; ignite()"/>
<node COLOR="#435e98" CREATED="1699329466069" ID="ID_1149902545" MODIFIED="1699372224340" TEXT="nicht volle St&#xe4;rke &#x27f9; step"/>
</node>
<node COLOR="#338800" CREATED="1699372253576" ID="ID_869013268" MODIFIED="1699372262575" TEXT="Implementierung in postChain eingeh&#xe4;ngt">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1699372263855" ID="ID_1329492790" MODIFIED="1699372374425" TEXT="damit stets wirksam, wenn etwas in den Scheduler geht">
@ -82752,7 +82752,56 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1699568192950" ID="ID_46078853" MODIFIED="1699588823469" TEXT="weitere Parameter sind nur optional">
<icon BUILTIN="button_ok"/>
<node CREATED="1699568225289" ID="ID_1953407534" MODIFIED="1699568238756" TEXT="brauche daher zwei Varianten"/>
<node CREATED="1699568239935" ID="ID_1918919265" MODIFIED="1699568264056" TEXT="Start-Offset ist per default &#xbb;now&#xab;"/>
<node CREATED="1699568239935" ID="ID_1918919265" MODIFIED="1699568264056" TEXT="Start-Offset ist per default &#xbb;now&#xab;">
<node COLOR="#5b280f" CREATED="1701908537702" ID="ID_1540450354" MODIFIED="1701908654188" TEXT="das ist keine gute Idee">
<linktarget COLOR="#fe3a92" DESTINATION="ID_1540450354" ENDARROW="Default" ENDINCLINATION="-276;439;" ID="Arrow_ID_1046045680" SOURCE="ID_1609424678" STARTARROW="None" STARTINCLINATION="329;-15;"/>
<icon BUILTIN="stop-sign"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#d50478" CREATED="1701908700571" ID="ID_135320855" MODIFIED="1701908736435" TEXT="dachte das ist clever">
<font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="smiley-oh"/>
</node>
<node CREATED="1701908912517" ID="ID_1164197670" MODIFIED="1701909205244" TEXT="...ist aber kurzssichtig und schief">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...ich hab n&#228;mlich nur an mich selber gedacht, wie ich mit dem Debugger noch in den ersten Planungs-Chunk hineinsteppen kann. Das ist doch cool, dachte ich. <i>Diese Perspektive ist aber schr&#228;g </i>&#8212; wenngleich es sicher gut ist, da&#223; aus Konsistenzgr&#252;nden <i>sogar der aktuelle Thread </i>ein St&#252;ck Arbeit machen <i>k&#246;nnte, </i>so ist das letztlich doch nicht die Aufrgabe des aktuellen Thread (Player?), und es kostet (wie ich grade feststelle) gerne mal 5-10ms, die woanders besser angelegt sind. Zumal die Festlegung des &#187;start-Ankers&#171; logisch davon unabh&#228;ngig ist, von wo aus das l&#228;uft; und wenn man den Anker explizit auf etwas setzen m&#246;chte, dann soll man ihn eben explizit setzen.
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701909215429" ID="ID_1813895994" MODIFIED="1701909367096" TEXT="normalerweise ungef&#xe4;hrlich, kann aber zum Deadlock f&#xfc;hren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
<b>Genau so einen Fall beobachte ich grade</b>:
</p>
<ul>
<li>
es gibt einen <i>weiteren Bug, weshalb der Meta-Job zun&#228;chst einmal <b>leer
durchf&#228;llt</b></i>
</li>
<li>
demzufolge wird au&#223;er dem aktuellen Job nichts &#8222;abgeworfen&#8220;
</li>
<li>
und dann f&#228;hrt der Scheduler &#252;berhaupt nicht hoch
</li>
<li>
und eine Logik, die letzteres vorraussetzt, l&#228;uft dann in den <b><font color="#b80256">Deadlock
&#55357;&#56817;</font></b>
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701923216062" ID="ID_245599280" MODIFIED="1701923238477" TEXT="zus&#xe4;tzlichen SEED_CALC_OFFSET eingef&#xfc;hrt">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1699568273591" ID="ID_138761713" MODIFIED="1699568281494" TEXT="aber die ManifestationID wird man meist angeben">
<node CREATED="1699568288833" ID="ID_1628158423" MODIFIED="1699568304195" TEXT="denn auch eine bereits abgeschickte Planungs-Fortschreibung kann obsolet werden"/>
<node CREATED="1699568305542" ID="ID_145276801" MODIFIED="1699568314497" TEXT="sie wird ja um eine erhebliche Zeit in die Zukunft geschoben"/>
@ -84818,7 +84867,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1698159441179" FOLDED="true" ID="ID_486995126" MODIFIED="1699498300894" TEXT="Scheduler-Tick">
<node COLOR="#338800" CREATED="1698159441179" FOLDED="true" ID="ID_486995126" MODIFIED="1701915097651" TEXT="Scheduler-Tick">
<linktarget COLOR="#fffcc5" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="579;-95;" ID="Arrow_ID_1801107947" SOURCE="ID_671338782" STARTARROW="None" STARTINCLINATION="292;11;"/>
<linktarget COLOR="#5198bc" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="-91;14;" ID="Arrow_ID_973238030" SOURCE="ID_1391329454" STARTARROW="None" STARTINCLINATION="71;5;"/>
<linktarget COLOR="#4f89b7" DESTINATION="ID_486995126" ENDARROW="Default" ENDINCLINATION="232;35;" ID="Arrow_ID_1502519432" SOURCE="ID_1247362696" STARTARROW="None" STARTINCLINATION="108;-12;"/>
@ -84914,6 +84963,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698595445913" ID="ID_284194667" MODIFIED="1698605519364" TEXT="man mu&#xdf; also stets schon etwas in die Queue geschickt haben, bevor man z&#xfc;ndet">
<arrowlink COLOR="#389bcf" DESTINATION="ID_1513214570" ENDARROW="Default" ENDINCLINATION="365;-28;" ID="Arrow_ID_554717849" STARTARROW="None" STARTINCLINATION="333;12;"/>
<icon BUILTIN="yes"/>
<node COLOR="#690f14" CREATED="1701915349853" HGAP="41" ID="ID_519973068" MODIFIED="1701915415788" TEXT="das ist aber gef&#xe4;hrlich und potentiell widerspr&#xfc;chlich" VSHIFT="3">
<arrowlink COLOR="#87495a" DESTINATION="ID_194380430" ENDARROW="Default" ENDINCLINATION="210;-326;" ID="Arrow_ID_511727500" STARTARROW="None" STARTINCLINATION="-22;145;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698530480307" ID="ID_355476974" MODIFIED="1698541315516" TEXT="Warnung: Selbstschutz vor de-Allokation">
@ -84931,22 +84984,76 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1699325295132" ID="ID_745204926" MODIFIED="1699498276370" TEXT="WorkForce hochfahren">
<linktarget COLOR="#57496c" DESTINATION="ID_745204926" ENDARROW="Default" ENDINCLINATION="249;-377;" ID="Arrow_ID_55492946" SOURCE="ID_1435123962" STARTARROW="None" STARTINCLINATION="668;346;"/>
<linktarget COLOR="#57496c" DESTINATION="ID_745204926" ENDARROW="Default" ENDINCLINATION="239;-525;" ID="Arrow_ID_55492946" SOURCE="ID_1435123962" STARTARROW="None" STARTINCLINATION="668;346;"/>
<linktarget COLOR="#533354" DESTINATION="ID_745204926" ENDARROW="Default" ENDINCLINATION="-41;67;" ID="Arrow_ID_204394164" SOURCE="ID_1772549848" STARTARROW="None" STARTINCLINATION="-125;-5;"/>
<icon BUILTIN="yes"/>
<node CREATED="1699325589332" ID="ID_25430169" MODIFIED="1699325606390" TEXT="WorkForce regelt sich selber herunter bei Leerlauf"/>
<node CREATED="1699325607274" ID="ID_718145429" MODIFIED="1699325631062">
<node CREATED="1699325607274" ID="ID_718145429" MODIFIED="1701918205946">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
daher mu&#223; f&#252;r einen neuen Job ein <i>step up</i>&#160;erfolgen
Scheduler &#10230; laufend und gen&#252;gend Kapazit&#228;t bereitgestellt
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1699325634014" ID="ID_1493688459" MODIFIED="1699325647951" TEXT="bei Bedarf: ignite()"/>
<node COLOR="#435e98" CREATED="1699329449911" HGAP="43" ID="ID_1960065591" MODIFIED="1701918163561" TEXT="Kapazit&#xe4;ts-Regulierung" VSHIFT="1">
<node CREATED="1701918385097" ID="ID_200066393" MODIFIED="1701918406102" TEXT="soll zuverl&#xe4;ssig greifen &#x27f9; mu&#xdf; im Haupteingang h&#xe4;ngen"/>
<node COLOR="#435e98" CREATED="1699329454534" ID="ID_804570173" MODIFIED="1701918072103" TEXT="Bedingungen">
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1699325589332" ID="ID_25430169" MODIFIED="1701918216519" TEXT="WorkForce regelt sich selber herunter bei Leerlauf">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#435e98" CREATED="1699329454534" ID="ID_258337881" MODIFIED="1699372224340" TEXT="Scheduler l&#xe4;uft nicht &#x27f9; ignite()"/>
<node COLOR="#435e98" CREATED="1699329466069" ID="ID_1149902545" MODIFIED="1701918308774" TEXT="unzureichende St&#xe4;rke &#x27f9; step"/>
</node>
<node COLOR="#338800" CREATED="1701918435961" ID="ID_1345306548" MODIFIED="1701924248503" TEXT="vorl&#xe4;ufige/anf&#xe4;ngliche L&#xf6;sung">
<icon BUILTIN="button_ok"/>
<node CREATED="1701918698974" ID="ID_315535111" MODIFIED="1701918743490" TEXT="Schwierigkeiten....">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701918706666" ID="ID_271814852" MODIFIED="1701918717336" TEXT="noch keine Erfahrung mit der G&#xfc;te der Regulierung"/>
<node CREATED="1701918718068" ID="ID_834627609" MODIFIED="1701918728990" TEXT="m&#xf6;glichst keine Festlegung auf feste Zeitma&#xdf;st&#xe4;be"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1701918800592" ID="ID_503202065" MODIFIED="1701918867952" TEXT="Logik fu&#xdf;t nicht auf Prinzipien und ist verwirrend">
<arrowlink COLOR="#fe0d16" DESTINATION="ID_1619713976" ENDARROW="Default" ENDINCLINATION="29;-190;" ID="Arrow_ID_1571604163" STARTARROW="Default" STARTINCLINATION="5;178;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
<node CREATED="1701918907682" ID="ID_1092421317" MODIFIED="1701918943748" TEXT="ignite() on demand &#x2014; sonstige Regulierung &#x27f6; Load-Controller">
<icon BUILTIN="yes"/>
<node CREATED="1701918965842" ID="ID_1066608394" MODIFIED="1701919053878" TEXT="ich m&#xf6;chte unbedingt die automatische selbst-Z&#xfc;ndung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
warum....? wei&#223; nicht, Bauchgef&#252;hl.
</p>
<p>
Ich m&#246;chte nicht mit Einzelfall-Analysen belegen, wann der Scheduler gestartet werden soll. Der Ruhe-Zustand, wie auch der Neuanlauf sollten von au&#223;en praktisch nicht erkennbar sein (bis auf die Verz&#246;gerung)
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701919064813" ID="ID_1765985481" MODIFIED="1701919080522" TEXT="das bedeutet aber Gefahr von Logik-Zyklen">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701924140494" ID="ID_571821638" MODIFIED="1701924243886" TEXT="Regulierung">
<icon BUILTIN="info"/>
<node CREATED="1701924147938" ID="ID_875004902" MODIFIED="1701924170946" TEXT="jeder neue Job ruft eine Pr&#xfc;f-Routine auf"/>
<node CREATED="1701924171746" ID="ID_467001794" MODIFIED="1701924192199" TEXT="wenn Job &gt; 2*SLEEP_HORIZON &#x27f6; abwarten und Tee trinken"/>
<node CREATED="1701924194019" ID="ID_499584283" MODIFIED="1701924214404" TEXT="sonst: wenn Lag auff&#xe4;lli &#x27f6; einen Step hoch"/>
<node CREATED="1701924214921" ID="ID_208299017" MODIFIED="1701924234909" TEXT="Lag nun auch im DutyCycle-TIck beobachten &#x27f6; ggfs +4 hochskalieren"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1701918445429" ID="ID_1603848355" MODIFIED="1701918688685" TEXT="weiterentwickeln....">
<arrowlink COLOR="#5c3f90" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="-741;-969;" ID="Arrow_ID_1272080167" STARTARROW="None" STARTINCLINATION="-301;37;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1697982436029" ID="ID_288711039" MODIFIED="1698808212796" TEXT="Test">
@ -84962,7 +85069,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1698372200013" FOLDED="true" ID="ID_1863445864" MODIFIED="1698808416494" TEXT="Scheduler start/stop">
<node COLOR="#338800" CREATED="1698372200013" FOLDED="true" ID="ID_1863445864" MODIFIED="1701905709724" TEXT="Scheduler start/stop">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1698372207398" ID="ID_1110932778" MODIFIED="1698808364649" TEXT="braucht Integration mit LoadController">
<arrowlink COLOR="#5898af" DESTINATION="ID_210862409" ENDARROW="Default" ENDINCLINATION="-33;645;" ID="Arrow_ID_204955453" STARTARROW="None" STARTINCLINATION="250;17;"/>
@ -85011,6 +85118,51 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1698523751770" ID="ID_903457471" MODIFIED="1698523767446" TEXT="(WorkForce wird sich selbst nach 2sec herunterregeln)"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701906701612" ID="ID_1389784071" MODIFIED="1701906776935" TEXT="funktioniert noch nicht zuverl&#xe4;ssig">
<arrowlink COLOR="#a77e85" DESTINATION="ID_898143170" ENDARROW="Default" ENDINCLINATION="-831;-59;" ID="Arrow_ID_1502844092" STARTARROW="None" STARTINCLINATION="-1185;94;"/>
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#e4c870" COLOR="#fa002a" CREATED="1701907642039" ID="ID_1619713976" MODIFIED="1701918862486" TEXT="&#x21af; Logik-Fehler: empty() &#x27f9; empty()">
<linktarget COLOR="#fd2b3a" DESTINATION="ID_1619713976" ENDARROW="Default" ENDINCLINATION="788;62;" ID="Arrow_ID_1213072769" SOURCE="ID_115665967" STARTARROW="None" STARTINCLINATION="-354;-19;"/>
<linktarget COLOR="#fe0d16" DESTINATION="ID_1619713976" ENDARROW="Default" ENDINCLINATION="29;-190;" ID="Arrow_ID_1571604163" SOURCE="ID_503202065" STARTARROW="Default" STARTINCLINATION="5;178;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1701913172757" ID="ID_194380430" MODIFIED="1701915406636" TEXT="das m&#xfc;ssen wir explizit durchbrechen">
<linktarget COLOR="#87495a" DESTINATION="ID_194380430" ENDARROW="Default" ENDINCLINATION="210;-326;" ID="Arrow_ID_511727500" SOURCE="ID_519973068" STARTARROW="None" STARTINCLINATION="-22;145;"/>
<icon BUILTIN="yes"/>
<node COLOR="#338800" CREATED="1701919666532" ID="ID_20381088" MODIFIED="1701923151529" TEXT="Selbst-Regulierung und explizites Hochfahren sind zu unterscheiden">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701919695937" ID="ID_926004117" MODIFIED="1701923154403" TEXT="darf seinerseits nicht wieder auf die Laststeuerung zur&#xfc;ckwirken &#x27f9; Hintert&#xfc;r verwenden">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701913194002" HGAP="61" ID="ID_142177224" MODIFIED="1701919722579" TEXT="f&#xfc;hre Hilfs-Parameter in Duty-Cycle ein" VSHIFT="-14">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701908562203" ID="ID_1609424678" MODIFIED="1701923255116" TEXT="der erste Meta-Job l&#xe4;uft direkt im aktuellen Thread durch">
<arrowlink COLOR="#fe3a92" DESTINATION="ID_1540450354" ENDARROW="Default" ENDINCLINATION="-276;439;" ID="Arrow_ID_1046045680" STARTARROW="None" STARTINCLINATION="329;-15;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701909401349" ID="ID_335260748" MODIFIED="1701909415663" TEXT="und das f&#xfc;hrt zu unn&#xf6;tigen Umwegen"/>
<node CREATED="1701909416532" ID="ID_832756142" MODIFIED="1701909424536" TEXT="und ggfs sogar zum Deadlock">
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1701923256179" ID="ID_1254835545" MODIFIED="1701923346545" TEXT="Ma&#xdf;nahmen">
<icon BUILTIN="idea"/>
<node COLOR="#338800" CREATED="1701923327018" ID="ID_1199123453" MODIFIED="1701923395602" TEXT="ersten Job mit SEED_CALC_OFFSET(250&#xb5;s) starten">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701923262858" ID="ID_12809390" MODIFIED="1701923339094" TEXT="vorl&#xe4;ufige/einfache Load-Regulierung eingef&#xfc;hrt">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701923282551" ID="ID_255624260" MODIFIED="1701923339093" TEXT="ignite() l&#xf6;st explizit Duty-Cycle aus">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701923303140" ID="ID_1723619656" MODIFIED="1701923339093" TEXT="Duty-Cycle re-Schedule wirkt nicht auf Laststeuerung zur&#xfc;ck">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1698522492081" ID="ID_1777263362" MODIFIED="1698604971384" TEXT="terminateProcessing &#xd83e;&#xdc32; Gewalt!">
<icon BUILTIN="button_ok"/>
@ -95697,8 +95849,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#8b3852" DESTINATION="ID_1102639659" ENDARROW="Default" ENDINCLINATION="-668;-47;" ID="Arrow_ID_1600823738" SOURCE="ID_404036572" STARTARROW="None" STARTINCLINATION="-1058;51;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693238508625" ID="ID_1960804622" MODIFIED="1693238729301" TEXT="Ermitteln der Engine-Kapazit&#xe4;t und Last">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693238508625" ID="ID_1960804622" MODIFIED="1701918688685" TEXT="Ermitteln der Engine-Kapazit&#xe4;t und Last">
<linktarget COLOR="#965d71" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="286;89;" ID="Arrow_ID_494620026" SOURCE="ID_1196672113" STARTARROW="None" STARTINCLINATION="2087;110;"/>
<linktarget COLOR="#5c3f90" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="-741;-969;" ID="Arrow_ID_1272080167" SOURCE="ID_1603848355" STARTARROW="None" STARTINCLINATION="-301;37;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693238523855" ID="ID_1212740184" MODIFIED="1693238599374" TEXT="#1325 Chained Deadlines based on capacity">
<linktarget COLOR="#e7367a" DESTINATION="ID_1212740184" ENDARROW="Default" ENDINCLINATION="12;-24;" ID="Arrow_ID_1622880291" SOURCE="ID_917322834" STARTARROW="None" STARTINCLINATION="104;5;"/>
@ -95731,6 +95884,49 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1688336311659" ID="ID_1968961000" MODIFIED="1688337255857" TEXT="Scheduler aufbauen">
<arrowlink COLOR="#fe3a58" DESTINATION="ID_323523273" ENDARROW="Default" ENDINCLINATION="-167;17;" ID="Arrow_ID_589297136" STARTARROW="None" STARTINCLINATION="-139;-149;"/>
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1701906035613" ID="ID_1194019696" MODIFIED="1701906045539" TEXT="Memory-Manager entwickeln">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701906046297" ID="ID_1220548701" MODIFIED="1701906054828" TEXT="Activity-Language aufbauen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701906056053" ID="ID_1003427208" MODIFIED="1701906065159" TEXT="Scheduler implementieren">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701906066106" ID="ID_424174148" MODIFIED="1701906077289" TEXT="Scheduler-Funktionstest">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701906105012" ID="ID_729619994" MODIFIED="1701906725490" TEXT="TestChainLoad entwickeln">
<icon BUILTIN="pencil"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701906154358" ID="ID_439708583" MODIFIED="1701906163997" TEXT="einfacher Funktionstest">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1701906177051" ID="ID_471638542" MODIFIED="1701906193332" TEXT="grunds&#xe4;tzlich: Scheduling + Lebenszyklus funktioniert">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701906207551" ID="ID_871293537" MODIFIED="1701906232476" TEXT="Problem Gate-Reschedule">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701906235780" ID="ID_592712385" MODIFIED="1701906357352" TEXT="erzeugt zus&#xe4;tzliche unn&#xf6;tige Last">
<arrowlink COLOR="#803055" DESTINATION="ID_151250915" ENDARROW="Default" ENDINCLINATION="36;-166;" ID="Arrow_ID_59026636" STARTARROW="None" STARTINCLINATION="372;30;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1701906369489" ID="ID_481308712" MODIFIED="1701906446732" TEXT="Feature zur&#xfc;ckbauen">
<arrowlink COLOR="#7f2e8d" DESTINATION="ID_441526961" ENDARROW="Default" ENDINCLINATION="-237;-146;" ID="Arrow_ID_888469229" STARTARROW="None" STARTINCLINATION="-914;101;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1701906481921" ID="ID_898143170" MODIFIED="1701906776935" TEXT="ignite() / Hochfahren unzuverl&#xe4;ssig">
<linktarget COLOR="#a77e85" DESTINATION="ID_898143170" ENDARROW="Default" ENDINCLINATION="-831;-59;" ID="Arrow_ID_1502844092" SOURCE="ID_1389784071" STARTARROW="None" STARTINCLINATION="-1185;94;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1701906517189" ID="ID_977051135" MODIFIED="1701906665743" TEXT="Fall: zu Beginn nur wenige sofort f&#xe4;llige Jobs">
<arrowlink COLOR="#5c468c" DESTINATION="ID_759675868" ENDARROW="Default" ENDINCLINATION="-72;-107;" ID="Arrow_ID_845853929" STARTARROW="None" STARTINCLINATION="424;27;"/>
<icon BUILTIN="forward"/>
</node>
<node CREATED="1701907775997" ID="ID_1831372437" MODIFIED="1701907798583" TEXT="zirkul&#xe4;re Logik: ignite() setzt not empty() vorraus">
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1688336317130" ID="ID_1362196370" MODIFIED="1688336503785" TEXT="Scheduler+Dispatcher">
<icon BUILTIN="hourglass"/>
@ -100616,7 +100812,31 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1701493003512" ID="ID_436816851" MODIFIED="1701493015501" TEXT="die Closure aus dem Meta-Job weckt uns dann wieder auf"/>
</node>
<node CREATED="1701805794013" ID="ID_377567761" MODIFIED="1701805803843" TEXT="noch besser: ein Future">
<arrowlink COLOR="#4072d3" DESTINATION="ID_816422737" ENDARROW="Default" ENDINCLINATION="-1428;187;" ID="Arrow_ID_215914555" STARTARROW="None" STARTINCLINATION="-452;47;"/>
<icon BUILTIN="forward"/>
<node CREATED="1701901225907" ID="ID_1301399592" MODIFIED="1701901320988">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Promise <i>mu&#223; wirklich vor </i>dem Start-Trigger vorbereitet werden
</p>
</body>
</html></richcontent>
<linktarget COLOR="#da1d39" DESTINATION="ID_1301399592" ENDARROW="Default" ENDINCLINATION="774;34;" ID="Arrow_ID_1712682891" SOURCE="ID_296648181" STARTARROW="None" STARTINCLINATION="422;19;"/>
<node COLOR="#5b280f" CREATED="1701901329134" HGAP="45" ID="ID_395706736" LINK="#ID_676583243" MODIFIED="1701901485230" TEXT="&#xbb;probing&#xab; eines Future ist schwierig">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...ich erinnere mich: man mu&#223; mit 0-Timeout darauf warten und das bedingt mindestens einen yield-wait
</p>
</body>
</html></richcontent>
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node CREATED="1701901238705" ID="ID_1971931619" MODIFIED="1701901252755" TEXT="danach das Future beziehen und darauf mit Timeout blocken"/>
</node>
</node>
</node>
@ -101041,6 +101261,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
<node CREATED="1701913043245" ID="ID_445438847" MODIFIED="1701913147737" TEXT="bessere Steuerung des Completion-Callback">
<linktarget COLOR="#c62f45" DESTINATION="ID_445438847" ENDARROW="Default" ENDINCLINATION="-1207;75;" ID="Arrow_ID_1132943593" SOURCE="ID_1739832819" STARTARROW="None" STARTINCLINATION="-73;-483;"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701814806243" ID="ID_1359675923" MODIFIED="1701823453699" TEXT="Job-Funktoren">
<icon BUILTIN="button_ok"/>
@ -101128,6 +101351,152 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1701838598906" ID="ID_1235285916" MODIFIED="1701838619227" TEXT="bleibt h&#xe4;ngen &#x27f6; Timeout">
<icon BUILTIN="broken-line"/>
<node CREATED="1701843677557" ID="ID_619867364" MODIFIED="1701879688239" TEXT="offensichtlicher Fehler: mu&#xdf; dem ersten Plan-Job nat&#xfc;rlich einen Offset geben">
<arrowlink COLOR="#3c5b80" DESTINATION="ID_1631524816" ENDARROW="Default" ENDINCLINATION="84;-7;" ID="Arrow_ID_1725054435" STARTARROW="None" STARTINCLINATION="80;3;"/>
<node COLOR="#338800" CREATED="1701900943218" HGAP="39" ID="ID_1117609340" MODIFIED="1701900956080" TEXT="planningJob(calcNextLevel(0)-1)" VSHIFT="-1">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701843700258" ID="ID_1562297081" MODIFIED="1701843730631" TEXT="aber dennoch sollte dann der Lauf irgendwann starten (dann halt 64ms sp&#xe4;ter)">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701906561917" ID="ID_759675868" MODIFIED="1701906661639" TEXT="Situation: nur wenige Jobs zu Beginn &#x2014; und die wedern sofort dispatched">
<linktarget COLOR="#5c468c" DESTINATION="ID_759675868" ENDARROW="Default" ENDINCLINATION="-72;-107;" ID="Arrow_ID_845853929" SOURCE="ID_977051135" STARTARROW="None" STARTINCLINATION="424;27;"/>
<icon BUILTIN="list"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701905467603" ID="ID_1228596999" MODIFIED="1701905493760" TEXT="Beobachtung: ignite() jedes mal wieder aufgerufen">
<icon BUILTIN="broken-line"/>
<node CREATED="1701906796495" ID="ID_220806323" MODIFIED="1701906806642" TEXT="workForce.size() == 0 danach"/>
<node CREATED="1701907365572" ID="ID_1847639785" MODIFIED="1701912945784" TEXT="empty() beim Einstieg in DutyCycle">
<linktarget COLOR="#7a6eac" DESTINATION="ID_1847639785" ENDARROW="Default" ENDINCLINATION="-416;32;" ID="Arrow_ID_703514790" SOURCE="ID_1836573121" STARTARROW="None" STARTINCLINATION="472;-21;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1701907385681" ID="ID_1301977147" MODIFIED="1701907402363" TEXT="Konsequenz : wird als Leerlauf eingestuft"/>
<node CREATED="1701907402920" ID="ID_1132515756" MODIFIED="1701907405994" TEXT="kein weiterer Tick"/>
<node CREATED="1701907406558" ID="ID_907269737" MODIFIED="1701907410946" TEXT="Queue bleibt empty()"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701907419599" ID="ID_115665967" MODIFIED="1701907740463" TEXT="und empty() &#x27f9; WorkForce startet nicht">
<arrowlink COLOR="#fd2b3a" DESTINATION="ID_1619713976" ENDARROW="Default" ENDINCLINATION="788;62;" ID="Arrow_ID_1213072769" STARTARROW="None" STARTINCLINATION="-354;-19;"/>
<icon BUILTIN="clanbomber"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701900872050" ID="ID_693907147" MODIFIED="1701900908502" TEXT="Exception &quot;Promise already satisfied&quot;">
<icon BUILTIN="broken-line"/>
<node CREATED="1701900913850" ID="ID_1004033455" MODIFIED="1701900920193" TEXT="sichtbar nach dem ersten Bugfix"/>
<node CREATED="1701900969591" ID="ID_1945329018" MODIFIED="1701900982346" TEXT="tritt auf unmittelbar nach dem Planen des 1.Chunk"/>
<node COLOR="#435e98" CREATED="1701900983035" ID="ID_746297244" MODIFIED="1701912823730" TEXT="okok... es gibt nur einen Chunk in dem Fall">
<icon BUILTIN="broken-line"/>
<node CREATED="1701901018802" ID="ID_239413878" MODIFIED="1701901044176" TEXT="Vorbereiten / Einrichten des Promise passiert zu sp&#xe4;t"/>
<node CREATED="1701901107281" ID="ID_1104641878" MODIFIED="1701901150399" TEXT="das &#x201e;leere&#x201c; Signal ist zu dem Zeitpunkt bereits ausgel&#xf6;st &#x27f9; &#x21af;"/>
<node CREATED="1701901044876" ID="ID_620180367" MODIFIED="1701901051445" TEXT="zu dem Zeitpunkt sind wir bereits fertig"/>
<node CREATED="1701901159778" ID="ID_296648181" MODIFIED="1701901320988">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Nebeneinsicht: darf nur ein <i>wirklich leeres</i>&#160;Signal kaputt schie&#223;en
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#da1d39" DESTINATION="ID_1301399592" ENDARROW="Default" ENDINCLINATION="774;34;" ID="Arrow_ID_1712682891" STARTARROW="None" STARTINCLINATION="422;19;"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701912837373" ID="ID_1794042147" MODIFIED="1701912855150" TEXT="L&#xf6;sung: vorher abholen und gar nicht kaputt schie&#xdf;en">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1701879543468" ID="ID_1818772058" MODIFIED="1701879550999" TEXT="Beobachtung Scheduler-Gesamtverhalten">
<node COLOR="#338800" CREATED="1701879552131" ID="ID_1345942591" MODIFIED="1701879620762" TEXT="gemeinsame Time-Basis im DUMP-Log herstellen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Hilfsfunktion, die beim ersten Aufruf den Bezugspunkt setzt. Daf&#252;r sorgen, da&#223; dieser erste Aufruf den Anker-Punkt anfragt. Hilfsfunktion gibt dann &#181;s nach Anker aus
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1701879626927" ID="ID_1631524816" MODIFIED="1701879689822" TEXT="Beobachtungen (nach 1.Bugfix)">
<linktarget COLOR="#3c5b80" DESTINATION="ID_1631524816" ENDARROW="Default" ENDINCLINATION="84;-7;" ID="Arrow_ID_1725054435" SOURCE="ID_619867364" STARTARROW="None" STARTINCLINATION="80;3;"/>
<node CREATED="1701879701687" ID="ID_1371839432" MODIFIED="1701879712753" TEXT="Planung + Scheduling braucht seine Zeit">
<node CREATED="1701879715209" ID="ID_348218081" MODIFIED="1701879728099" TEXT="die 64 Jobs brauchen 7ms zur Planung"/>
<node CREATED="1701879754394" ID="ID_48690000" MODIFIED="1701879766466" TEXT="Einzelbeobachtung deutet auch auf ~100&#xb5;s hin"/>
<node CREATED="1701879774593" ID="ID_1372474269" MODIFIED="1701881055424">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
&#10233; der pre-Roll ist <b>wesentlich</b>&#160;zu kurz
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#df2e4b" DESTINATION="ID_1285649422" ENDARROW="Default" ENDINCLINATION="67;0;" ID="Arrow_ID_1426953607" STARTARROW="None" STARTINCLINATION="-2;38;"/>
</node>
</node>
<node CREATED="1701879839628" ID="ID_576613689" MODIFIED="1701879852847" TEXT="wir bekommen hier 16 Level -&gt; 16ms"/>
</node>
<node CREATED="1701881012424" ID="ID_1173195975" MODIFIED="1701881019723" TEXT="einige Jobs laufen nicht">
<node CREATED="1701881022535" ID="ID_1285649422" MODIFIED="1701881051273" TEXT="Vermutung: die werden durch fehlende Dependencies geblockt">
<linktarget COLOR="#df2e4b" DESTINATION="ID_1285649422" ENDARROW="Default" ENDINCLINATION="67;0;" ID="Arrow_ID_1426953607" SOURCE="ID_1372474269" STARTARROW="None" STARTINCLINATION="-2;38;"/>
</node>
<node CREATED="1701881068248" ID="ID_1827795881" MODIFIED="1701881077251" TEXT="in einem Einzelfall best&#xe4;tigt">
<node CREATED="1701881078359" ID="ID_1962795672" MODIFIED="1701882948416" TEXT="der Nachfolger wird gescheduled, nachdem der Vorl&#xe4;ufer bereits aktiviert wurde">
<arrowlink COLOR="#b6748f" DESTINATION="ID_1329903920" ENDARROW="Default" ENDINCLINATION="2455;-1843;" ID="Arrow_ID_422407251" STARTARROW="None" STARTINCLINATION="294;11;"/>
</node>
<node CREATED="1701881117570" ID="ID_1560387406" MODIFIED="1701881164304" TEXT="alle Nodes, die im betroffenen Teilgraphen liegen, fehlen im Log">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Graph als DOT anschauen, ist ja reproduzierbar und enth&#228;lt die Node-IDs
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1701881179159" ID="ID_1845367145" MODIFIED="1701881200379" TEXT="das w&#xfc;rde auch die vielen sonderbar kurummen Schedules / Head-Times erkl&#xe4;ren">
<node CREATED="1701881202174" ID="ID_1765434890" MODIFIED="1701881210203" TEXT="das ist der aktive Dependency-Wait">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1701881769919" ID="ID_151250915" MODIFIED="1701906357352" TEXT="das werden sukzessive immer mehr">
<linktarget COLOR="#803055" DESTINATION="ID_151250915" ENDARROW="Default" ENDINCLINATION="36;-166;" ID="Arrow_ID_59026636" SOURCE="ID_592712385" STARTARROW="None" STARTINCLINATION="372;30;"/>
<node CREATED="1701881804925" ID="ID_747214446" MODIFIED="1701881818175" TEXT="sie werden dann zwar immer hinter die &#xbb;hei&#xdf;en&#xab; Jobs verschoben"/>
<node CREATED="1701881818739" ID="ID_610188573" MODIFIED="1701881833464" TEXT="aber die Abarbeitung bindet dort Kapazit&#xe4;t"/>
</node>
<node CREATED="1701881211253" ID="ID_1126056119" MODIFIED="1701881790492" TEXT="&#x27f9; zeigt nochmal, da&#xdf; wir den (aktuell) nicht brauchen">
<arrowlink COLOR="#fd2951" DESTINATION="ID_1419536205" ENDARROW="Default" ENDINCLINATION="384;-33;" ID="Arrow_ID_676818938" STARTARROW="None" STARTINCLINATION="-211;12;"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1701912890618" ID="ID_1069989280" MODIFIED="1701912903449" TEXT="weitere Beobachtungen">
<icon BUILTIN="list"/>
<node CREATED="1701912907770" ID="ID_1836573121" MODIFIED="1701912959333" TEXT="startup / ignite() immer noch nicht sauber">
<arrowlink COLOR="#7a6eac" DESTINATION="ID_1847639785" ENDARROW="Default" ENDINCLINATION="-416;32;" ID="Arrow_ID_703514790" STARTARROW="None" STARTINCLINATION="472;-21;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1701912974750" ID="ID_1155210741" MODIFIED="1701912984629" TEXT="Lauf endet zu fr&#xfc;h">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701912990060" ID="ID_1739832819" MODIFIED="1701913150431" TEXT="Callback / wake-up passiert nach letztem Planungs-Chunk">
<arrowlink COLOR="#c62f45" DESTINATION="ID_445438847" ENDARROW="Default" ENDINCLINATION="-1207;75;" ID="Arrow_ID_1132943593" STARTARROW="None" STARTINCLINATION="-73;-483;"/>
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1701913012497" ID="ID_926682409" MODIFIED="1701913026475" TEXT="die restlichen Jobs werden dann zusammen mit dem Scheduler abgew&#xfc;rgt"/>
</node>
</node>
</node>
</node>
@ -102270,8 +102639,72 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_1514365592" MODIFIED="1693501314685" TEXT="mu&#xdf; sich das Gate selbst re-triggern?">
<arrowlink COLOR="#9671cb" DESTINATION="ID_1878976712" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_1465904567" STARTARROW="None" STARTINCLINATION="624;46;"/>
<icon BUILTIN="help"/>
<node CREATED="1701881472367" HGAP="51" ID="ID_781800145" LINK="#ID_1173195975" MODIFIED="1701881532578" TEXT="Beobachtungen bei Integrationstest" VSHIFT="-3">
<node CREATED="1701881485084" ID="ID_489329965" MODIFIED="1701881495050" TEXT="vers&#xe4;umte Dependencies"/>
<node CREATED="1701881495512" ID="ID_493533202" MODIFIED="1701881503806" TEXT="verursachen viel re-Scheduling"/>
<node CREATED="1701881504453" ID="ID_140918266" MODIFIED="1701881508775" TEXT="kommen nie zum Zug"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_131095214" MODIFIED="1693501311725" TEXT="Integration von async-IO, Memory-Manager und Job-Planning">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701881732254" HGAP="34" ID="ID_1419536205" MODIFIED="1701881866754" TEXT="st&#xf6;rt die Kapazit&#xe4;tssteuerung">
<linktarget COLOR="#fd2951" DESTINATION="ID_1419536205" ENDARROW="Default" ENDINCLINATION="384;-33;" ID="Arrow_ID_676818938" SOURCE="ID_1126056119" STARTARROW="None" STARTINCLINATION="-211;12;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701881918852" ID="ID_1586334243" MODIFIED="1701881934143" TEXT="diese re-Schedules bleiben bis zur Deadline am Leben"/>
<node CREATED="1701882125719" ID="ID_819275916" MODIFIED="1701882163401" TEXT="re-Schedule derzeit konfiguriert auf 1ms (POLL_WAIT_DELAY)"/>
<node CREATED="1701882199696" ID="ID_978437089" MODIFIED="1701882219601" TEXT="realistische Deadlines liegen im Bereich 10..100ms"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701882221309" ID="ID_1636417837" MODIFIED="1701882277390" TEXT="gef&#xe4;hrlich oft unn&#xf6;tige Aufrufe">
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1701882279733" ID="ID_806964435" MODIFIED="1701882314270" TEXT="t&#xe4;uscht einen falschen Fokus vor">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701882315932" ID="ID_315908114" MODIFIED="1701882326531" TEXT="Kapazit&#xe4;t wird relativ nah konzentriert"/>
<node CREATED="1701882327169" ID="ID_1392862868" MODIFIED="1701882351657" TEXT="nur um dann nach Abarbeitung des &#xbb;backlog&#xab; nach hinten geschoben zu werden"/>
<node CREATED="1701882361576" ID="ID_1442219035" MODIFIED="1701882370437" TEXT="erzeugt Contention"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701882376639" ID="ID_441526961" MODIFIED="1701906446732" TEXT="Fazit: Feature zur&#xfc;ckbauen">
<linktarget COLOR="#7f2e8d" DESTINATION="ID_441526961" ENDARROW="Default" ENDINCLINATION="-237;-146;" ID="Arrow_ID_888469229" SOURCE="ID_481308712" STARTARROW="None" STARTINCLINATION="-914;101;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1701882467764" ID="ID_694134930" MODIFIED="1701882478850" TEXT="Umgang mit vers&#xe4;umten Dependencies">
<icon BUILTIN="help"/>
<node CREATED="1701882531875" ID="ID_581885737" MODIFIED="1701882807636">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Wie viel <b>dedizierte Logik</b>&#160;ist hierf&#252;r sinnvoll?
</p>
</body>
</html>
</richcontent>
</node>
<node COLOR="#5b280f" CREATED="1701882558247" ID="ID_726523132" MODIFIED="1701882657393" TEXT="Prerequisite vers&#xe4;umt Deadline &#x27f9; eigentlich k&#xf6;nnten alle Dependencies weg">
<icon BUILTIN="button_cancel"/>
<node CREATED="1701882585540" ID="ID_242177915" MODIFIED="1701882599138" TEXT="nach R&#xfc;ckbau des re-Triggerns erzeugen diese aber keine Last mehr"/>
<node CREATED="1701882600114" ID="ID_1938282427" MODIFIED="1701882623098" TEXT="sie haben kein aktives Schedule mehr nach der einen, geplanten Pr&#xfc;fung"/>
<node CREATED="1701882625174" ID="ID_1419358212" MODIFIED="1701882635585" TEXT="Speicher ist bis zur Deadline ohnehin gebunden"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1701882641496" ID="ID_1522413862" MODIFIED="1701882652973" TEXT="Konsequenz: ist den Aufwand nicht wert">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701882658828" ID="ID_1329903920" MODIFIED="1701882948417" TEXT="Dependency wird zu sp&#xe4;t aufgeschaltet">
<linktarget COLOR="#b6748f" DESTINATION="ID_1329903920" ENDARROW="Default" ENDINCLINATION="2455;-1843;" ID="Arrow_ID_422407251" SOURCE="ID_1962795672" STARTARROW="None" STARTINCLINATION="294;11;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701882681233" ID="ID_267891495" MODIFIED="1701882689953" TEXT="Vorl&#xe4;ufer ist schon gelaufen"/>
<node CREATED="1701882690662" ID="ID_651288637" MODIFIED="1701882697633" TEXT="daher wird diese Dependency niemals triggern"/>
<node CREATED="1701882710948" ID="ID_926930938" MODIFIED="1701882725045" TEXT="k&#xf6;nnte aber, sofern Vorl&#xe4;ufer und Nachfolger im Zeitfenster liegen"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701882744143" ID="ID_1400921481" MODIFIED="1701882760236" TEXT="Problem: aktuell markieren wir ausgef&#xfc;hrte Jobs nirgends">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1701882768723" ID="ID_1900494324" MODIFIED="1701882778506" TEXT="zu kl&#xe4;ren: tritt der Fall h&#xe4;ufig auf?">
<icon BUILTIN="help"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_131095214" MODIFIED="1701906395747" TEXT="Integration von async-IO, Memory-Manager und Job-Planning">
<arrowlink COLOR="#9671cb" DESTINATION="ID_1766311350" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_972754095" STARTARROW="None" STARTINCLINATION="469;21;"/>
<icon BUILTIN="help"/>
</node>
@ -108285,6 +108718,97 @@ class Something
</node>
</node>
</node>
<node CREATED="1701901627094" FOLDED="true" ID="ID_816422737" MODIFIED="1701904554392" TEXT="Future/Promise">
<linktarget COLOR="#4072d3" DESTINATION="ID_816422737" ENDARROW="Default" ENDINCLINATION="-1428;187;" ID="Arrow_ID_215914555" SOURCE="ID_377567761" STARTARROW="None" STARTINCLINATION="-452;47;"/>
<icon BUILTIN="info"/>
<node CREATED="1701901733336" ID="ID_1146651907" MODIFIED="1701904435547" TEXT="Zusammenfassung Funktionsweise">
<icon BUILTIN="back"/>
<node CREATED="1701901747422" ID="ID_1745055222" MODIFIED="1701901766298">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
es ist ein <b>einmal-Kommunikationskanal</b>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701901788161" ID="ID_1901914108" MODIFIED="1701901826496" TEXT="verwendet einen &#xbb;schwebenden&#xab; shared-State (mit ref-counting)"/>
<node CREATED="1701901862970" ID="ID_961345981" MODIFIED="1701901891669" TEXT="daran k&#xf6;nnen Endpunkte angekoppelt sein">
<node CREATED="1701901892688" ID="ID_1307729109" MODIFIED="1701901911891" TEXT="maximal ein Promise (&#x2259; Sende-Eingang)"/>
<node CREATED="1701901913138" ID="ID_1729321115" MODIFIED="1701901922922" TEXT="mehrere Future (&#x2259; Empfangs-Ausgang)">
<node CREATED="1701901974663" ID="ID_1653144428" MODIFIED="1701901989361" TEXT="mehrere normale Futures: race/undefined"/>
<node CREATED="1701901989973" ID="ID_240036826" MODIFIED="1701902012669" TEXT="mehere Shared-Futures: OK aber mu&#xdf; ggfs synchronisieren"/>
</node>
<node CREATED="1701902015130" ID="ID_382878284" MODIFIED="1701903437501">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Endpunkte werden normalerweise <b>vorher erstellt</b>
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...will sagen, bevor die <i>&#187;concurrent operation&#171;</i>&#160;&#252;berhaupt beginnt; also beispielsweise bevor man einen Worker-Thread startet, ist zumindest der Promise (und damit der shared-state) schon erzeugt. Ein Future kann man dann sp&#228;ter davon ableiten (is clearly sequenced). Wenn man Endpunkte <i>&#252;ber Thread-Grenzen hinweg weitereichen m&#246;chte, ist das nicht durch den Future-Promise-Mechanismus gedeckt</i>&#160;und mu&#223; anderweitig konventionell synchronisiert werden.
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node CREATED="1701903438798" ID="ID_376641362" MODIFIED="1701904439792" TEXT="Einschr&#xe4;nkungen / Schwierigkeiten">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701903449894" ID="ID_497690286" MODIFIED="1701903458951" TEXT="nur f&#xfc;r Einmal-Gebrauch gedacht">
<node CREATED="1701904398801" ID="ID_1577256090" MODIFIED="1701904413667" TEXT="Workaround: swap-with-other state">
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1701904375228" ID="ID_1306244668" MODIFIED="1701904387719" TEXT="nur sinnvoll f&#xfc;r einen klar vorgezeichneten Ablauf"/>
<node CREATED="1701903508079" ID="ID_1669408380" MODIFIED="1701903517609" TEXT="inh&#xe4;renter Zustand (fast) nicht feststellbar">
<node CREATED="1701903521725" ID="ID_1010633385" MODIFIED="1701903529807" TEXT="entweder es geht, oder es knallt"/>
<node CREATED="1701903549377" ID="ID_1896335001" MODIFIED="1701903580304" TEXT="nur feststellbar, ob &#xfc;berhaupt ein shared-State dran h&#xe4;ngt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
also ein shared_ptr != null
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1701903583565" ID="ID_852832770" MODIFIED="1701903604149" TEXT="keine M&#xf6;glichkeit, das Blocken zu vermeiden">
<node CREATED="1701903606317" ID="ID_385860882" MODIFIED="1701903614600" TEXT="man kann mit Timeout=0 warten">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1701903615685" ID="ID_444469863" MODIFIED="1701903621188" TEXT="danach hat man einen Status-Wert"/>
<node CREATED="1701903622215" ID="ID_410518163" MODIFIED="1701903629171" TEXT="aber das ist mindestends ein yield-Wait"/>
</node>
</node>
<node CREATED="1701904473527" ID="ID_1393748325" MODIFIED="1701904488745" TEXT="Aufwand/Kosten: mittel">
<node CREATED="1701904494405" ID="ID_1966799888" MODIFIED="1701904502719" TEXT="kein Impact auf andere Threads"/>
<node CREATED="1701904503427" ID="ID_1208579697" MODIFIED="1701904520166" TEXT="aber Kosten im aktuellen Thread ">
<node CREATED="1701904524001" ID="ID_256689512" MODIFIED="1701904531555" TEXT="Kernel-Aufruf: FUTEX"/>
<node CREATED="1701904538735" ID="ID_1605048374" MODIFIED="1701904551033" TEXT="Zugriff auf einen shared-State (Heap) mit Ref-counting"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1688166034962" ID="ID_1200591959" MODIFIED="1688166143670" TEXT="Async IO">
<linktarget COLOR="#375880" DESTINATION="ID_1200591959" ENDARROW="Default" ENDINCLINATION="-1794;532;" ID="Arrow_ID_1852326782" SOURCE="ID_671880878" STARTARROW="None" STARTINCLINATION="-1625;-156;"/>