Scheduler: further investigation but no solution for the emergency-trigger
Last summer, I already identified a problmatic aspect
which could cause the Scheduler to fall idle without further notice:
5b62438eb4
Basically this situation should raise a **Scheduler-Emergency**,
but the only location where it can be easily detected is way down
in the implementation and has currently no clean way of signalling.
Moreover, how to handle a Scheduler-Emergency is likewise an open
question, an will in turn require even more cross-cutting notifications
and trigger actions somewhere at Render-Engine top-level.
By marking the location where this problem could be detected,
inadvertently I broke the SchedulerCommutator_test, which of course
must execute precisely this logic and check for the proper result.
Yet the problem as such is tricky and possibly far-reaching;
notably when processing long-running render jobs will reliably trigger
this situation — unless we establish additional dedicated control-logic
especially to cope with long-running jobs (opened #1382 for this topic)
__Bottom line__: we are far from addressing any of these issues right now,
and thus I reduced that failure to a warning message, so that at least
`SchedulerCommutator_test` passes again (it's not actually a defect there)
This commit is contained in:
parent
39d614f55f
commit
606669aa1b
4 changed files with 294 additions and 122 deletions
|
|
@ -184,6 +184,21 @@ namespace gear {
|
|||
layer1.feedPrioritisation();
|
||||
}
|
||||
|
||||
/** update queue head to discard obsolete content.
|
||||
* @param now _current time_ to use for decision about dropping tasks
|
||||
* @return `false` when failing to establish a consistent state due to
|
||||
* missed **compulsory** entries; should cause **Emergency halt**.
|
||||
*/
|
||||
bool
|
||||
maintainQueueHead (SchedulerInvocation& layer1, Time now)
|
||||
{
|
||||
ENSURE (holdsGroomingToken (thisThread()));
|
||||
layer1.feedPrioritisation();
|
||||
while (layer1.isOutdated (now) and not layer1.isOutOfTime(now))
|
||||
layer1.pullHead();
|
||||
return not layer1.isOutOfTime(now);
|
||||
}
|
||||
|
||||
/**
|
||||
* Look into the queues and possibly retrieve work due by now.
|
||||
* @note transparently discards any outdated entries,
|
||||
|
|
@ -198,17 +213,17 @@ namespace gear {
|
|||
layer1.feedPrioritisation();
|
||||
while (layer1.isOutdated (now) and not layer1.isOutOfTime(now))
|
||||
layer1.pullHead();
|
||||
if (not maintainQueueHead (layer1,now))
|
||||
ALERT (engine, "MISSED compulsory job -- should raise Scheduler-Emergency"); //////////////TICKET #1362 : not clear where Scheduler-Emergency is to be handled and how it can be triggered. See Scheduler::triggerEmergency()
|
||||
else
|
||||
if (layer1.isDue (now))
|
||||
{
|
||||
if (layer1.isOutOfTime(now))
|
||||
UNIMPLEMENTED ("how to trigger a Scheduler-Emergency from here"); ///////////////////////TICKET #1362 : not clear where Scheduler-Emergency is to be handled and how it can be triggered. See Scheduler::triggerEmergency()
|
||||
else
|
||||
return layer1.pullHead();
|
||||
} }
|
||||
return layer1.pullHead();
|
||||
}
|
||||
return ActivationEvent();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***********************************************************//**
|
||||
* This is the primary entrance point to the Scheduler.
|
||||
* Place the given event into the schedule, with prioritisation
|
||||
|
|
|
|||
|
|
@ -278,10 +278,10 @@ namespace gear {
|
|||
and priority_.top().starting <= waterLevel(now);
|
||||
}
|
||||
|
||||
/** determine if Activity at scheduler head missed it's deadline
|
||||
/** determine if the Activity at scheduler head missed it's deadline.
|
||||
* @warning due to memory management, such an Activity must not be dereferenced */
|
||||
bool
|
||||
isMissed (Time now) const
|
||||
isMissed (Time now) const
|
||||
{
|
||||
return not priority_.empty()
|
||||
and waterLevel(now) > priority_.top().deadline;
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
**
|
||||
** If however a thread is put to work, it will start dequeuing an entry from
|
||||
** the head of the [priority queue](\ref SchedulerInvocation::pullHead),
|
||||
** and start interpreting this entry as a _chain of render activities_ with
|
||||
** and start interpreting this entry as a _chain of render activities,_ with
|
||||
** the help of the [»Activity Language«](\ref ActivityLang::dispatchChain).
|
||||
** In the typical scenario, after some preparatory checks and notifications,
|
||||
** the thread [transitions into work mode](\ref Scheduler::ExecutionCtx::work),
|
||||
|
|
@ -94,8 +94,10 @@
|
|||
** @see SchedulerCommutator Layer-2
|
||||
** @see activity.hpp description of »Render Activities«
|
||||
**
|
||||
** @todo WIP 11/2023 »Playback Vertical Slice«
|
||||
**
|
||||
** @todo WIP 11/2024 »Playback Vertical Slice«
|
||||
** - initial version of Scheduler was built and validated by \ref scheduler-stress-test.cpp
|
||||
** - now awaiting integration with Render-Node invocation and Job-Planning
|
||||
** - very likely we'll extract a Scheduler-Interface (and this file then becomes a service-impl)
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -112,11 +114,8 @@
|
|||
#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"
|
||||
|
||||
//#include <string>
|
||||
#include <optional>
|
||||
#include <utility>
|
||||
|
||||
|
|
@ -124,8 +123,6 @@
|
|||
namespace vault{
|
||||
namespace gear {
|
||||
|
||||
// using util::isnil;
|
||||
// using std::string;
|
||||
using std::move;
|
||||
using lib::time::Time;
|
||||
using lib::time::FSecs;
|
||||
|
|
@ -216,6 +213,9 @@ namespace gear {
|
|||
/******************************************************//**
|
||||
* »Scheduler-Service« : coordinate render activities.
|
||||
* @todo WIP 11/2023
|
||||
* - largely completed spring 2024
|
||||
* - passes stress testing with good performance
|
||||
* - **TODO** further integration will require to extract a Scheduler-Interface
|
||||
* @see BlockFlow
|
||||
* @see SchedulerUsage_test
|
||||
*/
|
||||
|
|
@ -515,6 +515,16 @@ namespace gear {
|
|||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************//**
|
||||
* @remark this is the »internal service entrance point« for render workers
|
||||
* and is implemented by _combining all parts_ of the Scheduler
|
||||
* - the processing environment of the ActivityLang
|
||||
* - Layer-1 for queue management
|
||||
* - Layer-2 for execution
|
||||
* - the LoadController
|
||||
*/
|
||||
inline activity::Proc
|
||||
Scheduler::doWork()
|
||||
{
|
||||
|
|
@ -525,7 +535,7 @@ namespace gear {
|
|||
ExecutionCtx ctx{*this, toDispatch};
|
||||
return ActivityLang::dispatchChain (toDispatch, ctx);
|
||||
}
|
||||
,[this]{ return getSchedTime(); }
|
||||
,[this] { return getSchedTime(); }
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -544,10 +554,10 @@ namespace gear {
|
|||
*/
|
||||
inline ScheduleSpec
|
||||
ScheduleSpec::post()
|
||||
{ // protect allocation
|
||||
// auto guard = theScheduler_->layer2_.requireGroomingTokenHere();//////////////////////////////////////TODO can we avoid that?
|
||||
{ // execute term-builder on-demand...
|
||||
maybeBuildTerm();
|
||||
//set up new schedule by retrieving the Activity-chain...
|
||||
|
||||
// set up new schedule by retrieving the Activity-chain...
|
||||
theScheduler_->postChain ({term_->post(), start_
|
||||
, death_
|
||||
, manID_
|
||||
|
|
@ -607,7 +617,9 @@ namespace gear {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
|
||||
/*****************************************************************//**
|
||||
* Enqueue for time-bound execution, possibly dispatch immediately.
|
||||
* This is the »main entrance« to get some Activity scheduled.
|
||||
* @param actEvent the Activity, start time and deadline
|
||||
|
|
@ -625,7 +637,7 @@ namespace gear {
|
|||
|
||||
|
||||
/**
|
||||
* »Tick-hook« : code to maintain sane running status.
|
||||
* »Tick-hook« : code to maintain a sane running status.
|
||||
* This function will be invoked [regularly](\ref DUTY_CYCLE_PERIOD) while the scheduler
|
||||
* is actively processing; in fact this function determines when the scheduler falls empty
|
||||
* and can be shut down — and thus regular invocation is equivalent to running state.
|
||||
|
|
@ -645,16 +657,11 @@ namespace gear {
|
|||
{
|
||||
auto guard = layer2_.requireGroomingTokenHere();
|
||||
|
||||
// consolidate queue content
|
||||
layer1_.feedPrioritisation();
|
||||
// clean-up of outdated tasks here
|
||||
while (layer1_.isOutdated (now) and not layer1_.isOutOfTime(now))
|
||||
layer1_.pullHead();
|
||||
// protect against missing the deadline of a compulsory task
|
||||
if (layer1_.isOutOfTime (now))
|
||||
{
|
||||
// consolidate queue and discard outdated tasks
|
||||
if (not layer2_.maintainQueueHead(layer1_,now))
|
||||
{ // missed deadline of compulsory task
|
||||
triggerEmergency();
|
||||
return; // leave everything as-is
|
||||
return;// leave everything as-is
|
||||
}
|
||||
|
||||
// clean-up of obsolete Activities
|
||||
|
|
|
|||
|
|
@ -17022,9 +17022,7 @@
|
|||
<icon BUILTIN="bell"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1534519645420" ID="ID_1509280168" MODIFIED="1576282358104" TEXT="übernimmt Funktionen vom ViewLocator">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...weil ich Stand 8/2018 nicht im Stande bin,
|
||||
|
|
@ -17336,9 +17334,7 @@
|
|||
<node CREATED="1504386535447" ID="ID_426578263" MODIFIED="1557498707222" TEXT="brauche Service zum Erzeugen/Löschen"/>
|
||||
<node CREATED="1504386595679" ID="ID_1383687482" MODIFIED="1576282358103" TEXT="Mutation: brauche Model-Platzhalter">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das Diff wird auf den Platzhalter angewendet
|
||||
|
|
@ -17794,9 +17790,7 @@
|
|||
</node>
|
||||
<node CREATED="1664546805728" ID="ID_162637423" MODIFIED="1664547883294" TEXT="Expander typischerweise für Timeline-Content">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
in diesem Fall ist das dann eine Art Toggle-Button, d.h. er wechselt auch seine Gestalt
|
||||
|
|
@ -18803,9 +18797,7 @@
|
|||
</node>
|
||||
<node CREATED="1664404791911" ID="ID_1038149541" MODIFIED="1664486283099">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Nein! minimal und natural size <b>sollten gleich sein</b>
|
||||
|
|
@ -19378,9 +19370,7 @@
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1664055442553" ID="ID_94790418" MODIFIED="1664055480281">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Unterscheidung <i>resize</i> ⟺ <i>rerender</i>
|
||||
|
|
@ -20525,9 +20515,7 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1541858031423" ID="ID_1183173385" MODIFIED="1576282358100">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<i>Standard</i> UI-Mechanik überlassen wir GTK
|
||||
|
|
@ -22863,9 +22851,7 @@
|
|||
</node>
|
||||
<node CREATED="1563043807392" ID="ID_994687888" MODIFIED="1576282358083" TEXT="Wunsch nur teilweise realisierbar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn die CSS-Node-Namen von Custom-Widgets kann man via GTKmm nicht ändern.
|
||||
|
|
@ -43304,9 +43290,7 @@
|
|||
</node>
|
||||
<node COLOR="#435e98" CREATED="1670695125327" ID="ID_91649195" MODIFIED="1670695142557">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das hier ist die <b>beste Alternative</b>
|
||||
|
|
@ -44596,9 +44580,7 @@
|
|||
</node>
|
||||
<node COLOR="#435e98" CREATED="1669683026004" ID="ID_1867241917" MODIFIED="1670015746454" TEXT="Ergebnis ist aber noch nicht plausibel">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font face="Monospaced">#--◆--# _raw(win.overallSpan().duration()) ? = 307445734561825860 </font>
|
||||
|
|
@ -46361,9 +46343,7 @@
|
|||
</node>
|
||||
<node CREATED="1664669415850" ID="ID_550535214" MODIFIED="1664669442209">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
für <i>wirklich generische </i>Styles sollte man generische Klassen schaffen
|
||||
|
|
@ -46587,9 +46567,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1448658692023" FOLDED="true" ID="ID_339186676" MODIFIED="1582388523994">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
generisch
|
||||
|
|
@ -46759,9 +46737,7 @@
|
|||
</node>
|
||||
<node CREATED="1451177659369" ID="ID_928484705" MODIFIED="1518487921086">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
need to <i>bubble up</i>
|
||||
|
|
@ -47054,9 +47030,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ist er aber nicht notwendig,
|
||||
|
|
@ -57521,7 +57495,7 @@
|
|||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1731466941465" ID="ID_1180140959" MODIFIED="1731467103523" TEXT="SchedulerCommutator_test">
|
||||
<node COLOR="#435e98" CREATED="1731466941465" ID="ID_1180140959" MODIFIED="1731713169275" TEXT="SchedulerCommutator_test">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57537,7 +57511,8 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1731630625998" ID="ID_481330961" MODIFIED="1731630636457" TEXT="scheitert stets in »verify_Significance«"/>
|
||||
<node CREATED="1731631526021" ID="ID_433361901" MODIFIED="1731631554237" TEXT="ist ein (unbemerktes) Problem in der Test-Logik">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731631526021" FOLDED="true" ID="ID_433361901" MODIFIED="1731713215197" TEXT="ist ein (ungelöstes) Problem im Scheduler">
|
||||
<icon BUILTIN="info"/>
|
||||
<node BACKGROUND_COLOR="#dfaf9a" COLOR="#990033" CREATED="1731631607610" ID="ID_1850643707" MODIFIED="1731631706792" TEXT="Test gebrochen seit 5b62438eb — 2024-04-10 20:04:53">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -57591,11 +57566,10 @@
|
|||
Thus I'll marked the problematic location and opened #1362
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1731631583470" ID="ID_1893073184" MODIFIED="1731631885052" TEXT="im Rahmen der Stress-Tests entdeckte »Situation«">
|
||||
<node COLOR="#624456" CREATED="1712710547319" ID="ID_1893073184" LINK="#ID_1932392128" MODIFIED="1731701538658" TEXT="im Rahmen der Stress-Tests entdeckte »Situation«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57603,11 +57577,21 @@
|
|||
...die definitiv auftreten kann, und die auf einem höheren (derzeit nicht existenten) Level der Architektur behandelt werden muß, als eine <b>Scheduler-Emergency</b>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1731632078651" ID="ID_912676608" MODIFIED="1731632263641" TEXT="hab damals einfach »aufgegeben« da der Trigger-Punkt unpassenderweise in Layer-2 liegt">
|
||||
<node CREATED="1731632078651" ID="ID_912676608" MODIFIED="1731694300412">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
hab damals einfach »aufgegeben«,
|
||||
</p>
|
||||
<p>
|
||||
da der Trigger-Punkt <i>unpassenderweise </i>in Layer-2 liegt
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57615,8 +57599,7 @@
|
|||
...bzw dorthin gezogen ist durch den Umbau der Scheduler-Struktur, welche zwar spät erfolgte, als Resultat der Stress-tests, aber insgesamt eine signifikante Verbessung des Codes darstellt. Leider hat dieser Umbau nun dazu geführt, daß Layer-2 diverse »Hooks« auf Service-Level ansprechen muß, und das ist wiederum ein HInweis, daß die Code-Anordnung nicht optimal ist
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1731632486002" ID="ID_1151089303" MODIFIED="1731632506832" TEXT="es fehlt ein Signalisierungs-Mechanismus"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731632507425" ID="ID_241976514" MODIFIED="1731632836969" TEXT="dieser würde über mehrere Ecken laufen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -57634,12 +57617,32 @@
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1731710016247" ID="ID_1116003187" MODIFIED="1731710023256" TEXT="nochmal im Einzelnen analysiert"/>
|
||||
<node CREATED="1731710023964" ID="ID_778217189" MODIFIED="1731710032544" TEXT="jede denkbare Lösung ist nicht-trivial"/>
|
||||
<node COLOR="#435e98" CREATED="1731710053533" ID="ID_722076886" MODIFIED="1731713106542" TEXT="denkbar wäre zumindest ein Refactoring">
|
||||
<linktarget COLOR="#23b91f" DESTINATION="ID_722076886" ENDARROW="Default" ENDINCLINATION="1530;2127;" ID="Arrow_ID_1785760257" SOURCE="ID_872583288" STARTARROW="None" STARTINCLINATION="-1253;43;"/>
|
||||
<linktarget COLOR="#7298c6" DESTINATION="ID_722076886" ENDARROW="Default" ENDINCLINATION="-173;13;" ID="Arrow_ID_1252004977" SOURCE="ID_778660910" STARTARROW="None" STARTINCLINATION="411;21;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#338800" CREATED="1731710077230" ID="ID_1009222978" MODIFIED="1731712876022" TEXT="man könnte die Erkennung dieser Situation in eine Methode auf Layer-1 extrahieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731710094764" ID="ID_703081528" MODIFIED="1731712883216" TEXT="aber selbst das setzt eine Entscheidung zur Emergency-Signalisierung voraus">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...und genau diese Entscheidung konnte/wollte ich vor einem halben Jahr nicht treffen (und bin im Moment nicht sicher, ob ich sie jetzt treffen kann)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731632025178" ID="ID_619384635" MODIFIED="1731632065737">
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731632025178" ID="ID_619384635" LINK="https://issues.lumiera.org/ticket/1362#comment:1" MODIFIED="1731701835497">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57647,22 +57650,17 @@
|
|||
siehe auch Kommentar im Ticket <b><font color="#be0f18">#1362 Scheduler Emergency</font></b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
https://issues.lumiera.org/ticket/1362#comment:1
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#d52960" DESTINATION="ID_619384635" ENDARROW="Default" ENDINCLINATION="-2477;105;" ID="Arrow_ID_175149574" SOURCE="ID_100642146" STARTARROW="None" STARTINCLINATION="1042;92;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731713044750" ID="ID_778660910" MODIFIED="1731713114926" TEXT="nur noch eine Warnung in's Log ⟹ Test läuft wieder">
|
||||
<arrowlink COLOR="#7298c6" DESTINATION="ID_722076886" ENDARROW="Default" ENDINCLINATION="-173;13;" ID="Arrow_ID_1252004977" STARTARROW="None" STARTINCLINATION="411;21;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1731466991636" ID="ID_1891507132" MODIFIED="1731467127501" TEXT="SchedulerStress_test">
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1731466991636" FOLDED="true" ID="ID_1891507132" MODIFIED="1731713151886" TEXT="SchedulerStress_test">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57701,12 +57699,11 @@
|
|||
Hier beobachten wir ein lineares Model der Beladung; die lineare Regression hat einen konstanten Sockel(9ms) knapp oberhalb der bisher tolerierten Overheads für start-up und spin-down (+Test-setup); erwartet werden ~6ms
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1731628606613" ID="ID_60599371" MODIFIED="1731628607824" TEXT="setup_systematicSchedule">
|
||||
<node CREATED="1731628628170" ID="ID_1205966126" MODIFIED="1731629092546" TEXT="Scheduler kann einem lockeren Schedule nicht folgen">
|
||||
<node CREATED="1731628628170" ID="ID_1205966126" MODIFIED="1731712944658" TEXT="Scheduler kann einem lockeren Schedule nicht folgen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57730,8 +57727,7 @@
|
|||
<i>wenn </i>der Test durläuft sind die beobachteten Kenndaten des Schedulers wie erwartet
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57739,15 +57735,20 @@
|
|||
also die Concurrency ist wirklich gut, die back-to-back-Zeit weicht nur 10ms vom theoretischen Wert ab
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731630239332" ID="ID_113082625" MODIFIED="1731630281906" TEXT="Vermutung: der Test läuft > 4min — das verletzt das Limit unseres Testsuite-Runners">
|
||||
<node BACKGROUND_COLOR="#d5e3f2" COLOR="#435e98" CREATED="1731630239332" ID="ID_113082625" MODIFIED="1731691828038" TEXT="Vermutung: der Test läuft > 4min — das verletzt das Limit unseres Testsuite-Runners">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1731691830301" ID="ID_1709364076" MODIFIED="1731691836711" TEXT="OK OK">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#067d20" CREATED="1731691838838" ID="ID_1445885924" MODIFIED="1731693892048" TEXT="also gibt es jetzt eine "quick"-Variante">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1731624499756" ID="ID_293265001" MODIFIED="1731624683932" TEXT="WorkForce_test">
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1731624499756" FOLDED="true" ID="ID_293265001" MODIFIED="1731713159777" TEXT="WorkForce_test">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -57764,8 +57765,7 @@
|
|||
Dieser Test skaliert den Worker-Pool, wartet dann jeweils eine (fest konfigurierte) Zeitspanne, um anschließend den Status zu prüfen — ein bekanntermaßen fragiles Schema, obwohl ich inzwischen Timings ausgeknobelt habe, die auf meiner Maschine hinreichend sicher sind. Für zuverlässiges Testen müßte man auf den Status der WorkForce <i>eigens warten, </i>und dafür möchte ich jedoch kein Core-API bereitstellen, denn ich möchte niemanden ermutigen, in Richtung einer »pinball-machine« zu gehen....
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
|
|
@ -98442,6 +98442,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#ef2a5d" DESTINATION="ID_1983682769" ENDARROW="Default" ENDINCLINATION="103;86;" ID="Arrow_ID_768141599" SOURCE="ID_1737621678" STARTARROW="None" STARTINCLINATION="96;-6;"/>
|
||||
<linktarget COLOR="#fe152a" DESTINATION="ID_1983682769" ENDARROW="Default" ENDINCLINATION="714;22;" ID="Arrow_ID_976291150" SOURCE="ID_1354795316" STARTARROW="None" STARTINCLINATION="422;18;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1731704761110" ID="ID_311901570" LINK="#ID_441812703" MODIFIED="1731704817143" TEXT="es gibt mutual-dependency im Zusammenhang mit Scheduler-Emergency-Erkennung"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -113286,6 +113287,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<linktarget COLOR="#6e3e89" DESTINATION="ID_459235865" ENDARROW="Default" ENDINCLINATION="506;31;" ID="Arrow_ID_321080977" SOURCE="ID_1642624688" STARTARROW="None" STARTINCLINATION="-736;-24;"/>
|
||||
<linktarget COLOR="#8a3494" DESTINATION="ID_459235865" ENDARROW="Default" ENDINCLINATION="506;31;" ID="Arrow_ID_42313313" SOURCE="ID_376748016" STARTARROW="None" STARTINCLINATION="-1413;-61;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1731702245722" HGAP="55" ID="ID_1210629436" LINK="#ID_784405050" MODIFIED="1731702389055" TEXT="könnte Probleme mit Verdrahtung und Signalisierung lösen..." VSHIFT="4">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
es gibt Situationen, in denen das Schedule »gebrochen« wird, und das führt u.U. zum Deadlock bzw. dazu, daß ein Berechnungvorgang stillschweigend stecken bleibt; diese Situationen können relativ leicht auf einem unteren Level im Code erkannt werden, aber von dort ist es nicht einfach, einen Alarm auf einem globalen Level auszulösen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1699403193710" ID="ID_1522099049" MODIFIED="1699403198814" TEXT="Design-Skizze">
|
||||
|
|
@ -125741,7 +125753,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1703798050746" FOLDED="true" ID="ID_339326725" MODIFIED="1713568821059" TEXT="Scheduler-Streßtests">
|
||||
<node COLOR="#338800" CREATED="1703798050746" ID="ID_339326725" MODIFIED="1731712947664" TEXT="Scheduler-Streßtests">
|
||||
<linktarget COLOR="#33a090" DESTINATION="ID_339326725" ENDARROW="Default" ENDINCLINATION="224;-1281;" ID="Arrow_ID_1171977868" SOURCE="ID_1032000470" STARTARROW="None" STARTINCLINATION="1205;67;"/>
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -125765,7 +125777,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704766027439" FOLDED="true" ID="ID_161148852" MODIFIED="1713396148543" TEXT="Untersuchung-2: hohe Auslastung">
|
||||
<node COLOR="#338800" CREATED="1704766027439" ID="ID_161148852" MODIFIED="1731712947669" TEXT="Untersuchung-2: hohe Auslastung">
|
||||
<linktarget COLOR="#3832ae" DESTINATION="ID_161148852" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_1703930922" SOURCE="ID_549174207" STARTARROW="None" STARTINCLINATION="333;19;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704766160781" HGAP="8" ID="ID_1879705815" MODIFIED="1713536311760" STYLE="bubble" TEXT="bisher ging es um Dependency-Management — nun geht es um »Last«" VSHIFT="8">
|
||||
|
|
@ -130200,7 +130212,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1712595518473" ID="ID_1871408755" MODIFIED="1712595524139" TEXT="oder als »load bursts«"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704915305240" FOLDED="true" ID="ID_466567694" MODIFIED="1713537416379" TEXT="Untersuchung im Stress-Test-Rig">
|
||||
<node COLOR="#338800" CREATED="1704915305240" ID="ID_466567694" MODIFIED="1731712947683" TEXT="Untersuchung im Stress-Test-Rig">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1704915323510" ID="ID_1549178834" MODIFIED="1712623136295" TEXT="1.Test">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
|
|
@ -130815,7 +130827,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1712707454214" ID="ID_614749757" MODIFIED="1712707464397" TEXT="izt werd's interessant...">
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fed799" COLOR="#fa002a" CREATED="1712707465445" FOLDED="true" ID="ID_1436192915" MODIFIED="1712771415761" TEXT="Deadline für den Tick wurde überfahren">
|
||||
<node BACKGROUND_COLOR="#fed799" COLOR="#fa002a" CREATED="1712707465445" ID="ID_1436192915" MODIFIED="1731712947689" TEXT="Deadline für den Tick wurde überfahren">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1712707500045" ID="ID_154552576" MODIFIED="1712707511038">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -130886,11 +130898,11 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712710547319" ID="ID_1932392128" MODIFIED="1712710556804" TEXT="Catch-22">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1712766598972" FOLDED="true" HGAP="35" ID="ID_441812703" MODIFIED="1712767856916" TEXT="mögliche Lösungen" VSHIFT="19">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1712766598972" HGAP="35" ID="ID_441812703" MODIFIED="1731712951439" TEXT="mögliche Lösungen" VSHIFT="19">
|
||||
<linktarget COLOR="#7159db" DESTINATION="ID_441812703" ENDARROW="Default" ENDINCLINATION="-220;27;" ID="Arrow_ID_1982927238" SOURCE="ID_1402977969" STARTARROW="None" STARTINCLINATION="-15;-77;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1712766702693" ID="ID_459937240" MODIFIED="1712766715279" TEXT="Emergency auch in der work-Pull-Funktion erkennen">
|
||||
<node CREATED="1712766860367" ID="ID_731751015" MODIFIED="1712766955228" TEXT="das ist aktuell ein Defekt">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1712766860367" ID="ID_731751015" MODIFIED="1712767714974" TEXT="das ist aktuell ein Defekt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -130899,13 +130911,31 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712767010192" ID="ID_784405050" MODIFIED="1731699448874" TEXT="unten im Logik-Baum einfach zu erkennen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1712766984495" ID="ID_697052410" MODIFIED="1712766991490" TEXT="aber unklar wie dann signalisiert werden kann"/>
|
||||
</node>
|
||||
<node CREATED="1712766735297" ID="ID_1909566269" MODIFIED="1712766752721" TEXT="Queue-Clean-up + Emergency-Erkennung in Layer-2 verlagern">
|
||||
<node CREATED="1712767000253" ID="ID_921990888" MODIFIED="1712767010192" TEXT="das wäre die offensichtliche Code-Vereinfachung"/>
|
||||
<node CREATED="1712767010819" ID="ID_1785032368" MODIFIED="1712767031884" TEXT="und würde bzg. der Erkennung sauber top ⟶ down arbeiten"/>
|
||||
<node CREATED="1712767033160" ID="ID_1069761407" MODIFIED="1712767053312" TEXT="dann ist aber unklar wie die externe Reaktion getriggert wird"/>
|
||||
<node CREATED="1712767033160" ID="ID_1069761407" MODIFIED="1731699713469" TEXT="dann ist aber unklar wie die externe Reaktion getriggert wird">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
genauer: eine externe Reaktion ist sicher nicht etws, was Layer-2 einfach machen kann — hier entstehe eine zunehmend komplexe Dependency-Injection, insofern der Layer-2 auch Entscheidungen für den Service als Ganzes trifft
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#5e5c75" DESTINATION="ID_1642624688" ENDARROW="Default" ENDINCLINATION="719;33;" ID="Arrow_ID_1722015988" STARTARROW="None" STARTINCLINATION="338;16;"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1731712916425" ID="ID_872583288" MODIFIED="1731713025545" TEXT="zumindest hab ich jetzt die Erkennung in eine Methode in Layer-2 extrahiert">
|
||||
<arrowlink COLOR="#23b91f" DESTINATION="ID_722076886" ENDARROW="Default" ENDINCLINATION="1530;2127;" ID="Arrow_ID_1785760257" STARTARROW="None" STARTINCLINATION="-1253;43;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712766759846" ID="ID_483185917" MODIFIED="1712766801924" TEXT="bei Emergency-Erkennung im work-Pull eine Exception werfen">
|
||||
<node CREATED="1712767072187" ID="ID_1670222323" MODIFIED="1712767105314" TEXT="ganz ein fieser Trick — würde aber im aktuellen Stand die Probleme lösen"/>
|
||||
|
|
@ -130917,8 +130947,10 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1712767159375" ID="ID_1627406710" MODIFIED="1712767172097" TEXT="dann wäre die Emergency-Behandlung auf Scheduler-Komponenten-Level"/>
|
||||
<node CREATED="1712767172805" ID="ID_860911717" MODIFIED="1712767202045" TEXT="aber getriggert würde er i.d.R bei der Queue-Behandlung in Layer-2"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1712767219839" ID="ID_1642624688" MODIFIED="1712767714974" TEXT="Vertagt — Entscheidungs-Faktor ist das Signalisierungs-System">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1712767219839" ID="ID_1642624688" MODIFIED="1731704865163" TEXT="Vertagt — Entscheidungs-Faktor ist das Signalisierungs-System">
|
||||
<arrowlink COLOR="#6e3e89" DESTINATION="ID_459235865" ENDARROW="Default" ENDINCLINATION="506;31;" ID="Arrow_ID_321080977" STARTARROW="None" STARTINCLINATION="-736;-24;"/>
|
||||
<arrowlink COLOR="#6e3e89" DESTINATION="ID_877599570" ENDARROW="Default" ENDINCLINATION="-1171;-67;" ID="Arrow_ID_1052751359" STARTARROW="None" STARTINCLINATION="-736;-24;"/>
|
||||
<linktarget COLOR="#5e5c75" DESTINATION="ID_1642624688" ENDARROW="Default" ENDINCLINATION="719;33;" ID="Arrow_ID_1722015988" SOURCE="ID_1069761407" STARTARROW="None" STARTINCLINATION="338;16;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -131426,7 +131458,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1713135206679" ID="ID_1775229427" MODIFIED="1713135398059" TEXT="Aber: mit 512 Nodes tritt das Problem nicht auf">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1713135274627" ID="ID_474427976" MODIFIED="1713135278870" TEXT="für 4ms"/>
|
||||
<node CREATED="1713135279578" ID="ID_1655783173" MODIFIED="1713135290933" TEXT="für 5ms lösen wir eine SchedulerEmergency aus"/>
|
||||
<node CREATED="1713135279578" ID="ID_1655783173" MODIFIED="1713135290933" TEXT="für 5ms lösen wir bereits eine SchedulerEmergency aus"/>
|
||||
<node CREATED="1713135383258" ID="ID_1427209469" MODIFIED="1713135395155" TEXT="wenn man dafür die Schwelle anhebt : dann läuft er durch"/>
|
||||
</node>
|
||||
<node CREATED="1713135778518" ID="ID_1026046718" MODIFIED="1713135806670" TEXT="exakt ist diese Anzahl zyklen nicht: es sind dann schon mal 6 statt 4"/>
|
||||
|
|
@ -132465,6 +132497,22 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731706422224" ID="ID_974503731" MODIFIED="1731709824617" TEXT="Behandlung für Jobs > DUTY_CYCLE_TOLERANCE">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wenn diese naiv reingelassen werden und die gesamte Work-Kapazität ausschöpfen, führt der nächste »Tick«-Job zur <b>Scheduler-Emergency</b>.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#b60c43" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="-861;-54;" ID="Arrow_ID_818837170" STARTARROW="None" STARTINCLINATION="-590;32;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731709837511" ID="ID_1797274775" MODIFIED="1731709979326" TEXT="verwandtes Problem: Signalisierung der Emergency">
|
||||
<arrowlink COLOR="#8e3855" DESTINATION="ID_256718341" ENDARROW="Default" ENDINCLINATION="490;-21;" ID="Arrow_ID_904544666" STARTARROW="None" STARTINCLINATION="717;37;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698933282432" ID="ID_918993851" MODIFIED="1698933288745" TEXT="Bedeutung der Queue-Performance">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -132534,6 +132582,45 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731700747092" ID="ID_432163500" MODIFIED="1731700772941" TEXT="fragiles Verhalten bei gebrochenem Schedule">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<node CREATED="1731700786715" ID="ID_1312861889" MODIFIED="1731701028764" TEXT="der Schdeuler arbeitet probabilistisch — ist aber zugleich offen und unkoordiniert"/>
|
||||
<node CREATED="1731701044358" ID="ID_774692462" MODIFIED="1731701090913" TEXT="wenig Möglichkeiten einen Kontrollverlust rechtzeitig zu bemerken...."/>
|
||||
<node CREATED="1731701157937" ID="ID_1153180150" MODIFIED="1731701265565" TEXT="unbefriedigte Dependencies bleiben einfach hängen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wenn man einen Verarbeitungsvorkang darstellt als Jobs mit Dependency-Verkettung, dann kann diese Verarbeitung ohne Weiteres irgendwo stecken bleiben, ohne daß ein Fehler ersichtlich ist; der einzige Signalisierungs-Mechanismus sind compulsory-Jobs (und das ist ein relativ brachialer Mechanismus)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731705282278" ID="ID_1193889112" MODIFIED="1731705482192" TEXT="Jobs können insgesamt »zu fett« sein">
|
||||
<linktarget COLOR="#de0597" DESTINATION="ID_1193889112" ENDARROW="Default" ENDINCLINATION="803;58;" ID="Arrow_ID_362639277" SOURCE="ID_673966027" STARTARROW="None" STARTINCLINATION="538;30;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731705524616" HGAP="58" ID="ID_528546646" MODIFIED="1731709887978" TEXT="zu viele exzessiv lang laufende Jobs sind ein Planungsfehler...." VSHIFT="4">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Es sind Render-jobs denkbar, die <i>mehrere Stunden brauchen!</i>
|
||||
</p>
|
||||
<p>
|
||||
Da es keine übergeordnete Koordinierungs-Instanz gibt, muß in diesem Fall von der Job-Planung aus für frei bleibende Restkapazität für Admin-Aufgaben gesorgt werden — denn wenn alle verfügbaren Worker mit solchen langwierigen Berechnungen belegt sind, findet kein »Tick« mehr statt (und der nächste Tick hat seine Deadline überfahren und löst eine <b>Scheduler-Emergency</b> aus). Ohne eine übergeordnete Kapazitäts- und Engine-Steuerung ist diese Situation <i>nicht adäquat zu handhaben: </i>entweder wir bekommen permanent und erwartbar eine Fehler-Situation, oder wir können die Parallelität nicht ausschöpfen, weil wir eine ganze Core freihalten müssen, oder wir müssen überprovisionieren.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#c00159" DESTINATION="ID_528546646" ENDARROW="Default" ENDINCLINATION="6;363;" ID="Arrow_ID_432556827" SOURCE="ID_1047177219" STARTARROW="None" STARTINCLINATION="-664;34;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731701587357" ID="ID_100642146" MODIFIED="1731701835497" TEXT="#1362 Scheduler Emergency">
|
||||
<arrowlink COLOR="#d52960" DESTINATION="ID_619384635" ENDARROW="Default" ENDINCLINATION="-2477;105;" ID="Arrow_ID_175149574" STARTARROW="None" STARTINCLINATION="1042;92;"/>
|
||||
<arrowlink COLOR="#d52960" DESTINATION="ID_256718341" ENDARROW="Default" ENDINCLINATION="-2477;105;" ID="Arrow_ID_1154862155" STARTARROW="None" STARTINCLINATION="1042;92;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -133235,7 +133322,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-8;-5;" ID="Arrow_ID_435946798" STARTARROW="None" STARTINCLINATION="-79;0;"/>
|
||||
<arrowlink COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-3;-9;" ID="Arrow_ID_435946798" STARTARROW="None" STARTINCLINATION="-73;0;"/>
|
||||
</node>
|
||||
<node CREATED="1685314344399" ID="ID_1217096258" MODIFIED="1685314716242" TEXT="Reaktion auf externe Ereignisse ist der absolute Gegenpol einer Zeitsteuerung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -133272,6 +133359,24 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731706222560" ID="ID_1047177219" MODIFIED="1731709887978" TEXT="aufwendie Render-Aufgaben passen nicht ins Konzept">
|
||||
<arrowlink COLOR="#c00159" DESTINATION="ID_528546646" ENDARROW="Default" ENDINCLINATION="6;363;" ID="Arrow_ID_432556827" STARTARROW="None" STARTINCLINATION="-664;34;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731706331004" ID="ID_1988316403" MODIFIED="1731706418134" TEXT="Scheduler kann keine ununterbrochenen Jobs > DUTY_CYCLE_TOLERANCE verarbeiten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...wenn diese die gesamte Work-Kapazität ausschöpfen, führt der nächste »Tick«-Job zur <b>Scheduler-Emergency</b>.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node CREATED="1731706422224" HGAP="80" ID="ID_1875138790" MODIFIED="1731709589954" TEXT="müßte dafür komplizierte Spezialbehandlung »oben drauf« setzen" VSHIFT="4">
|
||||
<arrowlink COLOR="#b60c43" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="-861;-54;" ID="Arrow_ID_1529827421" STARTARROW="None" STARTINCLINATION="-580;27;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685314776038" ID="ID_100581546" MODIFIED="1685314801303" TEXT="so gesehen — wir haben ein Problem">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
|
|
@ -133284,7 +133389,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-8;-5;" ID="Arrow_ID_435946798" SOURCE="ID_30132170" STARTARROW="None" STARTINCLINATION="-79;0;"/>
|
||||
<linktarget COLOR="#8c4d64" DESTINATION="ID_1447380879" ENDARROW="Default" ENDINCLINATION="-3;-9;" ID="Arrow_ID_435946798" SOURCE="ID_30132170" STARTARROW="None" STARTINCLINATION="-73;0;"/>
|
||||
</node>
|
||||
<node CREATED="1685315368175" ID="ID_212885906" MODIFIED="1685315397463" TEXT="wir haben komplett konträre Anforderungen gleichermaßen zu befriedigen">
|
||||
<node CREATED="1685315468539" ID="ID_640947563" MODIFIED="1685315806051" TEXT="Playback ist häufig, wäre aber viel billiger auch zu haben">
|
||||
|
|
@ -133702,6 +133807,17 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<arrowlink COLOR="#544ad5" DESTINATION="ID_1227874220" ENDARROW="Default" ENDINCLINATION="-1477;121;" ID="Arrow_ID_677451247" STARTARROW="None" STARTINCLINATION="-536;-12;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731632025178" ID="ID_256718341" LINK="https://issues.lumiera.org/ticket/1362#comment:1" MODIFIED="1731709979326" TEXT="aber der Tick kann selber überfahren werden (�� Deadlock)">
|
||||
<linktarget COLOR="#8e3855" DESTINATION="ID_256718341" ENDARROW="Default" ENDINCLINATION="490;-21;" ID="Arrow_ID_904544666" SOURCE="ID_1797274775" STARTARROW="None" STARTINCLINATION="717;37;"/>
|
||||
<linktarget COLOR="#d52960" DESTINATION="ID_256718341" ENDARROW="Default" ENDINCLINATION="-2477;105;" ID="Arrow_ID_1154862155" SOURCE="ID_100642146" STARTARROW="None" STARTINCLINATION="1042;92;"/>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
<node CREATED="1731702096252" HGAP="25" ID="ID_318845632" MODIFIED="1731702123129" TEXT="es gäbe eine Stelle in Layer-2 wo das erkennbar ist" VSHIFT="12">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1731702157572" ID="ID_1448268226" LINK="#ID_441812703" MODIFIED="1731702199510" TEXT="(die Signalisierung von dort ist aber nicht trivial zu lösen)">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698530399254" ID="ID_1046746147" MODIFIED="1698530408833" TEXT="Außen-Überwachung...">
|
||||
<node CREATED="1698530409796" ID="ID_324754876" MODIFIED="1698530428896" TEXT="könnte ein sanity-Check beim Zugriff sein"/>
|
||||
|
|
@ -133712,12 +133828,15 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1698530454718" ID="ID_1982008339" MODIFIED="1698530612783" TEXT="muß vor dem BlockFlow-Clean-up sitzen">
|
||||
<arrowlink COLOR="#ed3471" DESTINATION="ID_355476974" ENDARROW="Default" ENDINCLINATION="-616;43;" ID="Arrow_ID_729257748" STARTARROW="None" STARTINCLINATION="689;49;"/>
|
||||
</node>
|
||||
<node CREATED="1698971338638" ID="ID_1616058266" MODIFIED="1698971382127" TEXT="Warnschwelle == Deadline der periodischen »Tick«-Activity">
|
||||
<node CREATED="1698971338638" ID="ID_1616058266" MODIFIED="1731698980884" TEXT="Warnschwelle == Deadline der periodischen »Tick«-Activity">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
derzeit eingestellt auf 50ms
|
||||
derzeit eingestellt auf 200ms
|
||||
</p>
|
||||
<p>
|
||||
(das sind Tick-Zyklen — nicht klar ob das reicht, denn in den Streß-Tests habe ich gesehen, daß das Schedule durchaus leicht mal um mehrere 100ms weg-rutschen kann)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
|
|
@ -134138,10 +134257,31 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<arrowlink COLOR="#fe152a" DESTINATION="ID_1983682769" ENDARROW="Default" ENDINCLINATION="714;22;" ID="Arrow_ID_976291150" STARTARROW="None" STARTINCLINATION="422;18;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2b7af" COLOR="#5c4d6e" CREATED="1712767219839" ID="ID_376748016" MODIFIED="1712767825639" TEXT="Verbindung EngineObserver ⟵ Scheduler-Emergency">
|
||||
<node BACKGROUND_COLOR="#d2b7af" COLOR="#5c4d6e" CREATED="1712767219839" ID="ID_376748016" MODIFIED="1731704649880" TEXT="Verbindung EngineObserver ⟵ Scheduler-Emergency">
|
||||
<arrowlink COLOR="#8a3494" DESTINATION="ID_459235865" ENDARROW="Default" ENDINCLINATION="506;31;" ID="Arrow_ID_42313313" STARTARROW="None" STARTINCLINATION="-1413;-61;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1712767596984" ID="ID_877599570" MODIFIED="1731704873017" TEXT="Weiterleitung der Emergency im Scheduler klären">
|
||||
<linktarget COLOR="#6e3e89" DESTINATION="ID_877599570" ENDARROW="Default" ENDINCLINATION="-1171;-67;" ID="Arrow_ID_1052751359" SOURCE="ID_1642624688" STARTARROW="None" STARTINCLINATION="-736;-24;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1731704911918" ID="ID_304510502" MODIFIED="1731705258884" TEXT="mutual Dependency zwischen Queue-Pull und Service-Level">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Sowohl der Tick-Service, alsauch das pullWork müssen die Queue aktualisieren und obsolete Einträge wegwerfen; dabei kann aber eine Scheduler-Emergency auftreten (konkret: ein compulsory-task steht am Queue-Head, hat aber bereits seine Deadline überfahren, weshalb man ihn nur noch wegwerfen kann, denn der zugehörige Activity-Chain könnte bereits dealloziert bzw. recycled sein; und im Besonderen könnte dieser compulsory-task <b>der nächste Tick</b> sein).
|
||||
</p>
|
||||
<p>
|
||||
Aber Scheduler-Emergency gehört ganz eindeutig auf den top-Level, und muß dann sogar nach außen signalisiert werden, weil der Scheduler dieses Problem nicht selbst lösen kann
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1731705260057" ID="ID_673966027" MODIFIED="1731705482192" TEXT="komplexes Thema — globale Render-Steuerung">
|
||||
<arrowlink COLOR="#de0597" DESTINATION="ID_1193889112" ENDARROW="Default" ENDINCLINATION="803;58;" ID="Arrow_ID_362639277" STARTARROW="None" STARTINCLINATION="538;30;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698531826447" ID="ID_1031213188" MODIFIED="1698531840094" TEXT="Mechanismus zum Wiederanlauf schaffen">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
|
|
@ -134187,6 +134327,16 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
<node CREATED="1693238644990" ID="ID_1196672113" MODIFIED="1693238729300" TEXT="Laststeuerung für »free-wheeling« / background render">
|
||||
<arrowlink COLOR="#965d71" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="286;89;" ID="Arrow_ID_494620026" STARTARROW="None" STARTINCLINATION="2087;110;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731709631970" ID="ID_1414604117" LINK="https://issues.lumiera.org/ticket/1322" MODIFIED="1731709696219" TEXT=" #1322 Free-wheeling quality Render ">
|
||||
<arrowlink COLOR="#ec1b72" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="74;-4;" ID="Arrow_ID_1073115607" STARTARROW="None" STARTINCLINATION="-107;7;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731709490129" ID="ID_1586716013" LINK="https://issues.lumiera.org/ticket/1382" MODIFIED="1731709795398" TEXT="#1382 schedule long-running Tasks ">
|
||||
<linktarget COLOR="#b60c43" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="-861;-54;" ID="Arrow_ID_818837170" SOURCE="ID_974503731" STARTARROW="None" STARTINCLINATION="-590;32;"/>
|
||||
<linktarget COLOR="#b60c43" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="-861;-54;" ID="Arrow_ID_1529827421" SOURCE="ID_1875138790" STARTARROW="None" STARTINCLINATION="-580;27;"/>
|
||||
<linktarget COLOR="#ec1b72" DESTINATION="ID_1586716013" ENDARROW="Default" ENDINCLINATION="74;-4;" ID="Arrow_ID_1073115607" SOURCE="ID_1414604117" STARTARROW="None" STARTINCLINATION="-107;7;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693840934074" ID="ID_571516538" MODIFIED="1693840995972" TEXT="Render-Engie Lebenszyklus: start / stop">
|
||||
|
|
@ -134201,8 +134351,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1684869810400" TEXT="Scheduler">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1731698766206" TEXT="Scheduler">
|
||||
<icon BUILTIN="prepare"/>
|
||||
<node CREATED="1688438164169" ID="ID_1339299906" MODIFIED="1688438167334" TEXT="Funktionalität">
|
||||
<node CREATED="1680563512563" ID="ID_960191744" LINK="#ID_1218283238" MODIFIED="1699651252147" TEXT="Layer-2">
|
||||
<node CREATED="1692566489639" ID="ID_1996598339" MODIFIED="1692566493766" TEXT="Steuer-Funktionen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue