Scheduler-test: optionally allow to propagate immediately

This is just another (obvious) degree of freedom, which could be
interesting to explore in stress testing, while probably not of much
relevance in practice (if a job is expected to become runable earlier,
in can as well be just scheduled earlier).

Some experimentation shows that the timing measurements exhibit more
fluctuations, but also slightly better times when pressure is low, which
is pretty much what I'd expect. When raising pressure, the average
times converge towards the same time range as observed with time bound
propagation.

Note that enabling this variation requires to wire a boolean switch
over various layers of abstraction; arguably this is an unnecessary
complexity and could be retracted once the »experimentation phase«
is over.

This completes the preparation of a Scheduler Stress-Test setup.
This commit is contained in:
Fischlurch 2024-01-08 22:58:16 +01:00
parent 0065dabed1
commit 3fb4baefd5
6 changed files with 108 additions and 62 deletions

View file

@ -171,12 +171,13 @@ namespace gear {
* Term the prerequisite by invoking #appendNotificationTo(targetTerm).
*/
Term&
expectNotification (Activity& notificationSrc)
expectNotification (Activity& notificationSrc, bool unlimitedTime =false)
{
REQUIRE (notificationSrc.is (Activity::NOTIFY));
setupGate();
gate_->incDependencies();
notificationSrc.setNotificationTarget (gate_, Time{post_->data_.timeWindow.life});
Time triggerTimeStart{unlimitedTime? Time::ANYTIME : post_->data_.timeWindow.life};
notificationSrc.setNotificationTarget (gate_, triggerTimeStart);
return *this;
}
@ -187,11 +188,11 @@ namespace gear {
* been activated and processed up to emitting the inserted `NOTIFY`.
*/
Term&
appendNotificationTo (Term& targetTerm)
appendNotificationTo (Term& targetTerm, bool unlimitedTime =false)
{
Activity& success = alloc_.create (Activity::NOTIFY);
insert (findTail (callback_? callback_ : invoke_), &success);
targetTerm.expectNotification (success);
targetTerm.expectNotification (success, unlimitedTime);
return *this;
}

View file

@ -205,8 +205,8 @@ namespace gear {
/** build Activity chain and hand-over to the Scheduler. */
ScheduleSpec post();
ScheduleSpec linkToSuccessor (ScheduleSpec&);
ScheduleSpec linkToPredecessor(ScheduleSpec&);
ScheduleSpec linkToSuccessor (ScheduleSpec&, bool unlimitedTime =false);
ScheduleSpec linkToPredecessor(ScheduleSpec&, bool unlimitedTime =false);
private:
void maybeBuildTerm();
};
@ -569,20 +569,20 @@ namespace gear {
}
inline ScheduleSpec
ScheduleSpec::linkToSuccessor (ScheduleSpec& succSpec)
ScheduleSpec::linkToSuccessor (ScheduleSpec& succSpec, bool unlimitedTime)
{
this->maybeBuildTerm();
succSpec.maybeBuildTerm();
term_->appendNotificationTo (*succSpec.term_);
term_->appendNotificationTo (*succSpec.term_, unlimitedTime);
return move(*this);
}
inline ScheduleSpec
ScheduleSpec::linkToPredecessor (ScheduleSpec& predSpec)
ScheduleSpec::linkToPredecessor (ScheduleSpec& predSpec, bool unlimitedTime)
{
predSpec.maybeBuildTerm();
this->maybeBuildTerm();
predSpec.term_->appendNotificationTo (*term_);
predSpec.term_->appendNotificationTo (*term_, unlimitedTime);
return move(*this);
}

View file

@ -71,6 +71,7 @@ namespace test {
* @see SchedulerActivity_test
* @see SchedulerInvocation_test
* @see SchedulerCommutator_test
* @see stress-test-rig.hpp
*/
class SchedulerStress_test : public Test
{
@ -145,8 +146,11 @@ namespace test {
/** @test TODO build a scheme to adapt the schedule to expected runtime.
* @todo WIP 12/23 🔁 define implement
/** @test build a scheme to adapt the schedule to expected runtime.
* - as in many other tests, use the massively forking load pattern
* - demonstrate how TestChainLoad computes an idealised level expense
* - verify how schedule times are derived from this expense sequence
* @todo WIP 12/23 define implement
*/
void
setup_systematicSchedule()
@ -164,7 +168,6 @@ namespace test {
cpuLoad.calibrate();
double micros = cpuLoad.invoke();
SHOW_EXPR(micros);
CHECK (micros < 550);
CHECK (micros > 450);
@ -285,7 +288,17 @@ SHOW_EXPR(micros);
/** @test TODO determine the breaking point towards scheduler overload
* @todo WIP 1/24 🔁 define implement
* - use the integrated StressRig
* - demonstrate how parameters can be tweaked
* - perform a run, leading to a binary search for the breaking point
* @note on my machine, I observe stress factors close below 0.5, due to the fact
* that the ComputationalLoad typically takes 2 times as long in concurrent
* usage compared to its calibration, which is done in a tight loop. This
* is strange and may well be due to some peculiarity of my system. Which
* also implies that this test's behaviour might be difficult to verify,
* other than by qualitative interpretation of the log output on STDOUT.
* @see stress-test-rig.hpp
* @todo WIP 1/24 define implement
*/
void
search_breaking_point()
@ -303,10 +316,6 @@ SHOW_EXPR(micros);
};
auto [stress,delta,time] = StressRig::with<Setup>().searchBreakingPoint();
SHOW_EXPR(stress)
SHOW_EXPR(delta)
SHOW_EXPR(time)
CHECK (delta > 2.0);
CHECK (0.55 > stress and stress > 0.4);
}

View file

@ -161,6 +161,7 @@ namespace test {
{
testSetup.withLoadTimeBase(CONF::LOAD_BASE)
.withBaseExpense (CONF::BASE_EXPENSE)
.withSchedNotify (CONF::SCHED_NOTIFY)
.withSchedDepends(CONF::SCHED_DEPENDS)
.withAdaptedSchedule(stressFac, CONF::CONCURRENCY);
}
@ -181,11 +182,11 @@ namespace test {
avgT += runTime[i];
}
avgT /= CONF::REPETITIONS;
avgD = fabs (avgT-expT);
avgD = (avgT-expT); // can be < 0
for (uint i=0; i<CONF::REPETITIONS; ++i)
{
sdev += sqr (runTime[i] - avgT);
double delta = fabs (runTime[i] - expT);
double delta = (runTime[i] - expT);
bool fail = (delta > CONF::FAIL_LIMIT);
if (fail)
++ pf;
@ -331,6 +332,7 @@ namespace test {
usec LOAD_BASE = 500us;
usec BASE_EXPENSE = 0us;
bool SCHED_NOTIFY = true;
bool SCHED_DEPENDS = false;
uint CONCURRENCY = work::Config::getDefaultComputationCapacity();
double EPSILON = 0.01; ///< error bound to abort binary search

View file

@ -1673,7 +1673,7 @@ namespace test {
FrameRate levelSpeed_{1, SCHEDULE_LEVEL_STEP};
FrameRate planSpeed_{1, SCHEDULE_PLAN_STEP};
TimeVar nodeExpense_{SCHEDULE_NODE_STEP};
double schedNotify_{SCHED_NOTIFY? 1.0:0.0};
bool schedNotify_{SCHED_NOTIFY};
bool schedDepends_{SCHED_DEPENDS};
uint blockLoadFactor_{2};
size_t chunkSize_{DEFAULT_CHUNKSIZE};
@ -1713,7 +1713,8 @@ namespace test {
{
size_t predIdx = chainLoad_.nodeID (pred);
size_t succIdx = chainLoad_.nodeID (succ);
schedule_[predIdx].linkToSuccessor (schedule_[succIdx]);
bool unlimitedTime = not schedNotify_;
schedule_[predIdx].linkToSuccessor (schedule_[succIdx], unlimitedTime);
}
/** continue planning: schedule follow-up planning job */
@ -1733,7 +1734,7 @@ namespace test {
.startTime(jobStartTime (levelDone+1))
.lifeWindow(SAFETY_TIMEOUT)
.post()
.linkToPredecessor (schedule_[lastNodeIDX])
.linkToPredecessor (schedule_[lastNodeIDX], not schedNotify_)
; // Setup wait-dependency on last computation
}
@ -1859,9 +1860,9 @@ namespace test {
}
ScheduleCtx&&
withSchedNotify (double degree)
withSchedNotify (bool doSetTime =true)
{
schedNotify_ = degree;
schedNotify_ = doSetTime;
return move(*this);
}

View file

@ -107645,8 +107645,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702945662283" ID="ID_557005311" MODIFIED="1704134638849" TEXT="M&#xf6;glichkeit f&#xfc;r hierauf abstellendes genaues Scheduling">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1702945662283" FOLDED="true" ID="ID_557005311" MODIFIED="1704762745930" TEXT="M&#xf6;glichkeit f&#xfc;r hierauf abstellendes genaues Scheduling">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702945698917" ID="ID_617955437" MODIFIED="1704144780465" TEXT="ScheduleCtx stellt dieses Feature bereit">
<icon BUILTIN="button_ok"/>
<node CREATED="1703797401009" ID="ID_1091284884" MODIFIED="1703797408236" TEXT="implementiert durch eine LUT"/>
@ -107733,8 +107733,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704130400942" ID="ID_1446554344" MODIFIED="1704130409312" TEXT="Test-Parametrisierung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1704130400942" ID="ID_1446554344" MODIFIED="1704762721194" TEXT="Test-Parametrisierung">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702945731584" ID="ID_572123244" MODIFIED="1704151052631" TEXT="stress-Faktor relativ zu diesem Schema">
<icon BUILTIN="button_ok"/>
</node>
@ -107751,13 +107751,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704130413244" ID="ID_899448993" MODIFIED="1704130422596" TEXT="zus&#xe4;tziches Einzel-Stepping">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1704130413244" ID="ID_899448993" MODIFIED="1704762719893" TEXT="zus&#xe4;tziches Einzel-Stepping">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702946185508" ID="ID_857882482" MODIFIED="1704216915880" TEXT="darauf aufbauend: Stre&#xdf;test-Mechanismus entwicklen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1702946185508" FOLDED="true" ID="ID_857882482" MODIFIED="1704762747719" TEXT="darauf aufbauend: Stre&#xdf;test-Mechanismus entwicklen">
<icon BUILTIN="button_ok"/>
<node CREATED="1702946236869" ID="ID_1475819731" MODIFIED="1704130799415">
<richcontent TYPE="NODE"><html>
<head/>
@ -107824,7 +107824,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1704243593362" ID="ID_1513298833" MODIFIED="1704316330671" TEXT="Statistik-Berechnung integrieren">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1704243607600" ID="ID_1968188887" MODIFIED="1704331913127" TEXT="Lib-Implementierung: bin&#xe4;re Suche">
<node COLOR="#338800" CREATED="1704243607600" FOLDED="true" ID="ID_1968188887" MODIFIED="1704331913127" TEXT="Lib-Implementierung: bin&#xe4;re Suche">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1704316333600" ID="ID_198671243" MODIFIED="1704322903614" TEXT="Basis-Algo">
<icon BUILTIN="button_ok"/>
@ -107889,35 +107889,26 @@ Date:&#160;&#160;&#160;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&#xe4;nzungen Steuerung des Test-Setup">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1704495633669" FOLDED="true" ID="ID_640045443" MODIFIED="1704762759068" TEXT="Erg&#xe4;nzungen Steuerung des Test-Setup">
<icon BUILTIN="button_ok"/>
<node CREATED="1704495651940" ID="ID_1057017478" MODIFIED="1704495667220" TEXT="Bestimmung">
<node CREATED="1704495668109" ID="ID_1596167188" MODIFIED="1704495695017" TEXT="M&#xf6;glichkeiten ergeben sich aus der konkreten Konstruktion"/>
<node CREATED="1704495695581" ID="ID_1523037500" MODIFIED="1704495717221" TEXT="sie erm&#xf6;glichen Variabilit&#xe4;t zum &#xbb;Ausleuchten&#xab; 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">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1704495722857" ID="ID_768184682" MODIFIED="1704762756438" TEXT="Freiheitsgrade">
<icon BUILTIN="forward"/>
<node COLOR="#435e98" CREATED="1704495728704" ID="ID_1784002890" MODIFIED="1704762689293" 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">
<node COLOR="#435e98" CREATED="1704495783513" ID="ID_1373430396" MODIFIED="1704762689293" 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&#xfc;r Folge-Jobs nicht|teilweise|explizit beschr&#xe4;nken">
<node COLOR="#435e98" CREATED="1704495961945" ID="ID_1860447724" MODIFIED="1704762689293" TEXT="Zeitpunkt f&#xfc;r NOTIFY-dispatch nicht oder explizit beschr&#xe4;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&#228;re das eine Ja/Nein-Entscheidung, aber da sie &#252;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>&#160; ergeben und wird im NOTIFY-Verb gespeichert; das vorliegen dieses Parameters ist es auch, wodurch der eigentliche explizite Trigger f&#252;r den Folge-Job wegfallen kann. Setzt man hier die nominelle Zeit ein, so wird das NOTIFY tats&#228;chlich erst zu dieser Zeit zugestellt, und das bedeutet, da&#223; auch Dependency-Ketten nach dem nominellen Schedule &#8222;getaktet&#8220; sind. Im anderen Extremfall gibt es keine Limitierung und das NOTIFY wird vom Scheduler zur n&#228;chstm&#246;glichen Gelegenheit zugestellt. Sofern allerdings die Berechnung ohnehin im Verzug ist, spielt diese Unterscheidung keine Rolle mehr (dann wird n&#228;mlich immer sofort getriggert); es k&#246;nnte aber f&#252;r zus&#228;tzlichen Flexibilit&#228;ts-Puffer sorgen, wenn ein Schedule zeitweilig zu d&#252;nn besetzt ist, denn erst dadurch k&#246;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 COLOR="#338800" CREATED="1704496443809" FOLDED="true" ID="ID_1582406331" MODIFIED="1704762707029" TEXT="Implementierung">
<icon BUILTIN="button_ok"/>
<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/>
@ -107956,8 +107947,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704496625440" ID="ID_1513875198" MODIFIED="1704496631952" TEXT="Dependency-Planung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1704496625440" ID="ID_1513875198" MODIFIED="1704761010340" TEXT="Dependency-Planung">
<icon BUILTIN="button_ok"/>
<node CREATED="1704496633181" ID="ID_621580292" MODIFIED="1704496661738" TEXT="flexibiliisiert den Zeitpunkt an dem der Job tats&#xe4;chlich abgegeben wird">
<icon BUILTIN="idea"/>
</node>
@ -108006,8 +107997,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704496923552" ID="ID_612925354" MODIFIED="1704505942752" TEXT="Anpassungen im ScheduleSpec (SchedulerAPI) notwendig">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1704496923552" ID="ID_612925354" MODIFIED="1704761008200" TEXT="Anpassungen im ScheduleSpec (SchedulerAPI) notwendig">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1704496939542" ID="ID_1389691721" MODIFIED="1704505937560" TEXT="Activity-Term nun &#xbb;on-demand&#xab; erzeugen">
<richcontent TYPE="NOTE"><html>
<head/>
@ -108019,8 +108010,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704506746469" ID="ID_1135578831" MODIFIED="1704506762835" TEXT="Zeitlimit explizit via API kontrollierbar machen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1704506746469" ID="ID_1135578831" MODIFIED="1704760081517" TEXT="Zeitlimit explizit via API kontrollierbar machen">
<icon BUILTIN="button_ok"/>
<node CREATED="1704506817515" ID="ID_170171194" MODIFIED="1704506848881" TEXT="geht das sinnvollerweise?">
<richcontent TYPE="NOTE"><html>
<head/>
@ -108030,13 +108021,40 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<node CREATED="1704759460547" ID="ID_956724202" MODIFIED="1704759465584" TEXT="es geht..."/>
<node CREATED="1704759466186" ID="ID_1351220656" MODIFIED="1704759530239" TEXT="ist aber nicht sonderlich sinnvoll">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...es ist n&#228;mlich redundant: wenn man keinen constraint setzen m&#246;chte, dann definiert man eben die Start-Zeit des Nachfolgers entsprechend fr&#252;her.
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704497136967" ID="ID_273051296" MODIFIED="1704497151404" TEXT="Zeitlimit im NOTIFY auf korrekte Handhabung pr&#xfc;fen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1704759540184" ID="ID_525230501" MODIFIED="1704759580421" TEXT="es wird jetzt vorl&#xe4;ufig nur zum Testen eingebaut &#x2014; und zwar rein bin&#xe4;r(boolean)">
<icon BUILTIN="yes"/>
</node>
</node>
<node COLOR="#338800" CREATED="1704497136967" ID="ID_273051296" MODIFIED="1704760100528" TEXT="Zeitlimit im NOTIFY auf korrekte Handhabung pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
<node CREATED="1704760101285" ID="ID_1607732235" MODIFIED="1704760119654" TEXT="wenn nicht limitiert &#x27f9; Time::ANYTIME setzten"/>
<node CREATED="1704760121476" ID="ID_80745632" MODIFIED="1704760151516" TEXT="wird im &#x3bb;-post dann auf die Startzeit des root-Ctx limitiert"/>
<node CREATED="1704760152158" ID="ID_1916671334" MODIFIED="1704760165337" TEXT="und die liegt zu dem Zeitpunkt effektiv in der Vergangenheit"/>
</node>
<node COLOR="#338800" CREATED="1704497499531" ID="ID_1985146635" MODIFIED="1704761004489" TEXT="M&#xf6;glichkeit f&#xfc;r negatives Delta im StressTestRig pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
<node CREATED="1704760473965" ID="ID_1733318996" MODIFIED="1704760585626" TEXT="Delta geht unmittebar in Abbruchkriterium ein"/>
<node COLOR="#5b280f" CREATED="1704760428369" ID="ID_680315961" MODIFIED="1704760660071" TEXT="aber Delta bei Einzelmessung absolut genommen &#x21af;">
<icon BUILTIN="stop-sign"/>
</node>
<node COLOR="#338800" CREATED="1704760625809" ID="ID_1719328298" MODIFIED="1704760669441" TEXT="Korrektur: Absolutbetrag entfernt &#x27f9; Delta nun vorzeichenbehaftet">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1704760436944" ID="ID_332383182" MODIFIED="1704760667502" TEXT="Orientierung von Delta &#xfc;bertr&#xe4;gt sich auf alle Mittelwerte">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704497499531" ID="ID_1985146635" MODIFIED="1704497535951" TEXT="M&#xf6;glichkeit f&#xfc;r negatives Delta im StressTestRig pr&#xfc;fen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
@ -110721,6 +110739,21 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1704677712357" ID="ID_730665682" MODIFIED="1704677732239" TEXT="und wir die h&#xe4;lfte der gescheduleten Jobs einsparen"/>
<node CREATED="1704677733514" ID="ID_568047047" MODIFIED="1704677752491" TEXT="k&#xf6;nnte vielleicht daran liegen, da&#xdf; wir dadurch auch Kapazit&#xe4;t in den Schlaf schicken"/>
</node>
<node CREATED="1704762771841" ID="ID_1429238560" MODIFIED="1704762903507">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ohne Limitierung der NOTIFY-Zeit ist die Performance<i>&#160;minimal besser</i>
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
<node CREATED="1704762822683" ID="ID_1843142292" MODIFIED="1704762832589" TEXT="aber gleichzeitig ist die Streuung stets gr&#xf6;&#xdf;er"/>
<node CREATED="1704762833207" ID="ID_992388303" MODIFIED="1704762847043" TEXT="die Trigger-Schwellen funktionieren aber dennoch genauso zuverl&#xe4;ssig"/>
<node CREATED="1704762847751" ID="ID_1623829309" MODIFIED="1704762876991" TEXT="wie erwartet: bei geringerem Stress-Level l&#xe4;uft der Test ein paar Millisekunden schneller"/>
<node CREATED="1704762877627" ID="ID_1249026724" MODIFIED="1704762897373" TEXT="aber am &#xbb;Breaking-Point&#xab; kommt praktisch der gleiche Wert raus wie vorher"/>
</node>
</node>
</node>
</node>