Scheduler-test: option to require activation by scheduler

use a feature of the Activity-Language prepared for this purpose:
self-Inhibition of the Chain. This prevents a prerequisite-NOTIFY
to trigger a complete chain of available tasks, before these tasks
have actually reached their nominal scheduling time.

This has the effect to align the computations much more strictly
with the defined schedule
This commit is contained in:
Fischlurch 2023-12-14 01:49:46 +01:00
parent 3e84224f74
commit 75b5eea2d3
4 changed files with 104 additions and 11 deletions

View file

@ -196,9 +196,9 @@ namespace gear {
}
ScheduleSpec
compulsory (bool truely =true)
compulsory (bool indeed =true)
{
isCompulsory_ = truely;
isCompulsory_ = indeed;
return move(*this);
}
@ -206,6 +206,13 @@ namespace gear {
/** build Activity chain and hand-over to the Scheduler. */
ScheduleSpec post();
ScheduleSpec
requireSchedule ()
{
term_->requireDirectActivation();
return move(*this);
}
ScheduleSpec
linkToSuccessor (ScheduleSpec& succSpec)
{

View file

@ -553,7 +553,7 @@ namespace test {
{
MARK_TEST_FUN
auto LOAD_BASE = 1ms;
auto LOAD_BASE = 500us;
TestChainLoad testLoad{64};
// .configureShape_short_segments3_interleaved()
@ -583,6 +583,7 @@ SHOW_EXPR(referenceTime)
testLoad.setupSchedule(scheduler)
.withLoadTimeBase(LOAD_BASE)
.withJobDeadline(100ms)
.requireSchedule()
.launch_and_wait();
// invocation through Scheduler has reproduced all node hashes

View file

@ -1563,10 +1563,11 @@ namespace test {
FrameRate levelSpeed_{1, Duration{_uTicks(1ms)}};
uint blockLoadFactor_{2};
bool requireSchedule_{false};
size_t chunkSize_{DEFAULT_CHUNKSIZE};
TimeVar startTime_{Time::ANYTIME};
microseconds preRoll_{guessPlanningPreroll (chunkSize_)};
microseconds deadline_{STANDARD_DEADLINE};
microseconds preRoll_{guessPlanningPreroll (chunkSize_)};
ManifestationID manID_{};
std::promise<void> signalDone_{};
@ -1587,6 +1588,8 @@ namespace test {
.startTime (calcStartTime(level))
.lifeWindow (deadline_)
.post();
if (requireSchedule_)
schedule_[idx].requireSchedule();
}
/** Callback: define a dependency between scheduled jobs */
@ -1613,8 +1616,7 @@ namespace test {
scheduler_.defineSchedule(wakeUpJob())
.manifestation (manID_)
.startTime(calcStartTime (levelDone+1))
.lifeWindow(1s)
.compulsory()
.lifeWindow(SAFETY_TIMEOUT)
.post()
.linkToPredecessor (schedule_[lastNodeIDX])
; // Setup wait-dependency on last computation
@ -1689,6 +1691,13 @@ namespace test {
return move(*this);
}
ScheduleCtx&&
requireSchedule (bool indeed =true)
{
requireSchedule_ = indeed;
return move(*this);
}
ScheduleCtx&&
withJobDeadline (microseconds deadline_after_start)
{

View file

@ -103330,7 +103330,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702429550455" ID="ID_1811501772" MODIFIED="1702429563055" TEXT="10174 - 2146"/>
<node CREATED="1702429590330" ID="ID_762953768" MODIFIED="1702429614290" TEXT="364.909&#xb5;s / Step"/>
</node>
<node COLOR="#5b280f" CREATED="1702429190108" FOLDED="true" ID="ID_1445169165" MODIFIED="1702429814538" TEXT="diese Auswertung ist wenig aussagekr&#xe4;ftig">
<node COLOR="#5b280f" CREATED="1702429190108" FOLDED="true" ID="ID_1445169165" MODIFIED="1702521434467" TEXT="diese Auswertung ist wenig aussagekr&#xe4;ftig">
<linktarget COLOR="#f53874" DESTINATION="ID_1445169165" ENDARROW="Default" ENDINCLINATION="69;5;" ID="Arrow_ID_927187237" SOURCE="ID_1629592960" STARTARROW="None" STARTINCLINATION="180;-10;"/>
<icon BUILTIN="stop-sign"/>
<node CREATED="1702429685693" ID="ID_1578421379" MODIFIED="1702429701767" TEXT="es ist ein isoliertes Teilph&#xe4;nomen von unklarer Relevanz"/>
<node CREATED="1702429717649" ID="ID_587876448" MODIFIED="1702429776011" TEXT="die Messung ist mit erheblichen Unsicherheiten behaftet">
@ -103364,15 +103365,34 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
da wir alle ScheduleSpec-Terme in einem Array halten
</p>
</body>
</html>
</richcontent>
</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&#xe4;ngere Deadline &#x2254; 1sec"/>
<node CREATED="1702503090546" ID="ID_146168524" MODIFIED="1702503112917" TEXT="markiere den Job als &#xbb;compulsory&#xab;">
<node COLOR="#5b280f" CREATED="1702503090546" FOLDED="true" ID="ID_146168524" MODIFIED="1702521085220" TEXT="markiere den Job als &#xbb;compulsory&#xab;">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702503113719" ID="ID_1888291213" MODIFIED="1702503123642" TEXT="bringt das was?">
<icon BUILTIN="button_cancel"/>
<node COLOR="#435e98" CREATED="1702503113719" ID="ID_1888291213" MODIFIED="1702521030577" TEXT="bringt das was?">
<icon BUILTIN="help"/>
<node CREATED="1702505398547" ID="ID_1341365219" MODIFIED="1702520788562" TEXT="is&apos;n&apos;nettesFeature"/>
<node CREATED="1702505409826" ID="ID_1321806137" MODIFIED="1702505423828" TEXT="aber wir haben schon den Timeout im Test"/>
<node CREATED="1702505470021" ID="ID_1005215162" MODIFIED="1702505495120" TEXT="allerdings: wenn der wake-up-Job eine so sp&#xe4;te Deadline hat...."/>
<node CREATED="1702505495912" ID="ID_1748286363" MODIFIED="1702505519455" TEXT="dann werden da ggfs. viele leere Epochen aufgemacht im BlockFlow"/>
<node COLOR="#435e98" CREATED="1702505520241" ID="ID_1051034858" MODIFIED="1702520761435" TEXT="k&#xf6;nnte das wiederholte Tests st&#xf6;ren?">
<icon BUILTIN="help"/>
<node CREATED="1702520655931" ID="ID_841600220" MODIFIED="1702520663423" TEXT="nicht ernsthaft"/>
<node CREATED="1702520664554" ID="ID_877660147" MODIFIED="1702520677277" TEXT="es w&#xfc;rde zwar einmalig die Pool-Allocation aufbl&#xe4;hen"/>
<node CREATED="1702520678297" ID="ID_635098309" MODIFIED="1702520711121" TEXT="aber der erste &#xbb;Tick&#xab; vom n&#xe4;chsten Lauf w&#xfc;rde alle Epochen verwerfen"/>
<node CREATED="1702520712155" ID="ID_106807436" MODIFIED="1702520724974" TEXT="&#xfc;brig bliebe lediglich ein gr&#xf6;&#xdf;erer Reserve-Pool">
<node CREATED="1702520731226" ID="ID_330535639" MODIFIED="1702520744331" TEXT="Wachstums-Allokationen unterwegs fallen damit weg"/>
<node CREATED="1702520745083" ID="ID_1293740433" MODIFIED="1702520758975" TEXT="allderings ist auch die Cache-locality etwas schlechter"/>
</node>
</node>
<node CREATED="1702520800339" ID="ID_1534367942" MODIFIED="1702520874946" TEXT="&#xbb;Tick&#xab;s sind ebenfalls compulsory und haben k&#xfc;rzere Deadlines (&#x2152;s)"/>
<node CREATED="1702521020675" ID="ID_1606352058" MODIFIED="1702521027741" TEXT="watt soll der Jeitz?"/>
</node>
<node CREATED="1702520944943" ID="ID_1044437340" MODIFIED="1702521017318" TEXT="nicht compulsory und Deadline 5s">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
@ -103385,6 +103405,62 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702504155370" ID="ID_1935608101" MODIFIED="1702504198984" TEXT="&#xd83e;&#xdc32; 26% Overhead bzw. 266&#xb5;s / Step"/>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1702521111462" ID="ID_1203612377" MODIFIED="1702521127367" TEXT="sollte auf eine explizit geregelte Messung setzen">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1702521128507" ID="ID_1629592960" MODIFIED="1702521204724" TEXT="diese punktweisen Beobachtungen bleiben &#xbb;freischwebend&#xab;">
<arrowlink COLOR="#f53874" DESTINATION="ID_1445169165" ENDARROW="Default" ENDINCLINATION="69;5;" ID="Arrow_ID_927187237" STARTARROW="None" STARTINCLINATION="180;-10;"/>
</node>
<node CREATED="1702521228088" ID="ID_703076680" MODIFIED="1702521237442" TEXT="gebraucht wird ein systematischer und ostensiver Ansatz"/>
<node CREATED="1702521285352" ID="ID_1665964009" MODIFIED="1702521310768" TEXT="dieser stellt auch eine vereinfachende Abstraktion dar"/>
<node CREATED="1702521321129" ID="ID_1845336476" MODIFIED="1702521363152" TEXT="Verhalten unabh&#xe4;ngig von der Implementierung"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702521439768" ID="ID_624806850" MODIFIED="1702524856915" TEXT="erster Schritt: self-inhibition nutzen">
<icon BUILTIN="pencil"/>
<node CREATED="1702521456472" ID="ID_1942479686" MODIFIED="1702521484247" TEXT="damit der Fortschritt tats&#xe4;chlich dem Schedule folgt">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1702524831355" ID="ID_369134711" MODIFIED="1702524854572" TEXT="bestehende Funktionalit&#xe4;t vom Activity-Term herausgef&#xfc;hrt">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702524859081" ID="ID_203571442" MODIFIED="1702524877503" TEXT="Test &#x2014; wirksam?">
<icon BUILTIN="help"/>
<node CREATED="1702525345416" ID="ID_392109929" MODIFIED="1702525366979" TEXT="ja .... denke schon">
<icon BUILTIN="smiley-oh"/>
<node CREATED="1702525369509" ID="ID_605241012" MODIFIED="1702525400298">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
es gibt nur noch wenige Dependency-Ketten,
</p>
<p>
die von einem einzigen Worker durchgearbeietet werden
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1702525401353" ID="ID_1274653458" MODIFIED="1702525416941" TEXT="die meisten Invocations passieren jetzt nahe / kurz nach der nominellen Zeit"/>
<node CREATED="1702525417791" ID="ID_917292675" MODIFIED="1702525427159" TEXT="viel mehr Wechsel zwischen den Workern"/>
<node CREATED="1702525427893" ID="ID_222790056" MODIFIED="1702525452940" TEXT="Berechnungen instgesamt sp&#xe4;ter auf der Zeitachse">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
w&#228;re ja so zu erwarten gem&#228;&#223; Topologie...
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
</node>
</node>
</node>