Scheduler-test: further configuration options for flexible testing
The next goal is to determine basic performance characteristics of the Scheduler implementation written thus far; to help with these investigations some added flexibility seems expedient - the ability to define a per-job base expense - added flexibility regarding the scheduling of dependencies This changeset introduces configuration options
This commit is contained in:
parent
032e4f6db5
commit
54f238c510
2 changed files with 157 additions and 12 deletions
|
|
@ -191,7 +191,10 @@ namespace test {
|
|||
const microseconds LOAD_DEFAULT_TIME = 100us; ///< default time delay produced by ComputationalLoad at `Node.weight==1`
|
||||
const size_t LOAD_DEFAULT_MEM_SIZE = 1000; ///< default allocation base size used if ComputationalLoad.useAllocation
|
||||
const Duration SCHEDULE_LEVEL_STEP{_uTicks(1ms)}; ///< time budget to plan for the calculation of each »time level« of jobs
|
||||
const Duration SCHEDULE_NODE_STEP{Duration::NIL}; ///< additional time step to include in the plan for each job (node).
|
||||
const Duration SCHEDULE_PLAN_STEP{_uTicks(100us)}; ///< time budget to reserve for each node to be planned and scheduled
|
||||
const bool SCHEDULE_DEPENDENCY = false; ///< explicitly schedule a dependent job (or rely on NOTIFY)
|
||||
const bool SCHEDULE_NOTIFY = true; ///< explicitly set notify dispatch time to the dependencie's start time.
|
||||
|
||||
inline uint
|
||||
defaultConcurr()
|
||||
|
|
@ -1666,7 +1669,10 @@ namespace test {
|
|||
lib::UninitialisedDynBlock<ScheduleSpec> schedule_;
|
||||
|
||||
FrameRate levelSpeed_{1, SCHEDULE_LEVEL_STEP};
|
||||
FrameRate nodeSpeed_{1, SCHEDULE_NODE_STEP};
|
||||
FrameRate planSpeed_{1, SCHEDULE_PLAN_STEP};
|
||||
double schedNotify_{SCHEDULE_NOTIFY? 1.0:0.0};
|
||||
bool schedDepends_{SCHEDULE_DEPENDENCY};
|
||||
uint blockLoadFactor_{2};
|
||||
size_t chunkSize_{DEFAULT_CHUNKSIZE};
|
||||
TimeVar startTime_{Time::ANYTIME};
|
||||
|
|
@ -1793,13 +1799,6 @@ namespace test {
|
|||
|
||||
/* ===== Setter / builders for custom configuration ===== */
|
||||
|
||||
ScheduleCtx&&
|
||||
withLevelDuration (microseconds plannedTime_per_level)
|
||||
{
|
||||
levelSpeed_ = FrameRate{1, Duration{_uTicks(plannedTime_per_level)}};
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withPlanningStep (microseconds planningTime_per_node)
|
||||
{
|
||||
|
|
@ -1824,9 +1823,44 @@ namespace test {
|
|||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withJobDeadline (microseconds deadline_after_start)
|
||||
withUpfrontPlanning()
|
||||
{
|
||||
withChunkSize (chainLoad_.size());
|
||||
preRoll_ *= UPFRONT_PLANNING_BOOST;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withLevelDuration (microseconds fixedTime_per_level)
|
||||
{
|
||||
levelSpeed_ = FrameRate{1, Duration{_uTicks(fixedTime_per_level)}};
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withBaseExpense (microseconds fixedTime_per_node)
|
||||
{
|
||||
nodeSpeed_ = FrameRate{1, Duration{_uTicks(fixedTime_per_node)}};
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withScheduleDependency (bool explicitly)
|
||||
{
|
||||
schedDepends_ = explicitly;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withScheduleNotify (double degree)
|
||||
{
|
||||
schedNotify_ = degree;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withBaseExpense ()
|
||||
{
|
||||
deadline_ = deadline_after_start;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
|
@ -1842,10 +1876,9 @@ namespace test {
|
|||
}
|
||||
|
||||
ScheduleCtx&&
|
||||
withUpfrontPlanning()
|
||||
withJobDeadline (microseconds deadline_after_start)
|
||||
{
|
||||
withChunkSize (chainLoad_.size());
|
||||
preRoll_ *= UPFRONT_PLANNING_BOOST;
|
||||
deadline_ = deadline_after_start;
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107889,6 +107889,118 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704495633669" ID="ID_640045443" MODIFIED="1704495650611" TEXT="Ergänzungen Steuerung des Test-Setup">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1704495651940" ID="ID_1057017478" MODIFIED="1704495667220" TEXT="Bestimmung">
|
||||
<node CREATED="1704495668109" ID="ID_1596167188" MODIFIED="1704495695017" TEXT="Möglichkeiten ergeben sich aus der konkreten Konstruktion"/>
|
||||
<node CREATED="1704495695581" ID="ID_1523037500" MODIFIED="1704495717221" TEXT="sie ermöglichen Variabilität zum »Ausleuchten« der Eigenschaften"/>
|
||||
</node>
|
||||
<node CREATED="1704495722857" ID="ID_768184682" MODIFIED="1704495725508" TEXT="Freiheitsgrade">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704495728704" ID="ID_1784002890" MODIFIED="1704496452721" TEXT="einen Basis-Aufwand pro Node(Job) vorsehen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704495783513" ID="ID_1373430396" MODIFIED="1704496452722" TEXT="Folge-Jobs nicht explizit sondern nur per Dependency planen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704495961945" ID="ID_1860447724" MODIFIED="1704496452722" TEXT="Zeitpunkt für Folge-Jobs nicht|teilweise|explizit beschränken">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1704496070203" HGAP="27" ID="ID_1489336677" MODIFIED="1704496414528" TEXT="zur Untersuchung als graduellen Parameter auslegen" VSHIFT="6">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
eigentlich wäre das eine Ja/Nein-Entscheidung, aber da sie über einen Zeit-Parameter gesteuert wird, kann man hier alles zwischen Time::ANYTIME und dem nominellen Zeitpunkt des Folge-Jobs explizit setzen; dieser Parameter hat sich <i>akzidentell aus der Implementierung</i>  ergeben und wird im NOTIFY-Verb gespeichert; das vorliegen dieses Parameters ist es auch, wodurch der eigentliche explizite Trigger für den Folge-Job wegfallen kann. Setzt man hier die nominelle Zeit ein, so wird das NOTIFY tatsächlich erst zu dieser Zeit zugestellt, und das bedeutet, daß auch Dependency-Ketten nach dem nominellen Schedule „getaktet“ sind. Im anderen Extremfall gibt es keine Limitierung und das NOTIFY wird vom Scheduler zur nächstmöglichen Gelegenheit zugestellt. Sofern allerdings die Berechnung ohnehin im Verzug ist, spielt diese Unterscheidung keine Rolle mehr (dann wird nämlich immer sofort getriggert); es könnte aber für zusätzlichen Flexibilitäts-Puffer sorgen, wenn ein Schedule zeitweilig zu dünn besetzt ist, denn erst dadurch könnte der Scheduler sogar vorzeitig fertig werden.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704496443809" ID="ID_1582406331" MODIFIED="1704500310355" TEXT="Implementierung">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704496455415" ID="ID_259562973" MODIFIED="1704496558458" TEXT="das macht leider der ScheduleCtx und Planugs-Job ziemlich komplex...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
deshalb habe ich gezögert, diese Möglichkeit gleich vorzusehen; letztlich aber wiegt das »Ausleuchten« von Verhaltensmustern im Test mehr (und ich erwarte keinen westentlichen Einfluß auf die Performance)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704496572319" ID="ID_1195771220" MODIFIED="1704498356010" TEXT="Basis-Aufwand">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1704496583222" ID="ID_1103812174" MODIFIED="1704498359764" TEXT="Builder-Parameter vorsehen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1704498304154" ID="ID_1330026678" MODIFIED="1704498336224" TEXT="withBaseExpense ⟼ nodeSpeed_">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</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>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1704498344371" ID="ID_33654612" MODIFIED="1704498363401" TEXT="nodeSpeed_ auf alle Schedules aufschlagen">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496625440" ID="ID_1513875198" MODIFIED="1704496631952" TEXT="Dependency-Planung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1704496633181" ID="ID_621580292" MODIFIED="1704496661738" TEXT="flexibiliisiert den Zeitpunkt an dem der Job tatsächlich abgegeben wird">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496668636" ID="ID_373319632" MODIFIED="1704496700735" TEXT="er wird verzögert bis zum Setzen der Dependencies">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#5b280f" CREATED="1704496701638" ID="ID_1403516791" MODIFIED="1704496853419" TEXT="Gefahr: verzögerte Planung — besteht nicht mehr">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das war anfangs ein erhebliches Problem, bis ich mich dazu durchgerungen hatte, den unmittelbaren Dispatch aufzugeben. Seither kann ein Job auch verspätet abgesetzt werden, und wandert dann sofort an die Spitze der Queue. Und da wir das komplette Array mit den Activity-Termen Aufrufu-übergreifend erhalten, können dann eben Jobs auch »schleppend« abgesetzt werden. Genau das nutzen wir hier aus
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496854338" ID="ID_828353402" MODIFIED="1704496907472" TEXT="an der Stelle prüfen, ob die Node schon Vorläufer hat...">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496879110" ID="ID_1613607947" MODIFIED="1704496907473" TEXT="...wenn ja, kann der Nachfolge-Job komplett ausgelassen werden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496923552" ID="ID_612925354" MODIFIED="1704496938479" TEXT="Anpassungen im ScheduleSpec (SchedulerAPI) notwendig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496939542" ID="ID_1389691721" MODIFIED="1704497070429" TEXT="Activity-Term nun »on-demand« erzeugen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
bisher mußte er explizit per post() erzeugt werden — nun meint post() wirklich die Übergabe an den Scheduler, und der Term wird hier nur noch erzeugt, wenn er nicht schon besteht. Dies rechtfertigt dann auch das optional<ActitityTerm> und wirkt so viel natürlicher
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704497136967" ID="ID_273051296" MODIFIED="1704497151404" TEXT="Zeitlimit im NOTIFY auf korrekte Handhabung prüfen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704497499531" ID="ID_1985146635" MODIFIED="1704497535951" TEXT="Möglichkeit für negatives Delta im StressTestRig prüfen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704497119360" ID="ID_1584751968" MODIFIED="1704500287956" TEXT="Builder-Parameter vorsehen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1704500223713" ID="ID_1326282155" MODIFIED="1704500283727" TEXT="withScheduleDependency ⟼ schedDepends_">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1704500233716" ID="ID_901591846" MODIFIED="1704500283727" TEXT="withScheduleNotify ⟼ schedNotify_ 0.0 ... 1.0">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702945804704" ID="ID_996535642" MODIFIED="1703423856728" TEXT="Beobachtungen aus erweiterten Testläufen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue