Scheduler: setup to verify the work-Function

...first steps to get anything to run with the Scheduler constructed thus far
...can now
 - enqueue
 - getWork -> invoke
This commit is contained in:
Fischlurch 2023-10-25 17:27:18 +02:00
parent a180d38ed9
commit 7da88b772f
5 changed files with 119 additions and 15 deletions

View file

@ -205,7 +205,8 @@ namespace gear {
auto horizon = classifyTimeHorizon (Offset{head - now});
return horizon > SPINTIME
and not tendedNext(head)? TENDNEXT
: horizon;
: horizon==IDLEWAIT ? WORKTIME
: horizon;
}
/** decide how this thread's capacity shall be used

View file

@ -50,6 +50,7 @@
#include "vault/gear/scheduler-invocation.hpp"
#include "vault/gear/load-controller.hpp"
#include "vault/gear/engine-observer.hpp"
#include "vault/real-clock.hpp"
//#include "lib/symbol.hpp"
#include "lib/nocopy.hpp"
//#include "lib/util.hpp"
@ -69,6 +70,10 @@ namespace gear {
using lib::time::Offset;
using lib::time::Duration;
namespace test { // declared friend for test access
class SchedulerService_test;
}
namespace { // Scheduler default config
const auto IDLE_WAIT = 20ms; ///< sleep-recheck cycle for workers deemed _idle_
@ -226,6 +231,10 @@ namespace gear {
/** @internal expose a binding for Activity execution */
class ExecutionCtx;
/** open private backdoor for tests */
friend class test::SchedulerService_test;
};
@ -284,10 +293,11 @@ namespace gear {
return POLL_WAIT_DELAY;
}
/** access high-resolution-clock, rounded to µ-Ticks */
Time
getSchedTime()
{
UNIMPLEMENTED ("access scheduler Time");
return RealClock::now();
}
};

View file

@ -191,9 +191,9 @@ namespace test {
// but after marking `next` as tended, capacity can be directed elsewhere
lctrl.tendNext (next);
CHECK (Capacity::IDLEWAIT == lctrl.markOutgoingCapacity (next, ut ));
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, ut ));
CHECK (Capacity::IDLEWAIT == lctrl.markOutgoingCapacity (next, t1 ));
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, t1 ));
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, t2 ));
CHECK (Capacity::NEARTIME == lctrl.markOutgoingCapacity (next, t3 ));
CHECK (Capacity::SPINTIME == lctrl.markOutgoingCapacity (next, t4 ));

View file

@ -26,9 +26,10 @@
#include "lib/test/run.hpp"
#include "activity-detector.hpp"
#include "vault/gear/scheduler.hpp"
//#include "lib/time/timevalue.hpp"
//#include "lib/format-cout.hpp"
#include "lib/time/timevalue.hpp"
#include "lib/format-cout.hpp"
//#include "lib/util.hpp"
//#include <utility>
@ -44,7 +45,7 @@ namespace test {
// using lib::time::FrameRate;
// using lib::time::Offset;
// using lib::time::Time;
using lib::time::Time;
@ -64,8 +65,8 @@ namespace test {
run (Arg)
{
simpleUsage();
invokeWorkFunction();
walkingDeadline();
setupLalup();
}
@ -82,13 +83,29 @@ namespace test {
/** @test TODO
/** @test TODO verify visible behaviour of the work-pulling function
* @todo WIP 10/23 🔁 define implement
*/
void
walkingDeadline()
invokeWorkFunction()
{
UNIMPLEMENTED ("walking Deadline");
BlockFlowAlloc bFlow;
EngineObserver watch;
Scheduler scheduler{bFlow, watch};
ActivityDetector detector;
Activity& probe = detector.buildActivationProbe ("testProbe");
// this test class is declared friend to get a backdoor to Scheduler internals...
auto& schedCtx = Scheduler::ExecutionCtx::from(scheduler);
Time now = schedCtx.getSchedTime();
schedCtx.post (now, &probe, schedCtx);
CHECK (activity::WAIT == scheduler.getWork());
cout << detector.showLog()<<endl; // HINT: use this for investigation...
CHECK (detector.verifyInvocation("testProbe"));
////////////////////////////////////////////////////////////////////////////////////TODO need a way to get the actual time passed to the Probe
}
@ -97,8 +114,9 @@ namespace test {
* @todo WIP 10/23 🔁 define implement
*/
void
setupLalup()
walkingDeadline()
{
UNIMPLEMENTED ("walking Deadline");
}
};

View file

@ -82224,10 +82224,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698004014170" ID="ID_359097355" MODIFIED="1698203266998" TEXT="Test">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698203252783" ID="ID_161810851" MODIFIED="1698203272445" TEXT="was kann man hier sinnvoll testen?">
<node COLOR="#435e98" CREATED="1698203252783" ID="ID_161810851" MODIFIED="1698240150155" TEXT="was kann man hier sinnvoll testen?">
<icon BUILTIN="help"/>
<node CREATED="1698203283579" ID="ID_1136913463" MODIFIED="1698203292977" TEXT="der Code macht bereits sleep-Waits"/>
<node CREATED="1698203293530" ID="ID_507890192" MODIFIED="1698203303180" TEXT="andererseits kann man ihn noch direkt aufrufen"/>
<node CREATED="1698240055257" ID="ID_1418857353" MODIFIED="1698240100349" TEXT="&#x27f9; Queue best&#xfc;cken und aufrufen &#x2014; Zeit messen"/>
</node>
</node>
</node>
@ -83115,6 +83116,23 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1698078223097" ID="ID_597306541" MODIFIED="1698078227054" TEXT="Schlafen">
<icon BUILTIN="full-5"/>
<node COLOR="#435e98" CREATED="1698244765564" FOLDED="true" HGAP="50" ID="ID_28419292" MODIFIED="1698245094135" TEXT="modifiziert auf Redistribution" VSHIFT="10">
<arrowlink COLOR="#758fa6" DESTINATION="ID_1016395299" ENDARROW="Default" ENDINCLINATION="302;-22;" ID="Arrow_ID_1135387860" STARTARROW="None" STARTINCLINATION="246;369;"/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698244795607" HGAP="25" ID="ID_928488277" MODIFIED="1698244961675" VSHIFT="16">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
wichtig falls der Scheduler <i>leer f&#228;llt</i>
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1698244829665" ID="ID_142654598" MODIFIED="1698244842453" TEXT="sonst k&#xf6;nnte es passieren, da&#xdf; alle Idler in einem Cluster sitzen"/>
<node CREATED="1698244843729" ID="ID_1518532327" MODIFIED="1698244910572" TEXT="und der n&#xe4;chste Termin vers&#xe4;umt w&#xfc;rde um h&#xf6;chstens [SLEEP_HORIZON - WORK_HORIZON]"/>
</node>
</node>
</node>
<node CREATED="1698019164588" ID="ID_1369255451" MODIFIED="1698019165160" TEXT="incomingCapacity">
@ -88084,12 +88102,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="info"/>
</node>
<node CREATED="1698073016039" ID="ID_1742616307" MODIFIED="1698073017507" TEXT="F&#xe4;lle">
<node COLOR="#338800" CREATED="1698073017869" ID="ID_916925082" MODIFIED="1698073034749" TEXT="classifyTimings">
<node COLOR="#338800" CREATED="1698073017869" ID="ID_916925082" MODIFIED="1698243342884" TEXT="classifyHorizon">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1698073022938" ID="ID_1539653684" MODIFIED="1698073034749" TEXT="tendNextActivity">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1698243350367" ID="ID_997422004" MODIFIED="1698243362335" TEXT="classifyCapacity">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1698243357550" ID="ID_458370410" MODIFIED="1698243362335" TEXT="scatteredReCheck">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336835085" ID="ID_1753236898" MODIFIED="1697732777759" TEXT="SchedulerService_test">
@ -88104,13 +88128,58 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#ff1924" DESTINATION="ID_996573918" ENDARROW="Default" ENDINCLINATION="-817;60;" ID="Arrow_ID_226641198" STARTARROW="None" STARTINCLINATION="-848;-40;"/>
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697484506891" ID="ID_1292738036" MODIFIED="1697484528227" TEXT="den kompletten Work-Funktor durchspielen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697484506891" ID="ID_1292738036" MODIFIED="1698247370951" TEXT="den kompletten Work-Funktor durchspielen">
<icon BUILTIN="pencil"/>
<node CREATED="1698243387222" ID="ID_1151484757" MODIFIED="1698243397453" TEXT="und zwar direkten Aufruf, ohne WorkForce"/>
<node CREATED="1698243399946" ID="ID_525069730" MODIFIED="1698243412341" TEXT="es kann zu Sleeps kommen"/>
<node CREATED="1698243426549" ID="ID_1975979569" MODIFIED="1698243431240" TEXT="das bedeutet: Zeitmessung"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698243664309" ID="ID_654541946" MODIFIED="1698243687277" TEXT="was kann man sinnvollerweise pr&#xfc;fen?">
<icon BUILTIN="help"/>
<node CREATED="1698243697817" ID="ID_83311166" MODIFIED="1698243708627" TEXT="eine eingespiele Activity wird aufgerufen"/>
<node CREATED="1698243756225" ID="ID_489965107" MODIFIED="1698243775440" TEXT="was f&#xe4;llig ist, wird sofort aufgerufen"/>
<node CREATED="1698243881573" ID="ID_1520192624" MODIFIED="1698243892539" TEXT="es wird genau eine scheduled Activity aufgerufen"/>
<node CREATED="1698243927930" ID="ID_1326757783" MODIFIED="1698243935709" TEXT="die Zeit wird in etwa eingehalten"/>
<node CREATED="1698243794737" ID="ID_1290805695" MODIFIED="1698243800463" TEXT="das Delay-Regime">
<node CREATED="1698243828655" ID="ID_763249245" MODIFIED="1698243855201" TEXT="Abstand davor &#x27f6; delay"/>
<node CREATED="1698243897342" ID="ID_1722957398" MODIFIED="1698243904507" TEXT="Abstand danch &#x27f6; delay"/>
<node CREATED="1698243973380" ID="ID_664100190" MODIFIED="1698244000012" TEXT="tendedNext &#x27f6; re-Fokussiert"/>
<node CREATED="1698245002134" ID="ID_1016395299" MODIFIED="1698245069840" TEXT="nichts danach &#x27f6; re-Distribution">
<linktarget COLOR="#758fa6" DESTINATION="ID_1016395299" ENDARROW="Default" ENDINCLINATION="302;-22;" ID="Arrow_ID_1135387860" SOURCE="ID_28419292" STARTARROW="None" STARTINCLINATION="246;369;"/>
</node>
<node CREATED="1698245073987" ID="ID_1953896637" MODIFIED="1698247362748" TEXT="leer &#x27f6; Schlaf">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node CREATED="1698245511656" ID="ID_1594716553" MODIFIED="1698245548777" TEXT="Scaffolding">
<node CREATED="1698245550915" ID="ID_1897821225" MODIFIED="1698245557078" TEXT="verwende ActivityDetector"/>
<node CREATED="1698245558169" ID="ID_1427917719" MODIFIED="1698245570820" TEXT="aber Problem: an die aktuelle Aufruzeit kommen"/>
<node COLOR="#5b280f" CREATED="1698245571408" ID="ID_1935211976" MODIFIED="1698245821927" TEXT="Activity::TICK und den execution-Ctx riggen">
<icon BUILTIN="button_cancel"/>
<node CREATED="1698245823278" ID="ID_1225266983" MODIFIED="1698245858822" TEXT="geht nicht ... diese Hintert&#xfc;r ist ZU">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1698245835997" ID="ID_43172566" MODIFIED="1698245856760" TEXT="wir haben hier einen fest auf den Scheduler verdrahteten ExecutionCtx">
<icon BUILTIN="info"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698246249997" ID="ID_221908219" MODIFIED="1698246271187" TEXT="mu&#xdf; mir die now-Zeit in ActivityProbe speichern">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1698246275186" ID="ID_389803917" MODIFIED="1698246286348" TEXT="bei jedem Aufruf im Objekt speichern"/>
<node CREATED="1698246286912" ID="ID_1611070007" MODIFIED="1698246292046" TEXT="Zugriffs-Funktion schaffen"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697473158929" ID="ID_1723058065" MODIFIED="1697484548083" TEXT="vollst&#xe4;ndiger Ende-zu-Ende Test incl. WorkForce">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1698245695072" ID="ID_546920051" MODIFIED="1698245698507" TEXT="Test-Setup">
<node CREATED="1698245550915" ID="ID_460908396" MODIFIED="1698245557078" TEXT="verwende ActivityDetector"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698245705360" ID="ID_1236877119" MODIFIED="1698245892414" TEXT="brauche Hintereingang (f&#xfc;r direkt gegebene Activities)">
<icon BUILTIN="pencil"/>
</node>
</node>
<node CREATED="1697758391611" ID="ID_124711923" MODIFIED="1697758397083" TEXT="F&#xe4;lle">
<node CREATED="1697758425500" ID="ID_1450418166" MODIFIED="1697758430911" TEXT="simpleUsage">
<node CREATED="1697758440737" ID="ID_1211803424" MODIFIED="1697758454084" TEXT="zeigt hier vor allem was man braucht"/>
@ -88118,6 +88187,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698247388556" ID="ID_1402046356" MODIFIED="1698247391396" TEXT="invokeWorkFunction">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1698247394051" ID="ID_198829622" MODIFIED="1698247420009" TEXT="kann einfachen Aufruf einer vorher eingespielten Activity belegen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697755558855" ID="ID_278365674" MODIFIED="1697741858009" TEXT="SchedulerStress_test">