From 75b5eea2d350b2180998e4faf13647e44a374299 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 14 Dec 2023 01:49:46 +0100 Subject: [PATCH] Scheduler-test: option to require activation by scheduler use a feature of the Activity-Language prepared for this purpose: self-Inhibition of the Chain. This prevents a prerequisite-NOTIFY to trigger a complete chain of available tasks, before these tasks have actually reached their nominal scheduling time. This has the effect to align the computations much more strictly with the defined schedule --- src/vault/gear/scheduler.hpp | 11 ++- tests/vault/gear/scheduler-service-test.cpp | 3 +- tests/vault/gear/test-chain-load.hpp | 15 +++- wiki/thinkPad.ichthyo.mm | 86 +++++++++++++++++++-- 4 files changed, 104 insertions(+), 11 deletions(-) diff --git a/src/vault/gear/scheduler.hpp b/src/vault/gear/scheduler.hpp index 10a071e0d..f10198005 100644 --- a/src/vault/gear/scheduler.hpp +++ b/src/vault/gear/scheduler.hpp @@ -196,9 +196,9 @@ namespace gear { } ScheduleSpec - compulsory (bool truely =true) + compulsory (bool indeed =true) { - isCompulsory_ = truely; + isCompulsory_ = indeed; return move(*this); } @@ -206,6 +206,13 @@ namespace gear { /** build Activity chain and hand-over to the Scheduler. */ ScheduleSpec post(); + ScheduleSpec + requireSchedule () + { + term_->requireDirectActivation(); + return move(*this); + } + ScheduleSpec linkToSuccessor (ScheduleSpec& succSpec) { diff --git a/tests/vault/gear/scheduler-service-test.cpp b/tests/vault/gear/scheduler-service-test.cpp index c07e53985..1ceec6410 100644 --- a/tests/vault/gear/scheduler-service-test.cpp +++ b/tests/vault/gear/scheduler-service-test.cpp @@ -553,7 +553,7 @@ namespace test { { MARK_TEST_FUN - auto LOAD_BASE = 1ms; + auto LOAD_BASE = 500us; TestChainLoad testLoad{64}; // .configureShape_short_segments3_interleaved() @@ -583,6 +583,7 @@ SHOW_EXPR(referenceTime) testLoad.setupSchedule(scheduler) .withLoadTimeBase(LOAD_BASE) .withJobDeadline(100ms) + .requireSchedule() .launch_and_wait(); // invocation through Scheduler has reproduced all node hashes diff --git a/tests/vault/gear/test-chain-load.hpp b/tests/vault/gear/test-chain-load.hpp index e27c4aa73..9b0aebb1e 100644 --- a/tests/vault/gear/test-chain-load.hpp +++ b/tests/vault/gear/test-chain-load.hpp @@ -1563,10 +1563,11 @@ namespace test { FrameRate levelSpeed_{1, Duration{_uTicks(1ms)}}; uint blockLoadFactor_{2}; + bool requireSchedule_{false}; size_t chunkSize_{DEFAULT_CHUNKSIZE}; TimeVar startTime_{Time::ANYTIME}; - microseconds preRoll_{guessPlanningPreroll (chunkSize_)}; microseconds deadline_{STANDARD_DEADLINE}; + microseconds preRoll_{guessPlanningPreroll (chunkSize_)}; ManifestationID manID_{}; std::promise signalDone_{}; @@ -1587,6 +1588,8 @@ namespace test { .startTime (calcStartTime(level)) .lifeWindow (deadline_) .post(); + if (requireSchedule_) + schedule_[idx].requireSchedule(); } /** Callback: define a dependency between scheduled jobs */ @@ -1613,8 +1616,7 @@ namespace test { scheduler_.defineSchedule(wakeUpJob()) .manifestation (manID_) .startTime(calcStartTime (levelDone+1)) - .lifeWindow(1s) - .compulsory() + .lifeWindow(SAFETY_TIMEOUT) .post() .linkToPredecessor (schedule_[lastNodeIDX]) ; // Setup wait-dependency on last computation @@ -1689,6 +1691,13 @@ namespace test { return move(*this); } + ScheduleCtx&& + requireSchedule (bool indeed =true) + { + requireSchedule_ = indeed; + return move(*this); + } + ScheduleCtx&& withJobDeadline (microseconds deadline_after_start) { diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 2e292547c..f3b60cbb0 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -103330,7 +103330,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + @@ -103364,15 +103365,34 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
da wir alle ScheduleSpec-Terme in einem Array halten

- - +
- + - + + + + + + + + + + + + + + + + + + + + + @@ -103385,6 +103405,62 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ es gibt nur noch wenige Dependency-Ketten, +

+

+ die von einem einzigen Worker durchgearbeietet werden +

+ + +
+
+ + + + + + + + +

+ wäre ja so zu erwarten gemäß Topologie... +

+ + +
+
+
+
+