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:
parent
21fbe09ee0
commit
fa86228057
5 changed files with 591 additions and 40 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -81251,6 +81251,10 @@ Date:   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ß: nicht nur sinnlos, sogar gefährlich ⟹ zurü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:   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ß Kapazität prü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ß Kapazität prü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ärke wird berü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äuft nicht ⟹ ignite()"/>
|
||||
<node COLOR="#435e98" CREATED="1699329466069" ID="ID_1149902545" MODIFIED="1699372224340" TEXT="nicht volle Stärke ⟹ step"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1699372253576" ID="ID_869013268" MODIFIED="1699372262575" TEXT="Implementierung in postChain eingehä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:   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 »now«"/>
|
||||
<node CREATED="1699568239935" ID="ID_1918919265" MODIFIED="1699568264056" TEXT="Start-Offset ist per default »now«">
|
||||
<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ä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äg </i>— wenngleich es sicher gut ist, daß aus Konsistenzgründen <i>sogar der aktuelle Thread </i>ein Stück Arbeit machen <i>kö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 »start-Ankers« logisch davon unabhängig ist, von wo aus das läuft; und wenn man den Anker explizit auf etwas setzen mö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ährlich, kann aber zum Deadlock fü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ächst einmal <b>leer
|
||||
durchfällt</b></i>
|
||||
</li>
|
||||
<li>
|
||||
demzufolge wird außer dem aktuellen Job nichts „abgeworfen“
|
||||
</li>
|
||||
<li>
|
||||
und dann fährt der Scheduler überhaupt nicht hoch
|
||||
</li>
|
||||
<li>
|
||||
und eine Logik, die letzteres vorraussetzt, läuft dann in den <b><font color="#b80256">Deadlock
|
||||
��</font></b>
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701923216062" ID="ID_245599280" MODIFIED="1701923238477" TEXT="zusätzlichen SEED_CALC_OFFSET eingefü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:   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:   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ß also stets schon etwas in die Queue geschickt haben, bevor man zü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ährlich und potentiell widersprü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:   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ß für einen neuen Job ein <i>step up</i> erfolgen
|
||||
Scheduler ⟶ laufend und genügend Kapazitä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äts-Regulierung" VSHIFT="1">
|
||||
<node CREATED="1701918385097" ID="ID_200066393" MODIFIED="1701918406102" TEXT="soll zuverlässig greifen ⟹ muß im Haupteingang hä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äuft nicht ⟹ ignite()"/>
|
||||
<node COLOR="#435e98" CREATED="1699329466069" ID="ID_1149902545" MODIFIED="1701918308774" TEXT="unzureichende Stärke ⟹ step"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701918435961" ID="ID_1345306548" MODIFIED="1701924248503" TEXT="vorläufige/anfängliche Lö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üte der Regulierung"/>
|
||||
<node CREATED="1701918718068" ID="ID_834627609" MODIFIED="1701918728990" TEXT="möglichst keine Festlegung auf feste Zeitmaßstäbe"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1701918800592" ID="ID_503202065" MODIFIED="1701918867952" TEXT="Logik fuß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 — sonstige Regulierung ⟶ Load-Controller">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1701918965842" ID="ID_1066608394" MODIFIED="1701919053878" TEXT="ich möchte unbedingt die automatische selbst-Zündung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
warum....? weiß nicht, Bauchgefühl.
|
||||
</p>
|
||||
<p>
|
||||
Ich möchte nicht mit Einzelfall-Analysen belegen, wann der Scheduler gestartet werden soll. Der Ruhe-Zustand, wie auch der Neuanlauf sollten von außen praktisch nicht erkennbar sein (bis auf die Verzö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üf-Routine auf"/>
|
||||
<node CREATED="1701924171746" ID="ID_467001794" MODIFIED="1701924192199" TEXT="wenn Job > 2*SLEEP_HORIZON ⟶ abwarten und Tee trinken"/>
|
||||
<node CREATED="1701924194019" ID="ID_499584283" MODIFIED="1701924214404" TEXT="sonst: wenn Lag auffälli ⟶ einen Step hoch"/>
|
||||
<node CREATED="1701924214921" ID="ID_208299017" MODIFIED="1701924234909" TEXT="Lag nun auch im DutyCycle-TIck beobachten ⟶ 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:   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:   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ä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="↯ Logik-Fehler: empty() ⟹ 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ü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ückwirken ⟹ Hintertür verwenden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701913194002" HGAP="61" ID="ID_142177224" MODIFIED="1701919722579" TEXT="fü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ä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ührt zu unnö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ßnahmen">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#338800" CREATED="1701923327018" ID="ID_1199123453" MODIFIED="1701923395602" TEXT="ersten Job mit SEED_CALC_OFFSET(250µs) starten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701923262858" ID="ID_12809390" MODIFIED="1701923339094" TEXT="vorläufige/einfache Load-Regulierung eingeführt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701923282551" ID="ID_255624260" MODIFIED="1701923339093" TEXT="ignite() lö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ück">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698522492081" ID="ID_1777263362" MODIFIED="1698604971384" TEXT="terminateProcessing �� Gewalt!">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -95697,8 +95849,9 @@ Date:   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ät und Last">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693238508625" ID="ID_1960804622" MODIFIED="1701918688685" TEXT="Ermitteln der Engine-Kapazitä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:   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ä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ätzliche unnö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ü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ä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ä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ä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:   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ß 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="»probing« eines Future ist schwierig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...ich erinnere mich: man muß 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:   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:   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ängen ⟶ Timeout">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1701843677557" ID="ID_619867364" MODIFIED="1701879688239" TEXT="offensichtlicher Fehler: muß dem ersten Plan-Job natü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äter)">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1701906561917" ID="ID_759675868" MODIFIED="1701906661639" TEXT="Situation: nur wenige Jobs zu Beginn — 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() ⟹ 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 "Promise already satisfied"">
|
||||
<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ät"/>
|
||||
<node CREATED="1701901107281" ID="ID_1104641878" MODIFIED="1701901150399" TEXT="das „leere“ Signal ist zu dem Zeitpunkt bereits ausgelöst ⟹ ↯"/>
|
||||
<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> Signal kaputt schieß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ösung: vorher abholen und gar nicht kaputt schieß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ür sorgen, daß dieser erste Aufruf den Anker-Punkt anfragt. Hilfsfunktion gibt dann µ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µs hin"/>
|
||||
<node CREATED="1701879774593" ID="ID_1372474269" MODIFIED="1701881055424">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
⟹ der pre-Roll ist <b>wesentlich</b> 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 -> 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ätigt">
|
||||
<node CREATED="1701881078359" ID="ID_1962795672" MODIFIED="1701882948416" TEXT="der Nachfolger wird gescheduled, nachdem der Vorlä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ält die Node-IDs
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701881179159" ID="ID_1845367145" MODIFIED="1701881200379" TEXT="das würde auch die vielen sonderbar kurummen Schedules / Head-Times erklä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 »heißen« Jobs verschoben"/>
|
||||
<node CREATED="1701881818739" ID="ID_610188573" MODIFIED="1701881833464" TEXT="aber die Abarbeitung bindet dort Kapazität"/>
|
||||
</node>
|
||||
<node CREATED="1701881211253" ID="ID_1126056119" MODIFIED="1701881790492" TEXT="⟹ zeigt nochmal, daß 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ü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ürgt"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -102270,8 +102639,72 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499718350" ID="ID_1514365592" MODIFIED="1693501314685" TEXT="muß 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ä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ört die Kapazitä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ährlich oft unnötige Aufrufe">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node CREATED="1701882279733" ID="ID_806964435" MODIFIED="1701882314270" TEXT="täuscht einen falschen Fokus vor">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1701882315932" ID="ID_315908114" MODIFIED="1701882326531" TEXT="Kapazität wird relativ nah konzentriert"/>
|
||||
<node CREATED="1701882327169" ID="ID_1392862868" MODIFIED="1701882351657" TEXT="nur um dann nach Abarbeitung des »backlog« 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ü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ä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> ist hierfür sinnvoll?
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1701882558247" ID="ID_726523132" MODIFIED="1701882657393" TEXT="Prerequisite versäumt Deadline ⟹ eigentlich könnten alle Dependencies weg">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1701882585540" ID="ID_242177915" MODIFIED="1701882599138" TEXT="nach Rü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ü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ä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ä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önnte aber, sofern Vorlä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ührte Jobs nirgends">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1701882768723" ID="ID_1900494324" MODIFIED="1701882778506" TEXT="zu klären: tritt der Fall hä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 »schwebenden« shared-State (mit ref-counting)"/>
|
||||
<node CREATED="1701901862970" ID="ID_961345981" MODIFIED="1701901891669" TEXT="daran können Endpunkte angekoppelt sein">
|
||||
<node CREATED="1701901892688" ID="ID_1307729109" MODIFIED="1701901911891" TEXT="maximal ein Promise (≙ Sende-Eingang)"/>
|
||||
<node CREATED="1701901913138" ID="ID_1729321115" MODIFIED="1701901922922" TEXT="mehrere Future (≙ 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ß 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>»concurrent operation«</i> ü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äter davon ableiten (is clearly sequenced). Wenn man Endpunkte <i>über Thread-Grenzen hinweg weitereichen möchte, ist das nicht durch den Future-Promise-Mechanismus gedeckt</i> und muß anderweitig konventionell synchronisiert werden.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701903438798" ID="ID_376641362" MODIFIED="1701904439792" TEXT="Einschränkungen / Schwierigkeiten">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1701903449894" ID="ID_497690286" MODIFIED="1701903458951" TEXT="nur fü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ür einen klar vorgezeichneten Ablauf"/>
|
||||
<node CREATED="1701903508079" ID="ID_1669408380" MODIFIED="1701903517609" TEXT="inhä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 überhaupt ein shared-State dran hä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ö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;"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue