Scheduler-test: attempt to find a viable Scheduler setup for this measurement

- better use a Test-Chain-Load without any dependencies
- schedule all at once
- employ instrumentation
- use the inner »overall time« as dependent result variable

The timing results now show an almost perfect linear dependency.
Also the inner overall time seems to omit the setup and tear-down time.
But other observed values (notably the avgConcurrency) do not line up
This commit is contained in:
Fischlurch 2024-03-07 23:29:36 +01:00
parent 2556151304
commit 605d747b8d
4 changed files with 136 additions and 9 deletions

View file

@ -461,7 +461,7 @@ namespace gear {
/* ==== Implementation of the Concept ExecutionCtx ==== */
/**
* λ-post: enqueue for time-bound execution, possibly dispatch immediately.
* λ-post: enqueue for time-bound execution, within given ExecutionCtx.
* @remark This function represents an _abstracted entrance to scheduling_
* for the ActivityLang and is relevant for recursive forwarding
* of activations and notifications. The concrete implementation

View file

@ -391,16 +391,21 @@ namespace test {
auto testLoad(size_t nodes)
{
TestChainLoad<8> testLoad{nodes};
return testLoad.seedingRule(testLoad.rule().probability(0.6).minVal(2))
.pruningRule(testLoad.rule().probability(0.44))
.weightRule(testLoad.value(1))
.setSeed(55);
TestChainLoad testLoad{nodes};
// return testLoad.seedingRule(testLoad.rule().probability(0.6).minVal(2))
// .pruningRule(testLoad.rule().probability(0.44))
// .weightRule(testLoad.value(1))
// .setSeed(55);
return testLoad.setWeight(1);
}
};
auto results = StressRig::with<Setup>()
.perform<bench::ParameterRange> (2,64);
cout<<"\"len\";\"dur\""<<endl;
for (auto val : results)
cout<<val.first<<";"<<val.second<<endl;
}

View file

@ -450,9 +450,12 @@ namespace test {
.withBaseExpense (CONF::BASE_EXPENSE)
.withSchedNotify (CONF::SCHED_NOTIFY)
.withSchedDepends(CONF::SCHED_DEPENDS)
.withAdaptedSchedule(stressFac, CONF::CONCURRENCY);
point.second = testSetup.launch_and_wait() / 1000;
cout << "x="<<point.first<<" y="<<point.second<<endl;
.withAdaptedSchedule(stressFac, CONF::CONCURRENCY)
.withInstrumentation();
double testMillis = testSetup.launch_and_wait() / 1000;
auto stat = testSetup.getInvocationStatistic();
point.second = stat.coveredTime / 1000;
cout << "x="<<point.first<<"\t y="<<point.second<<"\t e2e="<<testMillis<<"\t conc:"<<stat.avgConcurrency<<" ∅t="<<stat.activeTime/stat.activationCnt<<" ("<<stat.activationCnt<<")"<<endl;
}
public:

View file

@ -111796,6 +111796,125 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1709833825970" ID="ID_775213204" MODIFIED="1709833841341" TEXT="Me&#xdf;anordnung besser verstehen">
<icon BUILTIN="yes"/>
<node CREATED="1709833848928" ID="ID_923986084" MODIFIED="1709833855149" TEXT="was wird hier gemessen?"/>
<node CREATED="1709833855842" ID="ID_1666779954" MODIFIED="1709833922023" TEXT="Welche Rolle spielt das Hochfahren?"/>
<node CREATED="1709833971253" ID="ID_1587571989" MODIFIED="1709833985086" TEXT="Welche Rolle spielt das Schedule?">
<node CREATED="1709834464275" ID="ID_1181890935" MODIFIED="1709834487308" TEXT="Abh&#xe4;ngigkeiten f&#xfc;hren zu Limitierungen"/>
<node CREATED="1709834500102" ID="ID_65502962" MODIFIED="1709834506122" TEXT="Contention f&#xfc;hrt zu Limitierungen"/>
</node>
<node CREATED="1709834519627" ID="ID_1951356808" MODIFIED="1709834522280" TEXT="Me&#xdf;methode">
<node CREATED="1709834523195" ID="ID_1201151791" MODIFIED="1709834543765" TEXT="geordnetes Schedule an den breaking Point bringen"/>
<node CREATED="1709834544352" ID="ID_620498652" MODIFIED="1709834560018" TEXT="einen definierten R&#xfc;ckstau abarbeiten"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1709834048527" ID="ID_1151259698" MODIFIED="1709834057668" TEXT="Messung mit m&#xf6;glichst elastischem Schedule">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1709834821867" ID="ID_1521098376" MODIFIED="1709834828031" TEXT="Eigenschaften des Schedule">
<node CREATED="1709834829355" ID="ID_736433278" MODIFIED="1709834836157" TEXT="keine Abh&#xe4;ngigkeiten"/>
<node CREATED="1709834836811" ID="ID_1468908878" MODIFIED="1709834863174" TEXT="Vollauslastung durch &#xdc;berschu&#xdf; von Jobs">
<node CREATED="1709854372782" ID="ID_1392604276" MODIFIED="1709854381284" TEXT="also alle Job in einen Level"/>
<node CREATED="1709854394836" ID="ID_572703771" MODIFIED="1709854407547" TEXT="und kein adaptedSchedule"/>
</node>
<node CREATED="1709834863806" ID="ID_1687712627" MODIFIED="1709834871321" TEXT="Planung bereits komplett abgeschlossen"/>
<node CREATED="1709834903608" ID="ID_467296527" MODIFIED="1709852319170" TEXT="Messung nur &#xfc;ber die Last-Jobs">
<linktarget COLOR="#cf8a97" DESTINATION="ID_467296527" ENDARROW="Default" ENDINCLINATION="565;-16;" ID="Arrow_ID_910447284" SOURCE="ID_1235994680" STARTARROW="None" STARTINCLINATION="244;-42;"/>
</node>
<node CREATED="1709834934783" ID="ID_1078458749" MODIFIED="1709834950114" TEXT="idealerweise: Setup-Overhead mit erfassen"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1709848934783" ID="ID_1361934958" MODIFIED="1709848952540" TEXT="Beschr&#xe4;nkungen des etablierten Test-Setup">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1709848957347" ID="ID_223181863" MODIFIED="1709848991586" TEXT="Scheduling an Levels gebunden"/>
<node CREATED="1709848992150" ID="ID_1428191236" MODIFIED="1709849010799" TEXT="Levels fest an nomineller Concurrency orientiert"/>
<node CREATED="1709849095114" ID="ID_1213436857" MODIFIED="1709849105898" TEXT="wake-up-Job als Dependency verdrahtet">
<node CREATED="1709852101733" ID="ID_224601368" MODIFIED="1709852106201" TEXT="l&#xe4;&#xdf;t sich aber abmildern"/>
<node CREATED="1709852106705" ID="ID_1753078876" MODIFIED="1709852142659" TEXT="zun&#xe4;chst: Aufwand f&#xfc;r das Notification-POST">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
einmal pr&#252;fen ob man das GroomingToken hat, und dann ein Enqueue
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1709852150884" ID="ID_856564005" MODIFIED="1709852263009" TEXT="wird mit dem Zeitpunkt des Nachfolgers gescheduled">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
aber nur, wenn man Dependencies nicht &#187;unlimitiert&#171; scheduled. Aber selbst dann werden die Notifications mit &#187;now&#171; gescheduled, und bei einer (hier angestrebten) &#220;berlast-Situation sind alle derzeit zur&#252;ckgestauten Jobs zeitlich vorher einsortiert
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1709852267236" ID="ID_487395663" MODIFIED="1709852278970" TEXT="und dieser sitzt auf letztem Level+1">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1709852284698" ID="ID_1235994680" MODIFIED="1709852325794" TEXT="Wichtig aber: Zeitmessung mu&#xdf; sich auf die reinen Arbeits-Jobs beschr&#xe4;nken">
<arrowlink COLOR="#cf8a97" DESTINATION="ID_467296527" ENDARROW="Default" ENDINCLINATION="565;-16;" ID="Arrow_ID_910447284" STARTARROW="None" STARTINCLINATION="244;-42;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1709856953519" ID="ID_1122506217" MODIFIED="1709857478776" TEXT="Setup-1">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1709856984954" ID="ID_1050466430" MODIFIED="1709857023875" TEXT="verwende Chain-Load ohne Topologie">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1709857025157" ID="ID_872370266" MODIFIED="1709857116004" TEXT="nur setWeight(1) und BASE_LOAD=500us">
<icon BUILTIN="info"/>
</node>
<node COLOR="#338800" CREATED="1709857117892" ID="ID_703667645" MODIFIED="1709857124733" TEXT="verwende Instrumentation">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1709857126767" ID="ID_657270249" MODIFIED="1709857146648" TEXT="&#x27f6; coveredTime als y-Wert"/>
<node CREATED="1709857147380" ID="ID_656013327" MODIFIED="1709857152118" TEXT="Ergebnisse">
<node CREATED="1709857153804" ID="ID_573482540" MODIFIED="1709857164302" TEXT="eine wundersch&#xf6;ne Kurve">
<node CREATED="1709857165163" ID="ID_1141638970" MODIFIED="1709857172661" TEXT="geht nahezu durch den Urspung"/>
<node CREATED="1709857173321" ID="ID_1210955812" MODIFIED="1709857442437" TEXT="knapp unter 4ms f&#xfc;r 64 Nodes &#x27f9; w&#xe4;re optimale concurrency">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
64*0.5 / 8 cores
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1709857227217" ID="ID_1666459843" MODIFIED="1709857234257" TEXT="aber andere Werte passen &#xfc;berhaupt nicht">
<icon BUILTIN="broken-line"/>
<node CREATED="1709857239135" ID="ID_294844917" MODIFIED="1709857260129" TEXT="avgConcurrency wird nahezu Null angezeigt"/>
<node CREATED="1709857260813" ID="ID_412697694" MODIFIED="1709857294723" TEXT="durchschnittliche Node-Zeiten 1.9 ... 3ms"/>
<node CREATED="1709857301560" ID="ID_1659404445" MODIFIED="1709857321709">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
und eigentlich hatte ich den <b>Pool auf 4 Worker limitiert</b>
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1709857448450" ID="ID_560141617" MODIFIED="1709857475484" TEXT="&#x27f9; Herausfinden was w&#xe4;hrend dem Lauf tats&#xe4;chlich passiert"/>
</node>
</node>
</node>
</node>
</node>
</node>