Scheduler-test: force dependency-wait to wake-up job
The main (test) thread is kept in a blocking wait until the planned schedule is completed. If however the schedule overruns, the wake-up job could just be triggered prematurely. This can easily be prevented by adding a dependency from the last computation job to the wake-up job. If the computation somehow flounders, the SAFETY_TIMEOUT (5s) will eventually raise an exception to let the test fail cleanly (shutting down the Scheduler automatically)
This commit is contained in:
parent
206c67cc8a
commit
3e84224f74
6 changed files with 80 additions and 12 deletions
|
|
@ -163,12 +163,12 @@ namespace gear {
|
|||
private:
|
||||
/** @internal generate the builder / configurator term */
|
||||
activity::Term
|
||||
setupActivityScheme (activity::Term::Template schemeKind, Job job, Time start, Time after)
|
||||
setupActivityScheme (activity::Term::Template schemeKind, Job job, Time start, Time dead)
|
||||
{
|
||||
return activity::Term{ mem_.until(after)
|
||||
return activity::Term{ mem_.until(dead)
|
||||
, schemeKind
|
||||
, start
|
||||
, after
|
||||
, dead
|
||||
, job
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,10 +120,10 @@ namespace gear {
|
|||
};
|
||||
|
||||
explicit
|
||||
Term (AllocHandle&& allocHandle, Template kind, Time start, Time after, Job job)
|
||||
Term (AllocHandle&& allocHandle, Template kind, Time start, Time dead, Job job)
|
||||
: alloc_{move (allocHandle)}
|
||||
, invoke_{setupInvocation (job)}
|
||||
, post_{setupPost (start,after, invoke_)}
|
||||
, post_{setupPost (start,dead, invoke_)}
|
||||
{
|
||||
configureTemplate (kind);
|
||||
}
|
||||
|
|
@ -257,9 +257,9 @@ namespace gear {
|
|||
}
|
||||
|
||||
Activity*
|
||||
setupPost (Time start, Time after, Activity* followUp)
|
||||
setupPost (Time start, Time dead, Activity* followUp)
|
||||
{
|
||||
return & alloc_.create (start,after,followUp);
|
||||
return & alloc_.create (start,dead,followUp);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -195,6 +195,14 @@ namespace gear {
|
|||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleSpec
|
||||
compulsory (bool truely =true)
|
||||
{
|
||||
isCompulsory_ = truely;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
||||
/** build Activity chain and hand-over to the Scheduler. */
|
||||
ScheduleSpec post();
|
||||
|
||||
|
|
|
|||
|
|
@ -552,7 +552,8 @@ namespace test {
|
|||
processSchedule()
|
||||
{
|
||||
MARK_TEST_FUN
|
||||
auto LOAD_BASE = 200us;
|
||||
|
||||
auto LOAD_BASE = 1ms;
|
||||
TestChainLoad testLoad{64};
|
||||
|
||||
// .configureShape_short_segments3_interleaved()
|
||||
|
|
@ -581,6 +582,7 @@ SHOW_EXPR(referenceTime)
|
|||
|
||||
testLoad.setupSchedule(scheduler)
|
||||
.withLoadTimeBase(LOAD_BASE)
|
||||
.withJobDeadline(100ms)
|
||||
.launch_and_wait();
|
||||
|
||||
// invocation through Scheduler has reproduced all node hashes
|
||||
|
|
|
|||
|
|
@ -1610,11 +1610,17 @@ namespace test {
|
|||
,manID_);
|
||||
}
|
||||
else
|
||||
scheduler_.continueMetaJob (calcStartTime (levelDone+1)
|
||||
,wakeUpJob()
|
||||
,manID_);
|
||||
scheduler_.defineSchedule(wakeUpJob())
|
||||
.manifestation (manID_)
|
||||
.startTime(calcStartTime (levelDone+1))
|
||||
.lifeWindow(1s)
|
||||
.compulsory()
|
||||
.post()
|
||||
.linkToPredecessor (schedule_[lastNodeIDX])
|
||||
; // Setup wait-dependency on last computation
|
||||
}
|
||||
|
||||
|
||||
std::future<void>
|
||||
performRun()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -103267,7 +103267,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702441785767" ID="ID_720337177" MODIFIED="1702441794596" TEXT="Maßnahmen">
|
||||
<node COLOR="#435e98" CREATED="1702441785767" ID="ID_720337177" MODIFIED="1702495206270" TEXT="Maßnahmen">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node COLOR="#338800" CREATED="1702441683718" ID="ID_1861186167" MODIFIED="1702443370493" TEXT="Vereinfachung in der Sprachauswertung beseitigt viele redundante λ-post">
|
||||
<linktarget COLOR="#85c5af" DESTINATION="ID_1861186167" ENDARROW="Default" ENDINCLINATION="683;22;" ID="Arrow_ID_1560412883" SOURCE="ID_880220704" STARTARROW="None" STARTINCLINATION="275;13;"/>
|
||||
|
|
@ -103285,6 +103286,22 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702495209397" ID="ID_1653510240" MODIFIED="1702502179633" TEXT="nächster Trace sieht besser aus">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1702495402514" ID="ID_1543356169" MODIFIED="1702495411067" TEXT="deadlines werden nun dynamisch gesetzt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1702495456388" ID="ID_848150841" MODIFIED="1702495475621" TEXT="deadlines sind korrekt gemäß Follow-up-Job"/>
|
||||
<node CREATED="1702495780587" ID="ID_568485686" MODIFIED="1702495794883" TEXT="ein einziger Worker arbeitet die gesamte Kette ab">
|
||||
<node CREATED="1702495804347" ID="ID_58366967" MODIFIED="1702495905049" TEXT="Dauer: 25312-304 = 25008µs"/>
|
||||
<node CREATED="1702495906944" ID="ID_966835817" MODIFIED="1702495934504" TEXT="∅ 390.85µs"/>
|
||||
<node CREATED="1702496050140" ID="ID_1027208983" MODIFIED="1702496069988" TEXT="Reference-time(single)=13064.993µs"/>
|
||||
<node CREATED="1702496142096" ID="ID_806958276" MODIFIED="1702496164835" TEXT="�� 91.4% Overhead">
|
||||
<node CREATED="1702496205139" ID="ID_111513179" MODIFIED="1702496214051" TEXT="per Beobachtung: 190µs / Step"/>
|
||||
<node CREATED="1702496215064" ID="ID_835671568" MODIFIED="1702496237909" TEXT="per Referenz-Zeit: 186µs / Step"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702427050770" ID="ID_974165172" MODIFIED="1702427059369" TEXT="nächster Lauf funktioniert...">
|
||||
<node CREATED="1702427124405" ID="ID_1550920815" MODIFIED="1702427157812" TEXT="hier werden am "problematischen Abschnitt" drei Notify-post dispatched">
|
||||
|
|
@ -103333,6 +103350,41 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702502185844" ID="ID_90360587" MODIFIED="1702504217152" TEXT="muß Warten erzwingen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1702502209817" ID="ID_1809111942" MODIFIED="1702502224706" TEXT="Dependency vom wake-up-Job setzen">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1702502229318" ID="ID_128135299" MODIFIED="1702502255524" TEXT="sollte nicht schwer sein...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
da wir alle ScheduleSpec-Terme in einem Array halten
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1702503012245" ID="ID_1867098513" MODIFIED="1702503045111" TEXT="ist dann kein Meta-Job mehr"/>
|
||||
<node CREATED="1702503071612" ID="ID_1616639285" MODIFIED="1702503089510" TEXT="setzte längere Deadline ≔ 1sec"/>
|
||||
<node CREATED="1702503090546" ID="ID_146168524" MODIFIED="1702503112917" TEXT="markiere den Job als »compulsory«">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702503113719" ID="ID_1888291213" MODIFIED="1702503123642" TEXT="bringt das was?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1702503126930" ID="ID_95376983" MODIFIED="1702504211403" TEXT="Test hängt">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1702503848860" ID="ID_1914405903" MODIFIED="1702503857039" TEXT="liegt aber nur an den Job-Deadlines"/>
|
||||
<node CREATED="1702503858546" ID="ID_1996298783" MODIFIED="1702503876020" TEXT="wenn man die entsprechend verlängert, funktioniert's"/>
|
||||
<node CREATED="1702503996960" ID="ID_1870969909" MODIFIED="1702504099598" TEXT="mit load-Base≔1ms ⟼ Gesamtzeit 83ms"/>
|
||||
<node CREATED="1702504066855" ID="ID_255921611" MODIFIED="1702504082328" TEXT="referenz-Zeit: 65924.825µs"/>
|
||||
<node CREATED="1702504155370" ID="ID_1935608101" MODIFIED="1702504198984" TEXT="�� 26% Overhead bzw. 266µs / Step"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue