Scheduler-test: implement base offset per node

...actually difficult to integrate into the existing scheme,
which is entirely level-based. Can only be added to the individual Jobs,
not to the planning and completion-jobs — which actually shouldn't be a problem,
since it is beneficial to dispatch the planning runs earlier
This commit is contained in:
Fischlurch 2024-01-05 23:06:56 +01:00
parent 54f238c510
commit 001aa829c5
2 changed files with 36 additions and 6 deletions

View file

@ -1669,8 +1669,8 @@ namespace test {
lib::UninitialisedDynBlock<ScheduleSpec> schedule_;
FrameRate levelSpeed_{1, SCHEDULE_LEVEL_STEP};
FrameRate nodeSpeed_{1, SCHEDULE_NODE_STEP};
FrameRate planSpeed_{1, SCHEDULE_PLAN_STEP};
TimeVar nodeExpense_{SCHEDULE_NODE_STEP};
double schedNotify_{SCHEDULE_NOTIFY? 1.0:0.0};
bool schedDepends_{SCHEDULE_DEPENDENCY};
uint blockLoadFactor_{2};
@ -1696,7 +1696,7 @@ namespace test {
{
schedule_[idx] = scheduler_.defineSchedule(calcJob (idx,level))
.manifestation(manID_)
.startTime (jobStartTime(level))
.startTime (jobStartTime(level, idx))
.lifeWindow (deadline_)
.post();
}
@ -1793,7 +1793,8 @@ namespace test {
double
getExpectedEndTime()
{
return _raw(startTimes_.back() - startTimes_.front());
return _raw(startTimes_.back() - startTimes_.front()
+ Duration{nodeExpense_}*chainLoad_.size());
}
@ -1840,7 +1841,7 @@ namespace test {
ScheduleCtx&&
withBaseExpense (microseconds fixedTime_per_node)
{
nodeSpeed_ = FrameRate{1, Duration{_uTicks(fixedTime_per_node)}};
nodeExpense_ = _uTicks(fixedTime_per_node);
return move(*this);
}
@ -2030,10 +2031,11 @@ namespace test {
}
Time
jobStartTime (size_t level)
jobStartTime (size_t level, size_t nodeIDX =0)
{
ENSURE (level < startTimes_.size());
return startTimes_[level];
return startTimes_[level]
+ nodeExpense_ * nodeIDX;
}
Time

View file

@ -107939,9 +107939,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496590349" ID="ID_55304707" MODIFIED="1704496621212" TEXT="Node-ID mit in die Zeitbestimmung geben">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1704502374254" ID="ID_1148804575" MODIFIED="1704502440579" TEXT="und zwar nur als optionaler 2.Parameter">
<linktarget COLOR="#5c6e82" DESTINATION="ID_1148804575" ENDARROW="Default" ENDINCLINATION="279;-12;" ID="Arrow_ID_1130714740" SOURCE="ID_261862992" STARTARROW="None" STARTINCLINATION="302;13;"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1704498344371" ID="ID_33654612" MODIFIED="1704498363401" TEXT="nodeSpeed_ auf alle Schedules aufschlagen">
<icon BUILTIN="flag-pink"/>
<node CREATED="1704502220043" ID="ID_596251248" MODIFIED="1704502237509" TEXT="pa&#xdf;t nicht gut in das insgesamt Level-basierte Planungs-Schema"/>
<node CREATED="1704502239345" ID="ID_1983557540" MODIFIED="1704502271966" TEXT="da es ein Ctx-Parameter ist, kann man es nicht ohne Weiteres in das Zeitger&#xfc;st einarbeiten"/>
<node CREATED="1704502325853" ID="ID_229349758" MODIFIED="1704502347414" TEXT="Node-Info ist bei der Vorberechung dieses Zeitger&#xfc;sts gar nicht (mehr) vorhanden"/>
<node CREATED="1704502350330" ID="ID_261862992" MODIFIED="1704502440579" TEXT="&#x27f9; kann man nur (optional) beim einzelnen Job direkt aufschlagen">
<arrowlink COLOR="#5c6e82" DESTINATION="ID_1148804575" ENDARROW="Default" ENDINCLINATION="279;-12;" ID="Arrow_ID_1130714740" STARTARROW="None" STARTINCLINATION="302;13;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496625440" ID="ID_1513875198" MODIFIED="1704496631952" TEXT="Dependency-Planung">
@ -110599,6 +110608,25 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1704130733890" ID="ID_922119452" MODIFIED="1704130743862" TEXT="Beobachtungen zum Lasttest-Setup">
<icon BUILTIN="hourglass"/>
<node CREATED="1704502912253" ID="ID_1397490944" MODIFIED="1704502939942" TEXT="starke Fluktuationen">
<node CREATED="1704502942058" ID="ID_709204137" MODIFIED="1704502965731" TEXT="verursacht durch Zusammentreffen von Planungs-Job und Node-wake-Up + Contention"/>
<node CREATED="1704502966511" ID="ID_1561993195" MODIFIED="1704502993624" TEXT="wird aber danach wieder rasch aufgefangen, wenn gen&#xfc;gend &#xbb;Luft&#xab; im Schedule ist"/>
<node CREATED="1704503002882" ID="ID_893513147" MODIFIED="1704503021717" TEXT="&#x27f9; &#xdc;berlastung zeigt sich indem diese Fluktuationen &#xbb;durchschlagen&#xab;"/>
</node>
<node CREATED="1704503038702" ID="ID_1005585769" MODIFIED="1704503122646">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
die typische Test-Load ~ 500&#181;s braucht im Scheduler-Kontext oft doppelt so lange als kalibriert
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>