Scheduler: devise scheme for load control

- organise by principles rather than implementing a mechanism
- keep the first version simple yet flexible
- conduct empiric research under synthetic load

Basic scheme:
- tend for next
- classify free capacity
- scattered targeted wait
This commit is contained in:
Fischlurch 2023-10-22 16:45:13 +02:00
parent ccf970eaee
commit e5638119f5
7 changed files with 575 additions and 7 deletions

View file

@ -559,7 +559,7 @@ namespace gear {
* Activity deadlines are evenly spaced, for a simple heuristic we can just divide
* actual Epoch duration by the fill factor (longer Epoch => less capacity).
* To avoid control oscillations however, it seems prudent to use damping by
* an exponential moving average, nominally over #AVERAGE_EPOCHS.
* an exponential moving average, nominally over #Strategy::averageEpochs().
* The current epochStep_ is assumed to be such a moving average,
* and will be updated accordingly.
*/
@ -578,7 +578,7 @@ namespace gear {
// damped adjustment towards ideal size
double contribution = double(_raw(actualLen)) / _raw(epochStep_) / adjust;
// Exponential MA: mean ≔ mean * (N-1)/N + newVal/N
// Exponential MA: mean ≔ mean · (N-1)/N + newVal/N
auto N = Strategy::averageEpochs();
double avgFactor = (contribution + N-1) / N;
adjustEpochStep (avgFactor);

View file

@ -29,9 +29,9 @@
** scenarios, a wide array of load patterns may be encountered, complicating
** any generic performance optimisation. Rather, the participating components
** are designed to withstand a short-term imbalance, expecting that general
** engine parametrisation will be adjusted based on moving averages.
** engine parametrisation will be adjusted based on moving averages.
**
** @see scheduler.hpp
** @see scheduler.hpp
** @see SchedulerStress_test
**
** @todo WIP-WIP-WIP 10/2023 »Playback Vertical Slice«
@ -45,11 +45,13 @@
#include "lib/error.hpp"
//#include "vault/gear/block-flow.hpp"
#include "vault/gear/activity-lang.hpp"
//#include "lib/symbol.hpp"
#include "lib/nocopy.hpp"
//#include "lib/util.hpp"
//#include <string>
#include <chrono>
namespace vault{
@ -57,6 +59,7 @@ namespace gear {
// using util::isnil;
// using std::string;
using std::chrono::microseconds;
/**
@ -75,6 +78,43 @@ namespace gear {
LoadController (BlockFlowAlloc& blockFlow)
: allocator_{blockFlow}
{ }
/**
* @note const and non-grooming
*/
bool
tendedNext() const
{
UNIMPLEMENTED ("Predicate to determine if next foreseeable Activity was tended for");
}
void
tendNext()
{
UNIMPLEMENTED ("tend for the next foreseeable Activity");
}
enum
Capacity {SPINTIME ///< imminent activities
,NEARTIME ///< capacity for active processing required
,WORKTIME ///< typical stable work task rhythm expected
,IDLETIME ///< time to go to sleep
};
Capacity
classifyCapacity() const
{
UNIMPLEMENTED ("establish a categorisation for available capacity");
}
microseconds
scatteredDelayTime()
{
UNIMPLEMENTED ("establish a randomised targeted delay time");
}
};

View file

@ -33,7 +33,7 @@
** @see SchedulerInvocation Layer-1
** @see SchedulerCommutator Layer-2
**
** @todo WIP-WIP-WIP 6/2023 »Playback Vertical Slice«
** @todo WIP-WIP 10/2023 »Playback Vertical Slice«
**
*/
@ -75,7 +75,7 @@ namespace gear {
/******************************************************//**
* »Scheduler-Service« : coordinate render activities.
* @todo WIP-WIP 6/2023
* @todo WIP-WIP 10/2023
* @see BlockFlow
* @see SchedulerUsage_test
*/
@ -112,6 +112,16 @@ namespace gear {
{ }
/**
*
*/
void
ignite()
{
UNIMPLEMENTED("suicide");
}
/**
*
*/
@ -169,6 +179,17 @@ namespace gear {
}
/**
* send this thread into a targeted short-time wait.
* @return how to proceed further with this worker
*/
activity::Proc
scatteredDelay()
{
UNIMPLEMENTED("scattered short-term delay");
}
/** @internal expose a binding for Activity execution */
class ExecutionCtx;
};

View file

@ -32,6 +32,12 @@ END
TEST "Scheduler Load-Control" SchedulerLoadControl_test <<END
return: 0
END
PLANNED "Scheduler Integration" SchedulerService_test <<END
return: 0
END

View file

@ -0,0 +1,109 @@
/*
SchedulerLoadControl(Test) - verify scheduler load management facility
Copyright (C) Lumiera.org
2023, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
/** @file scheduler-load-control-test.cpp
** unit test \ref SchedulerLoadControl_test
*/
#include "lib/test/run.hpp"
#include "vault/gear/load-controller.hpp"
//#include "lib/time/timevalue.hpp"
//#include "lib/format-cout.hpp"
//#include "lib/util.hpp"
//#include <utility>
using test::Test;
//using std::move;
//using util::isSameObject;
namespace vault{
namespace gear {
namespace test {
// using lib::time::FrameRate;
// using lib::time::Offset;
// using lib::time::Time;
/*************************************************************************//**
* @test verify behaviour patterns relevant for Scheduler load control.
* @see SchedulerCommutator_test
* @see SchedulerService_test
* @see SchedulerStress_test
*/
class SchedulerLoadControl_test : public Test
{
virtual void
run (Arg)
{
simpleUsage();
walkingDeadline();
setupLalup();
}
/** @test TODO demonstrate a simple usage scenario
* @todo WIP 10/23 define 🔁 implement
*/
void
simpleUsage()
{
BlockFlowAlloc bFlow;
LoadController lcontrl{bFlow};
}
/** @test TODO
* @todo WIP 10/23 🔁 define implement
*/
void
walkingDeadline()
{
UNIMPLEMENTED ("walking Deadline");
}
/** @test TODO
* @todo WIP 10/23 🔁 define implement
*/
void
setupLalup()
{
}
};
/** Register this test class... */
LAUNCHER (SchedulerLoadControl_test, "unit engine");
}}} // namespace vault::gear::test

View file

@ -55,6 +55,7 @@ namespace test {
* @see SchedulerActivity_test
* @see SchedulerInvocation_test
* @see SchedulerCommutator_test
* @see SchedulerLoadControl_test
*/
class SchedulerService_test : public Test
{

View file

@ -80558,7 +80558,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#435e98" CREATED="1693317527566" ID="ID_393706947" MODIFIED="1693317722746" TEXT="Fazit">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1693317530251" ID="ID_496219214" MODIFIED="1693317616273" TEXT="betrachte die Redundanz als Spielraum zur Beweglichkeit"/>
<node CREATED="1693317530251" ID="ID_496219214" MODIFIED="1697937932990" TEXT="betrachte die Redundanz als Spielraum zur Beweglichkeit">
<arrowlink COLOR="#5adeb2" DESTINATION="ID_598148359" ENDARROW="Default" ENDINCLINATION="52;-139;" ID="Arrow_ID_155448561" STARTARROW="None" STARTINCLINATION="638;34;"/>
</node>
<node CREATED="1693317673355" ID="ID_258047795" MODIFIED="1693317696718" TEXT="Zeitfenster-Parameter sollten innerhalb eines Terms konstant sein"/>
<node CREATED="1693317617453" ID="ID_812974850" MODIFIED="1693317653450" TEXT="auf die kontextuellen Parameter kann weitgehend verzichtet werden"/>
<node CREATED="1693317661471" ID="ID_709533668" MODIFIED="1693317672145" TEXT="es wird stets der n&#xe4;chst greifbare Parameter verwendet"/>
@ -82122,6 +82124,314 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1687737433506" ID="ID_1608121280" MODIFIED="1687737442698" TEXT="einfacher Activity-Transport">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697933690995" ID="ID_872890784" MODIFIED="1697933814964" TEXT="elementare Betriebssteuerung">
<linktarget COLOR="#ff4e63" DESTINATION="ID_872890784" ENDARROW="Default" ENDINCLINATION="-1829;161;" ID="Arrow_ID_1982313538" SOURCE="ID_1583501788" STARTARROW="None" STARTINCLINATION="-1150;-47;"/>
<icon BUILTIN="flag-pink"/>
<node CREATED="1697933830568" ID="ID_425307167" MODIFIED="1697933841004" TEXT="Anforderung">
<icon BUILTIN="yes"/>
<node CREATED="1697933847838" ID="ID_52485323" MODIFIED="1697933874566" TEXT="wenn Activities anstehen, mu&#xdf; der Scheduler laufen">
<node CREATED="1697935493785" ID="ID_1808648428" MODIFIED="1697935513050" TEXT="der initiale Z&#xfc;nd-Impuls daf&#xfc;r mu&#xdf; von au&#xdf;en kommen"/>
<node CREATED="1697935584350" ID="ID_1788226279" MODIFIED="1697935603608" TEXT="sobald er l&#xe4;uft, mu&#xdf; er auch seinen eigenen &#xbb;Tick&#xab; aktivieren"/>
</node>
<node CREATED="1697934020751" ID="ID_1139695361" MODIFIED="1697934032818" TEXT="wenn nichts mehr passiert, kann er sich deaktivieren">
<node CREATED="1697935611257" ID="ID_436115424" MODIFIED="1697935652768" TEXT="zun&#xe4;chst werden die Worker schlafen geschickt">
<node CREATED="1697935685080" ID="ID_1125666331" MODIFIED="1697935700776" TEXT="Vorsicht: vorausschauend handeln"/>
<node CREATED="1697935701613" ID="ID_601914515" MODIFIED="1697935798105" TEXT="der Schlaf-Zyklus soll relativ lang sein">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
um das System nicht unn&#246;tig zu belasten
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697935831136" ID="ID_328104821" MODIFIED="1697935849059" TEXT="polling workers stellen aber selbst eine Belastung dar">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697938335223" ID="ID_490005829" MODIFIED="1697938354584" TEXT="und zwar wegen Contention und generellen OS-Resourcen"/>
<node CREATED="1697938355148" ID="ID_1006912313" MODIFIED="1697938372181" TEXT="aber nicht kurzzeitig &#x2014; daf&#xfc;r sind die Worker ja da"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697935894004" ID="ID_1878267826" MODIFIED="1697935929293" TEXT="&#x27f9; mu&#xdf; also eine explizite Verz&#xf6;gerung einbauen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697938430466" ID="ID_1280875799" MODIFIED="1697941924835" TEXT="Stufen-Schema">
<linktarget COLOR="#7f95ab" DESTINATION="ID_1280875799" ENDARROW="Default" ENDINCLINATION="10;121;" ID="Arrow_ID_1356077365" SOURCE="ID_1342732339" STARTARROW="None" STARTINCLINATION="284;21;"/>
<node CREATED="1697938486782" ID="ID_1684596361" MODIFIED="1697938500100" TEXT="kurzfristig &#x27f6; yield-wait"/>
<node CREATED="1697938912817" ID="ID_1435841099" MODIFIED="1697938952106" TEXT="zeitnah &#x27f6; gezielte Pause">
<node CREATED="1697939077160" ID="ID_1342346924" MODIFIED="1697939096276" TEXT="ein Thread-sleep in der Work-Function"/>
<node CREATED="1697939104567" ID="ID_1909227046" MODIFIED="1697939121793" TEXT="auf kurz hinter die n&#xe4;chste Activity geimed"/>
</node>
<node CREATED="1697939007756" ID="ID_1814410393" MODIFIED="1697939068200" TEXT="idle-Time &#x27f6; schlafen schicken"/>
</node>
</node>
</node>
<node CREATED="1697935657451" ID="ID_1200603474" MODIFIED="1697935676437" TEXT="diese beenden sich dann nach einiger Zeit von selbst">
<node CREATED="1697936056094" ID="ID_1569058603" MODIFIED="1697936822180" TEXT="Scheduler mu&#xdf; daf&#xfc;r sorgen, da&#xdf; das auch m&#xf6;glich wird">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Das bedeutet: bei nur vereinzelt vorhandenen Tasks d&#252;rfen diese nicht zuf&#228;llig verteilt werden (sonst bleiben alle Worker am Leben). Vielmehr mu&#223; bevorzugt derjenige den n&#228;chsten Task bekommen, der ohnehin<i>&#160; grade gearbeitet hat</i>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1697936111527" ID="ID_1844164309" MODIFIED="1697941569266" TEXT="&#x27f9; mu&#xdf; also einen &#xbb;Idler&#xab; anders behandeln als einen grade aktiven Worker">
<linktarget COLOR="#6463c4" DESTINATION="ID_1844164309" ENDARROW="Default" ENDINCLINATION="-359;14;" ID="Arrow_ID_1762094389" SOURCE="ID_387348315" STARTARROW="None" STARTINCLINATION="12;-45;"/>
<node CREATED="1697936891271" ID="ID_816798666" MODIFIED="1697939174942">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Idler: findet <i>direkt beim Eintritt</i>&#160;in pullWork() nichts zu tun vor
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1697936959055" ID="ID_687912678" MODIFIED="1697939181596">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Worker: findet <i>nach </i>einem Work-Zyklus nichts zu tun vor
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node CREATED="1697936154433" ID="ID_1597069116" MODIFIED="1697936164028" TEXT="schlie&#xdf;lich bleibt nur noch der Tick &#xfc;brig">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697936179454" ID="ID_446529044" MODIFIED="1697936204128" TEXT="der Tick mu&#xdf; erkennen, da&#xdf; allein auf der Welt ist">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697936205251" ID="ID_131464995" MODIFIED="1697936223185" TEXT="das ist so nicht offensichtlich">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1697936244473" ID="ID_671338782" MODIFIED="1697936373448" TEXT="der Tick kann feststellen, da&#xdf; nur er selber als n&#xe4;chstes ansteht">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
<node CREATED="1697935467508" ID="ID_370682037" MODIFIED="1697935479215" TEXT="Reserve-Kapazit&#xe4;t bei Bedarf aktivieren">
<node CREATED="1697937331101" ID="ID_834796842" MODIFIED="1697938265914" TEXT="Scheduler mu&#xdf; (im Tick) erkennen, da&#xdf; er &#xfc;berlastet ist">
<arrowlink COLOR="#3c7bbb" DESTINATION="ID_250349956" ENDARROW="Default" ENDINCLINATION="15;-74;" ID="Arrow_ID_776284276" STARTARROW="None" STARTINCLINATION="190;10;"/>
</node>
<node CREATED="1697937401803" ID="ID_377144590" MODIFIED="1697938280621" TEXT="Ansatz: moving-Average &#xfc;ber die Schedule-Verz&#xf6;gerung">
<node CREATED="1697937428529" ID="ID_1566747005" MODIFIED="1697937445897" TEXT="feststellbar wenn wir tats&#xe4;chlich einen Dispatch machen"/>
<node CREATED="1697937446741" ID="ID_976027856" MODIFIED="1697937461935" TEXT="um wieviel ist &quot;now&quot; hinter der geplanten Water-Level-Zeit?">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1697937478170" ID="ID_1099620146" MODIFIED="1697937490843" TEXT="liegen diese Informationen &#xfc;berhaupt vor?">
<icon BUILTIN="help"/>
<node CREATED="1697937571163" ID="ID_1306343127" MODIFIED="1697937694750" TEXT="normalerweise nicht">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...weil der water-level ein internes Implementierungsdetail von Layer-1 ist, und der eigentliche Dispatch mit &quot;now&quot; erfolgt. M&#246;glicherweise hab' ich mich da verrant &#8212; andererseits wollte ich ganz explizit nicht &#252;berall und in jeder Activity auch noch eine Startzeit mitschleppen, sondern habe mich darauf verlegt, diese Information <i>kontextuell zu handhaben</i>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1697937696156" ID="ID_174871580" MODIFIED="1697937707679" TEXT="aber bei einem POST schon">
<node COLOR="#435e98" CREATED="1697937859072" ID="ID_598148359" MODIFIED="1697938012371" TEXT="redundante Startzeit-Info zahlt sich nun aus">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...und ich hatte k&#252;rzlich noch solche Zweifel ob das Design komplett entgleist, habe mich dann aber entschieden, locker zu lassen
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#5adeb2" DESTINATION="ID_598148359" ENDARROW="Default" ENDINCLINATION="52;-139;" ID="Arrow_ID_155448561" SOURCE="ID_496219214" STARTARROW="None" STARTINCLINATION="638;34;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697938044605" ID="ID_230946166" MODIFIED="1697938065691" TEXT="geeigneten Punkt f&#xfc;r diese Beobachtung finden">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1697938180363" ID="ID_250349956" MODIFIED="1697938258083" TEXT="Trigger/Schwellwert + freie Kapazit&#xe4;t &#x27f9; hochfahren">
<linktarget COLOR="#3c7bbb" DESTINATION="ID_250349956" ENDARROW="Default" ENDINCLINATION="15;-74;" ID="Arrow_ID_776284276" SOURCE="ID_834796842" STARTARROW="None" STARTINCLINATION="190;10;"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1697939318387" ID="ID_19803713" MODIFIED="1697939337745" TEXT="Gefahr: alle Worker zwar aktivert aber derzeit schlafend">
<icon BUILTIN="clanbomber"/>
<node CREATED="1697939343479" ID="ID_1211423451" MODIFIED="1697939452988" TEXT="&#x27f9; dann w&#xe4;re das System ohne Handlungsm&#xf6;glichkeit zeitweise geblockt"/>
<node CREATED="1697942238583" ID="ID_939651320" MODIFIED="1697942253202" TEXT="Abhilfe">
<icon BUILTIN="yes"/>
<node CREATED="1697942254924" ID="ID_112390329" MODIFIED="1697979569952" TEXT="Warte-Zyklen zuf&#xe4;llig verteilen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
damit im Schnitt jedes 1/Nte - Warte-Intervall sich ein Worker meldet
</p>
</body>
</html>
</richcontent>
<node CREATED="1697979636585" ID="ID_860834763" MODIFIED="1697979662307" TEXT="die Startpunkte der Idle-Zyklen auf die Idle-Periode verteilen"/>
<node CREATED="1697979662919" ID="ID_1977764043" MODIFIED="1697979714012" TEXT="aber analog auch warte-Pausen auf die zeitnah-Phase verteilen"/>
</node>
<node CREATED="1697942340409" ID="ID_483764419" MODIFIED="1697942351380" TEXT="mit hinreichend Puffer l&#xe4;ngerfristig vorplanen"/>
<node CREATED="1697942899578" ID="ID_1831185639" MODIFIED="1697942954171" TEXT="zeitnah-Phase sinnvoll bemessen">
<node CREATED="1697943207013" ID="ID_461693614" MODIFIED="1697943398859" TEXT="nur h&#xf6;chstens so lang wie man problemlos verschwenden kann">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
denn: innerhalb der zeitnah-Phase wird jeder verf&#252;gbare worker per gezieltem Schlaf auf die n&#228;chste headTime gesetzt, und damit ist er bis dahin geblockt. Also sollte es extrem unwahrscheinlich sein, da&#223; inzwischen so kurzfristig noch was dazwischen geplant wird
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1697943528922" ID="ID_1864150010" MODIFIED="1697943563874" TEXT="aber lang genug um kurzfristiges Polling, re-Scheduliing und Staffelungen abzudecken"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697979975717" ID="ID_1427794703" MODIFIED="1697980022395" TEXT="falls das nicht gen&#xfc;gt &#x27f6; den idle-Wait unterbrechbar machen">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697940307771" ID="ID_844059029" MODIFIED="1697940319855" TEXT="Regulierungs-Schema (1.Wurf)">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697940394533" ID="ID_785288479" MODIFIED="1697940402312" TEXT="Kriterium &#xbb;nichts zu tun&#xab;">
<node CREATED="1697940405507" ID="ID_994386789" MODIFIED="1697940450809" TEXT="hierzu den Abstand zur headTime beachten!"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697941259810" ID="ID_1031482347" MODIFIED="1697980089996" TEXT="den &#xbb;tended level&#xab; merken">
<icon BUILTIN="idea"/>
<node CREATED="1697941294460" ID="ID_203013250" MODIFIED="1697941353814" TEXT="einen working Worker auf die headTime zielen"/>
<node CREATED="1697941360345" ID="ID_91924483" MODIFIED="1697941370127" TEXT="dieser ist damit schon f&#xfc;r den n&#xe4;chsten Task vorgemerkt"/>
<node CREATED="1697941370860" ID="ID_30634920" MODIFIED="1697941385461" TEXT="dann kann der tendedLevel dorthin gesetzt werden"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697980065968" ID="ID_521731162" MODIFIED="1697980081914" TEXT="Vorsicht: setzt Grooming-Token voraus">
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node CREATED="1697941504300" ID="ID_523971112" MODIFIED="1697941543535" TEXT="headTime == tendedLevel und &gt; zeitnah &#x27f6; nichts zu tun"/>
<node CREATED="1697941894113" ID="ID_1342732339" MODIFIED="1697941933095" TEXT="&lt; zeitnah &#x27f9; Stufen-Schema anwenden">
<arrowlink COLOR="#7f95ab" DESTINATION="ID_1280875799" ENDARROW="Default" ENDINCLINATION="10;121;" ID="Arrow_ID_1356077365" STARTARROW="None" STARTINCLINATION="284;21;"/>
</node>
</node>
<node CREATED="1697940327885" ID="ID_387348315" MODIFIED="1697941569266" TEXT="Unterscheidung working / idle">
<arrowlink COLOR="#6463c4" DESTINATION="ID_1844164309" ENDARROW="Default" ENDINCLINATION="-359;14;" ID="Arrow_ID_1762094389" STARTARROW="None" STARTINCLINATION="12;-45;"/>
<node CREATED="1697941581727" ID="ID_1655948334" MODIFIED="1697941591937" TEXT="working (=after work)">
<node CREATED="1697941593803" ID="ID_1548473253" MODIFIED="1697941694724" TEXT="headTime != tendedLevel &#x27f9; address headTime"/>
<node CREATED="1697941696039" ID="ID_1607237016" MODIFIED="1697941806125" TEXT="else: send to random delay &lt; idleTime">
<node CREATED="1697941970643" ID="ID_344346872" MODIFIED="1697941987290" TEXT="das soll f&#xfc;r gleichm&#xe4;&#xdf;ige Verteilung der Idler sorgen"/>
<node CREATED="1697941988288" ID="ID_651724736" MODIFIED="1697942020800" TEXT="wenn sie nach dem random Delay kommen und es ist nichts zu tun &#x27f9; Schlaf"/>
</node>
</node>
<node CREATED="1697941808823" ID="ID_1987890221" MODIFIED="1697941818519" TEXT="idle (= enter work)">
<node CREATED="1697941851251" ID="ID_1516348817" MODIFIED="1697941880419" TEXT="if not tendedLevel &#x27f9; address headTime"/>
<node CREATED="1697941881102" ID="ID_1281507935" MODIFIED="1697941890218" TEXT="else: switch to sleep"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#10425c" CREATED="1697979756658" ID="ID_373117026" MODIFIED="1697979894501" TEXT="Prinzipien">
<font NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1697979763457" ID="ID_921223140" MODIFIED="1697979838170" TEXT="einfach halten und empririsch vorgehen">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1697979793341" ID="ID_1889195922" MODIFIED="1697982185048" TEXT="keine &#xbb;Mechanismen&#xab; bauen">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1697979808075" ID="ID_95576898" MODIFIED="1697982191396" TEXT="stattdessen: generische Prinzipien">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697979825353" ID="ID_475190835" MODIFIED="1697982176624" TEXT="Punkte f&#xfc;r Flexibilit&#xe4;t vorsehen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697979852789" ID="ID_925253615" MODIFIED="1697982166711" TEXT="statistische Untersuchungen">
<arrowlink COLOR="#ffd3a8" DESTINATION="ID_1502196172" ENDARROW="Default" ENDINCLINATION="-417;-573;" ID="Arrow_ID_18099677" STARTARROW="None" STARTINCLINATION="-1881;175;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node CREATED="1697982199141" ID="ID_921733297" MODIFIED="1697982257689" TEXT="tended-Next Activity">
<node CREATED="1697982264012" ID="ID_432697255" MODIFIED="1697982325736" TEXT="der n&#xe4;chst absehbaren Activity im Voraus einen Worker vormerken"/>
<node CREATED="1697982394971" ID="ID_298295774" MODIFIED="1697982411264" TEXT="die sonstige frei werdene Kapazit&#xe4;t grob kategorisieren"/>
</node>
<node CREATED="1697982413572" ID="ID_1701704976" MODIFIED="1697982424659" TEXT="Wartezyklen randomisieren"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982430798" ID="ID_858120344" MODIFIED="1697982440269" TEXT="Implementierung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982445677" ID="ID_1503747441" MODIFIED="1697982460315" TEXT="Ankerpunkte">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697982488254" ID="ID_1839282150" MODIFIED="1697982492138" TEXT="incomingCapacity"/>
<node CREATED="1697982492782" ID="ID_1050821331" MODIFIED="1697982497641" TEXT="outgoingCapacity"/>
<node CREATED="1697982575563" ID="ID_1770606344" MODIFIED="1697982580261" TEXT="dispatchedCapacity"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982589257" HGAP="11" ID="ID_1783139757" MODIFIED="1697982614929" TEXT="pro-forma in den LoadController legen" VSHIFT="9">
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982455236" ID="ID_645321047" MODIFIED="1697982460315" TEXT="Schemata">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982678423" ID="ID_77969589" MODIFIED="1697983174220" TEXT="tendNext">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982717584" ID="ID_267473149" MODIFIED="1697983179411" TEXT="Pr&#xfc;f-Pr&#xe4;dikat: tendedNext()">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697982757371" ID="ID_1084006128" MODIFIED="1697983275515" TEXT="const und non-grooming"/>
<node CREATED="1697983183366" ID="ID_1016039063" MODIFIED="1697983192701" TEXT="Zugriff auf headTime und Vergleich"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697983155214" ID="ID_1677472042" MODIFIED="1697983174220" TEXT="classifyCapacity">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697985093803" ID="ID_1553570724" MODIFIED="1697985096031" TEXT="enum">
<node CREATED="1697985096625" ID="ID_1387570892" MODIFIED="1697985176660" TEXT="SPINTIME"/>
<node CREATED="1697985096625" ID="ID_1218749290" MODIFIED="1697985105934" TEXT="NEARTIME"/>
<node CREATED="1697985096625" ID="ID_1654025176" MODIFIED="1697985108469" TEXT="WORKTIME"/>
<node CREATED="1697985096625" ID="ID_196379275" MODIFIED="1697985110981" TEXT="IDLETIME"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697983292684" ID="ID_1923883572" MODIFIED="1697983303707" TEXT="scatteredDelay">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697983567535" ID="ID_567326127" MODIFIED="1697983640429" TEXT="ist eine Dispatch-Funktion">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
man schickt einen Worker in &#187;scattered delay&#171;
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="info"/>
<node CREATED="1697983591252" ID="ID_777679840" MODIFIED="1697983596782" TEXT="liefert activity::PROC"/>
<node CREATED="1697983597603" ID="ID_1430310887" MODIFIED="1697983605069" TEXT="f&#xfc;hrt die Verz&#xf6;gerung unmittelbar aus"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697983546449" ID="ID_1801117774" MODIFIED="1697983563416" TEXT="scatteredDelayTime()">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982436029" ID="ID_288711039" MODIFIED="1697982440270" TEXT="Test">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1687738213842" ID="ID_683259902" MODIFIED="1687738250423" TEXT="Payload: ActOrder">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1687738222176" ID="ID_777939699" MODIFIED="1687738267070" TEXT="&#xbb;waterlevel&#xab; f&#xfc;r Zeit-Ordnung">
@ -82133,6 +82443,21 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697982818498" ID="ID_136482882" MODIFIED="1697982841387" TEXT="Deadline ber&#xfc;cksichtigen ">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697982844409" ID="ID_1374530988" MODIFIED="1697982854041" TEXT="im Datenrecord mitf&#xfc;hren"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697982854605" ID="ID_651171432" MODIFIED="1697982875378" TEXT="Zusicherung: kein Zugriff auf verfallene Activities">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697982880930" ID="ID_1142296301" MODIFIED="1697982897699" TEXT="ist tragendes Element der Speicherverwaltung"/>
<node CREATED="1697982898279" ID="ID_1086820599" MODIFIED="1697982926481" TEXT="verfallene Activities d&#xfc;rfen wiederverwendet werden">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697982938058" ID="ID_1655832509" MODIFIED="1697983074142" TEXT="Problem: Deadlines f&#xfc;r non-timebound modes">
<arrowlink COLOR="#fe6147" DESTINATION="ID_917322834" ENDARROW="Default" ENDINCLINATION="631;-14;" ID="Arrow_ID_1361409427" STARTARROW="None" STARTINCLINATION="953;54;"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1687738237630" ID="ID_706592774" MODIFIED="1687738266530" TEXT="Pointer auf die Activity (im BlockFlow)">
<icon BUILTIN="button_ok"/>
</node>
@ -87086,6 +87411,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node CREATED="1697979852789" ID="ID_256258060" MODIFIED="1697982148553" TEXT="dient auch dem Aufbau einer Perfomance-Me&#xdf;einrichtung">
<arrowlink COLOR="#ffd3a8" DESTINATION="ID_1502196172" ENDARROW="Default" ENDINCLINATION="-417;-573;" ID="Arrow_ID_1874842097" STARTARROW="None" STARTINCLINATION="-1430;70;"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1697734151893" ID="ID_674126526" MODIFIED="1697734162364" TEXT="Problem: Laststeuerung">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697734165115" ID="ID_1491991406" MODIFIED="1697734182886" TEXT="das sonstige System darf nicht in S&#xe4;ttigung gehen"/>
@ -88314,6 +88642,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1689204331764" ID="ID_578018270" MODIFIED="1689555121736" TEXT="vorerst einfache ged&#xe4;mpfte Mittelung">
<linktarget COLOR="#6e7c9b" DESTINATION="ID_578018270" ENDARROW="Default" ENDINCLINATION="295;548;" ID="Arrow_ID_1545475117" SOURCE="ID_601531168" STARTARROW="None" STARTINCLINATION="1465;-194;"/>
<icon BUILTIN="yes"/>
<node CREATED="1689354964927" ID="ID_1525931195" MODIFIED="1689354982888" TEXT="mir schwebt ein exponentielles moving-average vor"/>
<node CREATED="1689355051116" ID="ID_214862798" MODIFIED="1689355076675" TEXT="Ansatz">
@ -89312,6 +89641,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685034805714" ID="ID_601531168" MODIFIED="1685034823237" TEXT="gewichtete moving-Averages">
<arrowlink COLOR="#6e7c9b" DESTINATION="ID_578018270" ENDARROW="Default" ENDINCLINATION="295;548;" ID="Arrow_ID_1545475117" STARTARROW="None" STARTINCLINATION="1465;-194;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685034336329" ID="ID_1204987843" MODIFIED="1685034344505" TEXT="langlebige Instanzen">
@ -89399,6 +89729,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693238542895" ID="ID_917322834" MODIFIED="1693238802819" TEXT="Deadlines for &#xbb;free wheeling&#xab; and background rendering">
<arrowlink COLOR="#e7367a" DESTINATION="ID_1212740184" ENDARROW="Default" ENDINCLINATION="12;-24;" ID="Arrow_ID_1622880291" STARTARROW="None" STARTINCLINATION="104;5;"/>
<linktarget COLOR="#683034" DESTINATION="ID_917322834" ENDARROW="Default" ENDINCLINATION="445;-22;" ID="Arrow_ID_57467075" SOURCE="ID_1858134894" STARTARROW="None" STARTINCLINATION="557;24;"/>
<linktarget COLOR="#fe6147" DESTINATION="ID_917322834" ENDARROW="Default" ENDINCLINATION="631;-14;" ID="Arrow_ID_1361409427" SOURCE="ID_1655832509" STARTARROW="None" STARTINCLINATION="953;54;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
@ -89637,6 +89968,53 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697980200719" ID="ID_1502196172" MODIFIED="1697982166711" TEXT="Lastverhalten empirisch feststellen">
<linktarget COLOR="#ffd3a8" DESTINATION="ID_1502196172" ENDARROW="Default" ENDINCLINATION="-417;-573;" ID="Arrow_ID_18099677" SOURCE="ID_925253615" STARTARROW="None" STARTINCLINATION="-1881;175;"/>
<linktarget COLOR="#ffd3a8" DESTINATION="ID_1502196172" ENDARROW="Default" ENDINCLINATION="-417;-573;" ID="Arrow_ID_1874842097" SOURCE="ID_256258060" STARTARROW="None" STARTINCLINATION="-1430;70;"/>
<icon BUILTIN="bell"/>
<node CREATED="1697980233510" ID="ID_1582480940" MODIFIED="1697980238366" TEXT="Lastmuster">
<icon BUILTIN="info"/>
<node CREATED="1697980239834" ID="ID_541871417" MODIFIED="1697980244005" TEXT="Leerlauf"/>
<node CREATED="1697980280900" ID="ID_1253634670" MODIFIED="1697980373404" TEXT="unabh&#xe4;ngige Vollast"/>
<node CREATED="1697980419057" ID="ID_629834995" MODIFIED="1697980432523" TEXT="leichtverkettete Vollast"/>
<node CREATED="1697980433190" ID="ID_1880666855" MODIFIED="1697980437947" TEXT="hochverkettete Vollast"/>
<node CREATED="1697980460764" ID="ID_642586467" MODIFIED="1697980462399" TEXT="&#xdc;berlast"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697981112565" ID="ID_736511181" MODIFIED="1697981121972" TEXT="Me&#xdf;einrichtung aufbauen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697981124868" ID="ID_1995486807" MODIFIED="1697981139410" TEXT="Meta-Test: Zusatz-Last durch Me&#xdf;einrichtung feststellen">
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697981140392" ID="ID_830208203" MODIFIED="1697981434151" TEXT="Erfassungspunkte und zu erfassende Daten festlegen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1697981442202" ID="ID_1994085081" MODIFIED="1697981536989" TEXT="Ma&#xdf;gabe: statistische Auswertungen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
&#10233; bedeutet f&#252;r jedes Ereignis auch eine Kategorisierung zu erfassen, so da&#223; dann in der Auswertung sp&#228;ter proportionale Anteile beobachtbar werden
</p>
</body>
</html>
</richcontent>
<node CREATED="1697981581895" ID="ID_1199294273" MODIFIED="1697981641259" TEXT="wieviel Wartezeit verbringt ein aktiver Worker?"/>
<node CREATED="1697981666612" ID="ID_769519844" MODIFIED="1697981680252" TEXT="in welchen Phasen verbringt er diese Zeit?"/>
<node CREATED="1697981689097" ID="ID_16365365" MODIFIED="1697981718933" TEXT="was ist das &#x2205; Pr&#xfc;fintervall eines schlafenden Workers"/>
<node CREATED="1697981742690" ID="ID_1056869673" MODIFIED="1697981774561" TEXT="welcher Anteil der Schl&#xe4;fer wird schlie&#xdf;lich terminiert?"/>
<node CREATED="1697981788044" ID="ID_1133300561" MODIFIED="1697981842992" TEXT="wie lange ist die kumuliere Schlafzeit &#x2205; f&#xfc;r terminierte / wiedererweckte Schl&#xe4;fer?"/>
<node CREATED="1697981923290" ID="ID_1333367151" MODIFIED="1697981932364" TEXT="wann / wie lange war das System in Vollast?"/>
<node CREATED="1697981980202" ID="ID_162807330" MODIFIED="1697982002392" TEXT="waiting-due time &#x2205; der Activities im Scheduler"/>
<node CREATED="1697982054792" ID="ID_712555328" MODIFIED="1697982065291" TEXT="wieviele Activities werden von Schl&#xe4;fern &#xfc;bernommen"/>
<node CREATED="1697982086540" ID="ID_1123632550" MODIFIED="1697982105925" TEXT="waiting-due time speziell wenn von Schl&#xe4;fer &#xfc;bernommen"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697981156144" ID="ID_190534528" MODIFIED="1697981425435" TEXT="Datenerfassung &#xfc;ber EngineObserver realisieren">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
</node>
</node>
</node>
@ -90423,9 +90801,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node CREATED="1697933502816" ID="ID_1155890066" MODIFIED="1697933560271" TEXT="Laststeuerung">
<linktarget COLOR="#7d55a6" DESTINATION="ID_1155890066" ENDARROW="Default" ENDINCLINATION="-78;310;" ID="Arrow_ID_1724375377" SOURCE="ID_338601496" STARTARROW="None" STARTINCLINATION="-372;-24;"/>
<node CREATED="1697933512163" ID="ID_394926401" MODIFIED="1697933535592" TEXT="Zeitgesteuertes Rendern">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697933639127" ID="ID_1583501788" MODIFIED="1697933814964" TEXT="(vorl&#xe4;ufig) einfache Scheduler-Steuerung">
<arrowlink COLOR="#ff4e63" DESTINATION="ID_872890784" ENDARROW="Default" ENDINCLINATION="-1829;161;" ID="Arrow_ID_1982313538" STARTARROW="None" STARTINCLINATION="-1150;-47;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
<node CREATED="1693238644990" ID="ID_1196672113" MODIFIED="1693238729300" TEXT="Laststeuerung f&#xfc;r &#xbb;free-wheeling&#xab; / background render">
<arrowlink COLOR="#965d71" DESTINATION="ID_1960804622" ENDARROW="Default" ENDINCLINATION="286;89;" ID="Arrow_ID_494620026" STARTARROW="None" STARTINCLINATION="2087;110;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1693840934074" ID="ID_571516538" MODIFIED="1693840995972" TEXT="Render-Engie Lebenszyklus: start / stop">
<linktarget COLOR="#d87cae" DESTINATION="ID_571516538" ENDARROW="Default" ENDINCLINATION="-569;36;" ID="Arrow_ID_490264910" SOURCE="ID_1011982391" STARTARROW="None" STARTINCLINATION="-116;14;"/>
<icon BUILTIN="flag-yellow"/>
@ -90519,6 +90906,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1693841364032" ID="ID_951861985" MODIFIED="1693841380195" TEXT="regulieren/skalieren">
<linktarget COLOR="#7e4d5e" DESTINATION="ID_951861985" ENDARROW="Default" ENDINCLINATION="-213;-26;" ID="Arrow_ID_301980510" SOURCE="ID_187251325" STARTARROW="None" STARTINCLINATION="186;14;"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697933441324" ID="ID_338601496" MODIFIED="1697933566854" TEXT="geh&#xf6;rt zur Scheduler-Laststeuerung">
<arrowlink COLOR="#7d55a6" DESTINATION="ID_1155890066" ENDARROW="Default" ENDINCLINATION="-78;310;" ID="Arrow_ID_1724375377" STARTARROW="None" STARTINCLINATION="-372;-24;"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1693840260723" ID="ID_1171496185" MODIFIED="1693840333227" TEXT="lumiera_backend_init?">