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:
parent
3e84224f74
commit
75b5eea2d3
4 changed files with 104 additions and 11 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -103330,7 +103330,8 @@ Date:   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µs / Step"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1702429190108" FOLDED="true" ID="ID_1445169165" MODIFIED="1702429814538" TEXT="diese Auswertung ist wenig aussagekräftig">
|
||||
<node COLOR="#5b280f" CREATED="1702429190108" FOLDED="true" ID="ID_1445169165" MODIFIED="1702521434467" TEXT="diese Auswertung ist wenig aussagekrä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ä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:   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ängere Deadline ≔ 1sec"/>
|
||||
<node CREATED="1702503090546" ID="ID_146168524" MODIFIED="1702503112917" TEXT="markiere den Job als »compulsory«">
|
||||
<node COLOR="#5b280f" CREATED="1702503090546" FOLDED="true" ID="ID_146168524" MODIFIED="1702521085220" 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="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'n'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ä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önnte das wiederholte Tests stö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ürde zwar einmalig die Pool-Allocation aufblähen"/>
|
||||
<node CREATED="1702520678297" ID="ID_635098309" MODIFIED="1702520711121" TEXT="aber der erste »Tick« vom nächsten Lauf würde alle Epochen verwerfen"/>
|
||||
<node CREATED="1702520712155" ID="ID_106807436" MODIFIED="1702520724974" TEXT="übrig bliebe lediglich ein größ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="»Tick«s sind ebenfalls compulsory und haben kürzere Deadlines (⅒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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1702504155370" ID="ID_1935608101" MODIFIED="1702504198984" TEXT="�� 26% Overhead bzw. 266µ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 »freischwebend«">
|
||||
<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ä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ächlich dem Schedule folgt">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1702524831355" ID="ID_369134711" MODIFIED="1702524854572" TEXT="bestehende Funktionalität vom Activity-Term herausgeführt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702524859081" ID="ID_203571442" MODIFIED="1702524877503" TEXT="Test — 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äter auf der Zeitachse">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
wäre ja so zu erwarten gemäß Topologie...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue