Scheduler / Activity-Lang: simplify handling of blocked Gate
In the first draft version, a blocked Gate was handled by »polling« the Gate regularly by scheduling a re-invocation repeatedly into the future (by a stepping defined through ExecutionCtx::getWaitDelay()). Yet the further development of the Activity-Language indicates that the ''Notification mechanism'' is sufficient to handle all foreseeable aspects of dependency management. Consequently this ''Gate poling is no longer necessary,'' since on Notification the Gate is automatically checked and the activation impulse is immediately passed on; thus the re-scheduled check would never get an opportunity actually to trigger the Gate; such an active polling would only be necessary if the count down latch in the Gate is changed by "external forces". Moreover, the first Scheduler integration tests with TestChainLoad indicate that the rescheduled polling can create a considerable additional load when longer dependency chains miss one early prerequisite, and this additional load (albeit processed comparatively fast by the Scheduler) will be shifted along needlessly for quite some time, until all of the activities from the failed chain have passed their deadline. And what is even more concerning, these useless checks have a tendency to miss-focus the capacity management, as it seems there is much work to do in a near horizon, which in fact may not be the case altogether. Thus the Gate implementation is now *changed to just SKIP* when blocked. This helped to drastically improve the behaviour of the Scheduler immediately after start-up -- further observation indicated another adjustment: the first Tick-duty-cycle is now shortened, because (after the additional "noise" from gate-rescheduling was removed), the newly scaled-up work capacity has the tendency to focus in the time horizon directly behind the first jobs added to the timeline, which typically is now the first »Tick«. ð¡ this leads to a recommendation, to arrange the first job-planning chunk in such a way that the first actual work jobs appear in the area between 5ms and 10ms after triggering the Scheduler start-up.Scheduler¡
This commit is contained in:
parent
5abab5390d
commit
030e9aa8a2
5 changed files with 101 additions and 47 deletions
|
|
@ -204,6 +204,8 @@ namespace gear {
|
|||
* The Execution Context need to be passed to any Activity _activation;_
|
||||
* it provides the _bindings_ for functionality defined only on a conceptual
|
||||
* level, and provided by an opaque implementation (actually the Scheduler)
|
||||
* @remark `getWaitDelay` was once used for Gate, but is now an obscure
|
||||
* fall-back for _other notifications_ (retained for future use)
|
||||
*/
|
||||
template<class EXE>
|
||||
constexpr void
|
||||
|
|
@ -540,13 +542,13 @@ namespace gear {
|
|||
|
||||
template<class EXE>
|
||||
activity::Proc
|
||||
checkGate (Time now, EXE& executionCtx)
|
||||
checkGate (Time now, EXE&)
|
||||
{
|
||||
REQUIRE (GATE == verb_);
|
||||
if (data_.condition.isDead(now)) // beyond deadline
|
||||
return activity::SKIP;
|
||||
if (data_.condition.isHold()) // prerequisite count not(yet) fulfilled -> spin (=re-invoke later)
|
||||
return dispatchSelfDelayed (now, executionCtx);
|
||||
if (data_.condition.isHold()) // prerequisite count not(yet) fulfilled -> block further activation
|
||||
return activity::SKIP;
|
||||
else
|
||||
return activity::PASS;
|
||||
}
|
||||
|
|
@ -726,7 +728,7 @@ namespace gear {
|
|||
return postChain (now, executionCtx);
|
||||
default:
|
||||
return dispatchSelfDelayed (now, executionCtx);
|
||||
} // Fallback: self-re-dispatch for async execution
|
||||
} // Fallback: self-re-dispatch for async execution (-> getWaitDelay())
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -141,7 +141,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 POLL_WAIT_DELAY{FSecs(1,1000)}; ///< delay until re-evaluating after notification (obscure feature, retained for future use)
|
||||
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
|
||||
}
|
||||
|
|
@ -746,7 +746,9 @@ cout<<" ·‖ "+markThread()+": @ "+relT(now)+" HT:"+relT(layer1_.headTime())+
|
|||
* 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)
|
||||
* irrespective if the queue has still further entries. Used
|
||||
* on first Tick-Cycle directly after ignition, which is
|
||||
* then also shortened (to improve scheduling precision)
|
||||
*/
|
||||
inline void
|
||||
Scheduler::handleDutyCycle (Time now, bool forceContinuation)
|
||||
|
|
@ -771,7 +773,7 @@ cout<<"‖▷▷▷‖ "+markThread()+": @ "+relT(now)+(empty()? string(" EMPTY"
|
|||
|
||||
if (not empty() or forceContinuation)
|
||||
{// prepare next duty cycle »tick«
|
||||
Time nextTick = now + DUTY_CYCLE_PERIOD;
|
||||
Time nextTick = now + (forceContinuation? WORK_HORIZON : DUTY_CYCLE_PERIOD);
|
||||
Time deadline = nextTick + DUTY_CYCLE_TOLERANCE;
|
||||
Activity& tickActivity = activityLang_.createTick (deadline);
|
||||
ActivationEvent tickEvent{tickActivity, nextTick, deadline, ManifestationID(), true};
|
||||
|
|
|
|||
|
|
@ -585,7 +585,7 @@ namespace test {
|
|||
_DiagnosticFun<SIG_done>::Type done;
|
||||
_DiagnosticFun<SIG_tick>::Type tick;
|
||||
|
||||
function<Offset()> getWaitDelay = [] { return POLL_WAIT_DELAY; };
|
||||
function<Offset()> getWaitDelay = [] { return POLL_WAIT_DELAY; };
|
||||
function<Time()> getSchedTime = [this]{ return SCHED_TIME_MARKER;};
|
||||
|
||||
FakeExecutionCtx (ActivityDetector& detector)
|
||||
|
|
|
|||
|
|
@ -247,8 +247,11 @@ namespace test {
|
|||
|
||||
|
||||
/** @test behaviour of Activity::GATE:
|
||||
* the count-down condition determines if activation _passes_
|
||||
* or will _spin around_ for later re-try
|
||||
* the count-down condition determines if activation _passes;_
|
||||
* otherwise the Gate will just return activity::SKIP
|
||||
* @remark in the original design, the Gate would poll for changes
|
||||
* by re-scheduling itself into the Future; this behaviour
|
||||
* turned out to be unnecessary and problematic.
|
||||
*/
|
||||
void
|
||||
verifyActivity_Gate_block()
|
||||
|
|
@ -264,11 +267,7 @@ namespace test {
|
|||
CHECK (activity::SKIP == wiring.activate (tt, detector.executionCtx));
|
||||
CHECK (23 == gate.data_.condition.rest); // prerequisite-count not altered
|
||||
|
||||
Time reScheduled = tt + detector.executionCtx.getWaitDelay();
|
||||
CHECK (tt < reScheduled);
|
||||
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("33.333 ⧐ Act(GATE")
|
||||
.beforeInvocation("CTX-post").arg(reScheduled, "Act(GATE", "≺test::CTX≻"));
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("33.333 ⧐ Act(GATE"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -299,14 +298,11 @@ namespace test {
|
|||
Activity& wiring = detector.buildGateWatcher (gate);
|
||||
|
||||
Time tt{333,33};
|
||||
Time reScheduled = tt + detector.executionCtx.getWaitDelay(); // retrieve the next time to retry
|
||||
CHECK (tt < reScheduled);
|
||||
|
||||
// an attempt to activate blocks (and re-schedules for later retry)
|
||||
// an attempt to activate blocks (returing SKIP, nothing else happens)
|
||||
CHECK (activity::SKIP == wiring.activate (tt, detector.executionCtx));
|
||||
CHECK (1 == gate.data_.condition.rest); // unchanged (and locked)...
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("33.333 ⧐ Act(GATE")
|
||||
.beforeInvocation("CTX-post").arg(reScheduled, "Act(GATE", "≺test::CTX≻"));
|
||||
CHECK (detector.verifyInvocation("tap-GATE").arg("33.333 ⧐ Act(GATE"));
|
||||
|
||||
detector.incrementSeq();
|
||||
// Gate receives a notification from some prerequisite Activity
|
||||
|
|
@ -314,17 +310,17 @@ namespace test {
|
|||
CHECK (0 == gate.data_.condition.rest); // condition has been decremented...
|
||||
|
||||
CHECK (detector.verifyInvocation("tap-GATE").seq(0).arg("33.333 ⧐ Act(GATE")
|
||||
.beforeInvocation("CTX-post").seq(0).arg(reScheduled, "Act(GATE", "≺test::CTX≻")
|
||||
.beforeInvocation("tap-GATE").seq(1).arg("33.333 --notify-↯> Act(GATE")
|
||||
.beforeInvocation("CTX-post").seq(1).arg(tt, "after-GATE", "≺test::CTX≻"));
|
||||
CHECK (gate.data_.condition.dead == Time::MIN);
|
||||
|
||||
detector.incrementSeq();
|
||||
Time ttt{444,44};
|
||||
// when the re-scheduled check happens later, it is blocked to prevent double activation
|
||||
// when another activation happens later, it is blocked to prevent double activation
|
||||
CHECK (activity::SKIP == wiring.activate (ttt, detector.executionCtx));
|
||||
CHECK (detector.verifyInvocation("tap-GATE").seq(2).arg("44.444 ⧐ Act(GATE"));
|
||||
CHECK (detector.ensureNoInvocation("CTX-post").seq(2));
|
||||
CHECK (detector.ensureNoInvocation("CTX-post").seq(2)
|
||||
.afterInvocation("tap-GATE").seq(2));
|
||||
CHECK (gate.data_.condition.dead == Time::MIN);
|
||||
|
||||
detector.incrementSeq();
|
||||
|
|
@ -426,8 +422,7 @@ namespace test {
|
|||
detector.incrementSeq();
|
||||
gate.data_.condition.incDependencies(); // Gate is blocked
|
||||
CHECK (activity::PASS == ActivityLang::dispatchChain (&post, detector.executionCtx)); // start execution (case/seq == 1)
|
||||
CHECK (detector.verifyInvocation("Gate") .seq(1).arg("1.011 ⧐ Act(GATE") // ...the Gate was activated...
|
||||
.beforeInvocation("CTX-post").seq(1).arg("2.011","Act(GATE","≺test::CTX≻")); // ...but was found blocked and re-scheduled itself to 2.011
|
||||
CHECK (detector.verifyInvocation("Gate").seq(1).arg("1.011 ⧐ Act(GATE")); // ...the Gate was activated, but blocked...
|
||||
CHECK (detector.ensureNoInvocation("after-Gate").seq(1) // verify activation was not passed out behind Gate
|
||||
.afterInvocation("Gate").seq(1));
|
||||
CHECK (detector.ensureNoInvocation("CTX-tick").seq(1) // verify also the λ-tick was not invoked this time
|
||||
|
|
|
|||
|
|
@ -81220,8 +81220,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#435e98" CREATED="1690069297302" ID="ID_33956976" MODIFIED="1690492032363" TEXT="sonst....">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1690069315708" ID="ID_1571780277" MODIFIED="1690069346741" TEXT="...soll sich das Gate »selbst in die Zukunft schieben«">
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693499693849" ID="ID_1878976712" MODIFIED="1693501299248" TEXT="ist dieses Feature überhaupt notwendig?">
|
||||
<linktarget COLOR="#9671cb" DESTINATION="ID_1878976712" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_1465904567" SOURCE="ID_1514365592" STARTARROW="None" STARTINCLINATION="624;46;"/>
|
||||
<node COLOR="#435e98" CREATED="1693499693849" ID="ID_1878976712" MODIFIED="1701988097696" TEXT="ist dieses Feature überhaupt notwendig?">
|
||||
<linktarget COLOR="#717ecb" DESTINATION="ID_1878976712" ENDARROW="Default" ENDINCLINATION="-1051;64;" ID="Arrow_ID_1465904567" SOURCE="ID_1514365592" STARTARROW="None" STARTINCLINATION="624;46;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1693500036651" ID="ID_891303584" MODIFIED="1693500110260" TEXT="aus generisch-logischen Gründen eingeführt">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -81237,7 +81237,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1693500320700" ID="ID_1158823061" MODIFIED="1693501668230">
|
||||
<node BACKGROUND_COLOR="#fefc4e" COLOR="#351d75" CREATED="1693500320700" ID="ID_1158823061" MODIFIED="1701988093280">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -81248,6 +81248,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<arrowlink COLOR="#ff8c4a" DESTINATION="ID_130475381" ENDARROW="Default" ENDINCLINATION="-1002;56;" ID="Arrow_ID_501288232" STARTARROW="None" STARTINCLINATION="1201;66;"/>
|
||||
<arrowlink COLOR="#ff835a" DESTINATION="ID_1677810131" ENDARROW="Default" ENDINCLINATION="266;-21;" ID="Arrow_ID_1264674848" STARTARROW="None" STARTINCLINATION="-317;19;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -81294,10 +81295,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1690069846556" ID="ID_1000629107" MODIFIED="1690495286268" TEXT="ansonsten ist das ein λ-POST mit festem Delay">
|
||||
<node COLOR="#5b280f" CREATED="1690069846556" ID="ID_1000629107" MODIFIED="1701984491877" TEXT="ansonsten ist das ein λ-POST mit festem Delay">
|
||||
<arrowlink DESTINATION="ID_817512371" ENDARROW="Default" ENDINCLINATION="-55;19;" ID="Arrow_ID_1228234954" STARTARROW="None" STARTINCLINATION="-170;11;"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node COLOR="#ff0000" CREATED="1701984496259" HGAP="41" ID="ID_533015811" MODIFIED="1701988198479" TEXT="dieses Feature wurde zurückgebaut" VSHIFT="4">
|
||||
<arrowlink COLOR="#5a1f28" DESTINATION="ID_1360004322" ENDARROW="Default" ENDINCLINATION="250;-608;" ID="Arrow_ID_1804880639" STARTARROW="Default" STARTINCLINATION="641;48;"/>
|
||||
<linktarget COLOR="#3bb887" DESTINATION="ID_533015811" ENDARROW="Default" ENDINCLINATION="138;478;" ID="Arrow_ID_668218713" SOURCE="ID_441526961" STARTARROW="None" STARTINCLINATION="633;-427;"/>
|
||||
<icon BUILTIN="closed"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701984534846" ID="ID_1475563814" MODIFIED="1701984545944" TEXT="lediglich SKIP zurückgeben"/>
|
||||
</node>
|
||||
<node CREATED="1693501591528" ID="ID_332217879" MODIFIED="1693501601917" TEXT="Steuer-Logik">
|
||||
<node CREATED="1693501607721" ID="ID_182057848" MODIFIED="1693501620284" TEXT="primär-Chain">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1693501621611" ID="ID_1677810131" MODIFIED="1693501660623" TEXT="gilt als Regelfall">
|
||||
|
|
@ -85173,6 +85181,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 CREATED="1701988592702" ID="ID_207157868" MODIFIED="1701988669753" TEXT="1. Duty-Cycle-Tick erfolgt bereits nach WORK_HORIZON">
|
||||
<linktarget COLOR="#5fb119" DESTINATION="ID_207157868" ENDARROW="Default" ENDINCLINATION="120;6;" ID="Arrow_ID_1550924182" SOURCE="ID_1888744514" STARTARROW="None" STARTINCLINATION="458;59;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701978652233" ID="ID_1168441343" MODIFIED="1701978661408" TEXT="(jetzt schon)"/>
|
||||
|
|
@ -89935,7 +89946,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688336697451" FOLDED="true" ID="ID_360159435" MODIFIED="1693695232010" TEXT="SchedulerActivity_test">
|
||||
<node COLOR="#338800" CREATED="1688336697451" FOLDED="true" ID="ID_360159435" MODIFIED="1701984582513" TEXT="SchedulerActivity_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1688337038457" ID="ID_1859527374" MODIFIED="1693695203513">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -90016,7 +90027,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1692718437941" ID="ID_1363192893" MODIFIED="1692723165688" TEXT="verifyActivity_Notify_dispatch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1689199390484" FOLDED="true" ID="ID_212018049" MODIFIED="1692727125029" TEXT="verifyActivity_Gate">
|
||||
<node COLOR="#338800" CREATED="1689199390484" FOLDED="true" ID="ID_212018049" MODIFIED="1701984590792" TEXT="verifyActivity_Gate">
|
||||
<linktarget COLOR="#2c8d69" DESTINATION="ID_212018049" ENDARROW="Default" ENDINCLINATION="556;74;" ID="Arrow_ID_1693904148" SOURCE="ID_1220469732" STARTARROW="None" STARTINCLINATION="472;34;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1692723178576" ID="ID_214653366" MODIFIED="1692726894947" TEXT="pass">
|
||||
|
|
@ -90027,6 +90038,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1692723183479" ID="ID_785522791" MODIFIED="1692726896672" TEXT="block">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1701984639575" ID="ID_1360004322" MODIFIED="1701987034971" TEXT="Verhalten geändert: sperrt lediglich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Weitere Beobachtungen im Scheduler ergaben, daß das <i>polling</i>  tatsächlich gefährlichen Overhead produziert; zudem ist es nach aktuellem Stand <i>grundsätzlich nicht notwendig, </i>da alle Gate-Änderungen per Notification kommen (und dann direkt durchsteuern können)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#5a1f28" DESTINATION="ID_1360004322" ENDARROW="Default" ENDINCLINATION="250;-608;" ID="Arrow_ID_1804880639" SOURCE="ID_533015811" STARTARROW="Default" STARTINCLINATION="641;48;"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1692723186655" ID="ID_343855322" MODIFIED="1692726899386" TEXT="opened">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -95908,7 +95931,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</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">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701906105012" ID="ID_729619994" LINK="#ID_1544079509" MODIFIED="1701980947285" TEXT="TestChainLoad entwickeln">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701906154358" ID="ID_439708583" MODIFIED="1701906163997" TEXT="einfacher Funktionstest">
|
||||
|
|
@ -95916,15 +95939,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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">
|
||||
<node COLOR="#435e98" CREATED="1701906207551" ID="ID_871293537" MODIFIED="1701987912416" 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 COLOR="#338800" CREATED="1701906369489" ID="ID_481308712" MODIFIED="1701988171195" TEXT="Feature zurückbauen">
|
||||
<arrowlink COLOR="#2e6a8d" DESTINATION="ID_441526961" ENDARROW="Default" ENDINCLINATION="-569;-456;" ID="Arrow_ID_888469229" STARTARROW="None" STARTINCLINATION="-914;101;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1701906481921" ID="ID_898143170" MODIFIED="1701978733301" TEXT="ignite() / Hochfahren unzuverlässig">
|
||||
|
|
@ -101485,13 +101508,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701881769919" ID="ID_151250915" MODIFIED="1701988039887" 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;"/>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<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 COLOR="#435e98" CREATED="1701881211253" ID="ID_1126056119" MODIFIED="1701988027249" TEXT="⟹ zeigt nochmal, daß wir den Re-Schedule (aktuell) nicht brauchen">
|
||||
<arrowlink COLOR="#2985fd" DESTINATION="ID_1419536205" ENDARROW="Default" ENDINCLINATION="384;-33;" ID="Arrow_ID_676818938" STARTARROW="None" STARTINCLINATION="-305;13;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -101549,6 +101573,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1701976654013" ID="ID_802885873" LINK="#ID_1311823420" MODIFIED="1701978114323" TEXT="soweit ich nun sehen kann: Scheduling + Kapazitäts-Steuerung funkioniert sauber">
|
||||
<linktarget COLOR="#6478c8" DESTINATION="ID_802885873" ENDARROW="Default" ENDINCLINATION="36;-60;" ID="Arrow_ID_676956631" SOURCE="ID_1657524395" STARTARROW="None" STARTINCLINATION="-30;44;"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
<node COLOR="#435e98" CREATED="1701988308352" ID="ID_1470787845" MODIFIED="1701988376758" TEXT="nach Rückbau Gate-reschedule: gar keine Aktivierungen mehr vor dem 1.Tick">
|
||||
<linktarget COLOR="#87a2c3" DESTINATION="ID_1470787845" ENDARROW="Default" ENDINCLINATION="-589;23;" ID="Arrow_ID_859866906" SOURCE="ID_876475062" STARTARROW="None" STARTINCLINATION="323;48;"/>
|
||||
<node CREATED="1701988379490" ID="ID_1481005436" MODIFIED="1701988386817" TEXT="auf den ersten Blick überraschend"/>
|
||||
<node COLOR="#338800" CREATED="1701988387361" ID="ID_1837846683" LINK="#ID_1311823420" MODIFIED="1701988415752" TEXT="works as designed">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1701988452465" ID="ID_1888744514" MODIFIED="1701988727574" TEXT="doch angepaßt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist zwar logisch, erscheint mir aber dennoch nicht <i>»zielführend«  — </i>daher eine Anpassung des Standard-Verhaltens, so daß der erste Tick schneller erfolgt
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#5fb119" DESTINATION="ID_207157868" ENDARROW="Default" ENDINCLINATION="120;6;" ID="Arrow_ID_1550924182" STARTARROW="None" STARTINCLINATION="458;59;"/>
|
||||
<arrowlink COLOR="#648792" DESTINATION="ID_430095540" ENDARROW="Default" ENDINCLINATION="1364;-167;" ID="Arrow_ID_1412593575" STARTARROW="None" STARTINCLINATION="-219;29;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1701912974750" ID="ID_1155210741" MODIFIED="1701912984629" TEXT="Lauf endet zu früh">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
|
|
@ -101687,7 +101731,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node CREATED="1701977495476" ID="ID_1672299096" MODIFIED="1701978187469" TEXT="Genauigkeit für die ersten Jobs ist limitiert">
|
||||
<linktarget COLOR="#6b768b" DESTINATION="ID_1672299096" ENDARROW="Default" ENDINCLINATION="1783;-96;" ID="Arrow_ID_397737048" SOURCE="ID_18962140" STARTARROW="None" STARTINCLINATION="-625;41;"/>
|
||||
<node CREATED="1701978229129" ID="ID_430095540" MODIFIED="1701978253938" TEXT="1.Fenster ~ 5ms (2-7ms)"/>
|
||||
<node CREATED="1701978229129" ID="ID_430095540" MODIFIED="1701978253938" TEXT="1.Fenster ~ 5ms (2-7ms)">
|
||||
<linktarget COLOR="#648792" DESTINATION="ID_430095540" ENDARROW="Default" ENDINCLINATION="1364;-167;" ID="Arrow_ID_1412593575" SOURCE="ID_1888744514" STARTARROW="None" STARTINCLINATION="-219;29;"/>
|
||||
</node>
|
||||
<node CREATED="1701978275403" ID="ID_743131147" MODIFIED="1701978364723" TEXT="weitere Fenster: N·SLEEP_HORIZON + WORK_HORIZON"/>
|
||||
<node CREATED="1701978370646" ID="ID_197187391" MODIFIED="1701978382001" TEXT="sonst: bis zu 15ms Versäumnis möglich"/>
|
||||
</node>
|
||||
|
|
@ -102755,22 +102801,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693499916691" ID="ID_1453759334" MODIFIED="1693499934621" TEXT="zu überprüfen">
|
||||
<icon BUILTIN="stop"/>
|
||||
<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;"/>
|
||||
<node COLOR="#435e98" CREATED="1693499718350" ID="ID_1514365592" MODIFIED="1701988213814" TEXT="muß sich das Gate selbst re-triggern?">
|
||||
<arrowlink COLOR="#717ecb" 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="#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;"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701881732254" HGAP="34" ID="ID_1419536205" MODIFIED="1701988020039" TEXT="stört die Kapazitätssteuerung">
|
||||
<linktarget COLOR="#2985fd" DESTINATION="ID_1419536205" ENDARROW="Default" ENDINCLINATION="384;-33;" ID="Arrow_ID_676818938" SOURCE="ID_1126056119" STARTARROW="None" STARTINCLINATION="-305;13;"/>
|
||||
<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 COLOR="#435e98" CREATED="1701988235325" HGAP="23" ID="ID_876475062" MODIFIED="1701988370081" TEXT="jetzt nicht mehr" VSHIFT="3">
|
||||
<arrowlink COLOR="#87a2c3" DESTINATION="ID_1470787845" ENDARROW="Default" ENDINCLINATION="-589;23;" ID="Arrow_ID_859866906" STARTARROW="None" STARTINCLINATION="323;48;"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1701882279733" ID="ID_806964435" MODIFIED="1701882314270" TEXT="täuscht einen falschen Fokus vor">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -102779,9 +102829,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1701882376639" ID="ID_441526961" MODIFIED="1701988198479" TEXT="Fazit: Feature zurückbauen">
|
||||
<arrowlink COLOR="#3bb887" DESTINATION="ID_533015811" ENDARROW="Default" ENDINCLINATION="138;478;" ID="Arrow_ID_668218713" STARTARROW="None" STARTINCLINATION="633;-427;"/>
|
||||
<linktarget COLOR="#2e6a8d" DESTINATION="ID_441526961" ENDARROW="Default" ENDINCLINATION="-569;-456;" ID="Arrow_ID_888469229" SOURCE="ID_481308712" STARTARROW="None" STARTINCLINATION="-914;101;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1701987112212" ID="ID_1919183787" MODIFIED="1701987129985" TEXT="es ändert sich nur punktuell die Logik im Activity::GATE"/>
|
||||
<node CREATED="1701987130575" ID="ID_223494117" MODIFIED="1701987168316" TEXT="der executionCtx.waitDelay() bleibt bestehen (als Fallback für Notification)">
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1701882467764" ID="ID_694134930" MODIFIED="1701882478850" TEXT="Umgang mit versäumten Dependencies">
|
||||
|
|
|
|||
Loading…
Reference in a new issue