Scheduler-test: complete and integrate computational load

This basically completes the Chain-Load framework;
a simple Scheduler integration run with all relevant features
can now be demonstrated.
This commit is contained in:
Fischlurch 2023-12-11 19:42:23 +01:00
parent db1ff7ded7
commit 347b9b24be
4 changed files with 408 additions and 207 deletions

View file

@ -50,7 +50,7 @@ END
PLANNED "Synthetic Load for Test" TestChainLoad_test <<END
TEST "Synthetic Load for Test" TestChainLoad_test <<END
return: 0
END

View file

@ -28,22 +28,14 @@
#include "lib/test/run.hpp"
#include "lib/test/test-helper.hpp"
#include "test-chain-load.hpp"
//#include "vault/real-clock.hpp"
//#include "lib/time/timevalue.hpp"
#include "vault/gear/job.h"
#include "lib/format-cout.hpp" ////////////////////////////////////TODO Moo-oh
#include "lib/test/diagnostic-output.hpp"//////////////////////////TODO TOD-oh
#include "lib/util.hpp"
#include <array>
//using lib::time::Time;
//using lib::time::FSecs;
using util::isnil;
using util::isSameObject;
//using lib::test::randStr;
//using lib::test::randTime;
using std::array;
@ -86,36 +78,31 @@ namespace test {
showcase_StablePattern();
verify_computation_load();
verify_reseed_recalculate();
verify_runtime_reference();
verify_scheduling_setup();
}
/** @test TODO demonstrate simple usage of the test-load
* @todo WIP 11/23 🔁 define ⟶ 🔁 implement
/** @test demonstrate simple usage of the test-load
* @todo WIP 11/23 ✔ define ⟶ ✔ implement
*/
void
usageExample()
{
auto anchor = RealClock::now();
auto offset = [&](Time when =RealClock::now()){ return _raw(when) - _raw(anchor); };
auto testLoad =
TestChainLoad{64}
.configureShape_simple_short_segments()
.configureShape_short_segments3_interleaved()
.buildToplolgy();
SHOW_EXPR(offset())
BlockFlowAlloc bFlow;
EngineObserver watch;
Scheduler scheduler{bFlow, watch};
SHOW_EXPR(testLoad.getHash())
CHECK (testLoad.getHash() == 0xD2F292D864CF8086);
SHOW_EXPR(offset())
testLoad.setupSchedule(scheduler)
.launch_and_wait();
SHOW_EXPR(offset())
SHOW_EXPR(testLoad.getHash())
CHECK (testLoad.getHash() == 0xD2F292D864CF8086);
}
@ -691,6 +678,7 @@ SHOW_EXPR(testLoad.getHash())
CHECK (stat.indicators[STAT_EXIT].pL == "0.48076923"_expect); // ½ exit per level
// »short_segments_interleaved«
// Increased seed probability combined with overall seed value 0 ◁──── (crucial, other seeds produce larger graphs)
// produces what seems to be the best stable repetition loop:
// same shape as in preceding, yet interwoven by 2 steps
@ -864,8 +852,8 @@ SHOW_EXPR(testLoad.getHash())
/** @test WIP verify calibration of a configurable computational load.
* @todo WIP 12/23 🔁 define ⟶ 🔁 implement
/** @test verify calibration of a configurable computational load.
* @todo WIP 12/23 ✔ define ⟶ ✔ implement
*/
void
verify_computation_load()
@ -874,74 +862,51 @@ SHOW_EXPR(testLoad.getHash())
CHECK (cpuLoad.timeBase == 100us);
double micros = cpuLoad.invoke();
SHOW_EXPR(micros)
CHECK (micros < 2000);
CHECK (micros > 2);
cpuLoad.calibrate();
micros = cpuLoad.invoke();
SHOW_EXPR(micros)
CHECK (micros < 133);
CHECK (micros > 80);
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
CHECK (micros < 110);
CHECK (micros > 90);
cpuLoad.useAllocation = true;
SHOW_EXPR(cpuLoad.useAllocation)
micros = cpuLoad.invoke();
SHOW_EXPR(micros)
CHECK (micros < 133);
CHECK (micros > 80);
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
CHECK (micros < 110);
CHECK (micros > 90);
cpuLoad.timeBase = 1ms;
cpuLoad.sizeBase *= 100;
SHOW_EXPR(cpuLoad.sizeBase)
cpuLoad.useAllocation = false;
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
cpuLoad.useAllocation = true;
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
cpuLoad.calibrate();
cpuLoad.useAllocation = false;
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
cpuLoad.useAllocation = true;
micros = cpuLoad.benchmark();
SHOW_EXPR(micros)
SHOW_EXPR(5)
cpuLoad.useAllocation = false;
micros = cpuLoad.invoke();
CHECK (micros > 900);
micros = cpuLoad.invoke(5);
SHOW_EXPR(micros)
CHECK (micros > 4600);
micros = cpuLoad.invoke(10);
CHECK (micros > 9500);
micros = cpuLoad.invoke(100);
CHECK (micros > 95000);
cpuLoad.useAllocation = true;
micros = cpuLoad.invoke();
CHECK (micros > 900);
micros = cpuLoad.invoke(5);
SHOW_EXPR(micros)
SHOW_EXPR(10)
cpuLoad.useAllocation = false;
CHECK (micros > 4600);
micros = cpuLoad.invoke(10);
SHOW_EXPR(micros)
cpuLoad.useAllocation = true;
micros = cpuLoad.invoke(10);
SHOW_EXPR(micros)
SHOW_EXPR(100)
cpuLoad.useAllocation = false;
CHECK (micros > 9500);
micros = cpuLoad.invoke(100);
SHOW_EXPR(micros)
cpuLoad.useAllocation = true;
micros = cpuLoad.invoke(100);
SHOW_EXPR(micros)
CHECK (micros > 95000);
}
@ -1059,6 +1024,18 @@ SHOW_EXPR(micros)
/** @test TODO compute synchronous execution time for reference
* @todo WIP 12/23 🔁 define ⟶ 🔁 implement
*/
void
verify_runtime_reference()
{
}
/** @test setup for running a chain-load as scheduled task
* - running an isolated Node recalculation
* - dispatch of this recalculation packaged as render job

View file

@ -40,8 +40,8 @@
** pass over all nodes; yet alternatively each node can be _scheduled_ as an individual
** computation job, which obviously requires that it's predecessor nodes have already
** been computed, otherwise the resulting hash will not match up with expectation.
** If significant per-node computation time is required, the hashing can be
** arbitrarily repeated at each node.
** If significant per-node computation time is required, an artificial computational
** load can be generated, controlled by a weight setting computed for each node.
**
** The topology of connectivity is generated randomly, yet completely deterministic through
** configurable _control functions_ driven by each node's (hash)value. This way, each node
@ -54,6 +54,11 @@
** controlling the topology can be configured using the lib::RandomDraw component, allowing
** either just to set a fixed probability or to define elaborate dynamic configurations
** based on the graph height or node connectivity properties.
** - expansionRule: controls forking of the graph behind the current node
** - reductionRule: controls joining of the graph into a combining successor node
** - seedingRule: controls injection of new start nodes in the middle of the graph
** - pruningRule: controls insertion of exit nodes to cut-off some chain immediately
** - weightRule: controls assignment of a Node::weight to command the ComputationalLoad
**
** ## Usage
** A TestChainLoad instance is created with predetermined maximum fan factor and a fixed
@ -70,6 +75,9 @@
** and showing predecessor -> successor connectivity. Seed nodes are distinguished by
** circular shape.
**
** Moreover, Statistics can be computed over the generated graph, allowing to draw some
** conclusions regarding node distribution and connectivity.
**
** @see TestChainLoad_test
** @see SchedulerStress_test
** @see random-draw.hpp
@ -83,17 +91,12 @@
#include "vault/common.hpp"
#include "lib/test/transiently.hpp"
//#include "lib/hash-value.h"
#include "vault/gear/job.h"
#include "vault/gear/scheduler.hpp"
#include "vault/gear/special-job-fun.hpp"
//#include "vault/gear/nop-job-functor.hpp"
#include "lib/uninitialised-storage.hpp"
#include "lib/test/microbenchmark.hpp"
#include "lib/time/timevalue.hpp"
//#include "lib/meta/variadic-helper.hpp"
//#include "lib/meta/function.hpp"
//#include "lib/wrapper.hpp"
#include "lib/time/quantiser.hpp"
#include "lib/iter-explorer.hpp"
#include "lib/format-string.hpp"
@ -117,17 +120,6 @@ namespace vault{
namespace gear {
namespace test {
using std::string;
using std::function;
using lib::time::Time;
using lib::time::TimeValue;
using lib::time::FrameRate;
using lib::time::Duration;
using lib::test::benchmarkTime;
using lib::test::microBenchmark;
// using lib::time::FSecs;
// using lib::time::Offset;
// using lib::meta::RebindVariadic;
using util::_Fmt;
using util::min;
using util::max;
@ -136,15 +128,22 @@ namespace test {
using util::unConst;
using util::toString;
using util::showHashLSB;
using lib::meta::_FunRet;
using lib::time::Time;
using lib::time::TimeValue;
using lib::time::FrameRate;
using lib::time::Duration;
using lib::test::benchmarkTime;
using lib::test::microBenchmark;
using lib::test::Transiently;
using lib::meta::_FunRet;
using std::string;
using std::function;
using std::make_pair;
using std::forward;
using std::string;
using std::swap;
using std::move;
// using boost::hash_combine;
using std::chrono_literals::operator ""s;
namespace err = lumiera::error;
@ -160,9 +159,12 @@ namespace test {
const size_t DEFAULT_CHUNKSIZE = 64; ///< number of computation jobs to prepare in each planning round
const size_t LOAD_BENCHMARK_RUNS = 500; ///< repetition count for calibration benchmark for ComputationalLoad
const double LOAD_SPEED_BASELINE = 100; ///< initial assumption for calculation speed (without calibration)
const microseconds LOAD_DEFAULT_TIME = 100us; ///< default time delay produced by ComputationalLoad at `Node.weight==1`
const size_t LOAD_DEFAULT_MEM_SIZE = 1000; ///< default allocation base size used if ComputationalLoad.useAllocation
const microseconds PLANNING_TIME_PER_NODE = 80us; ///< time budget to reserve for each node to be planned and scheduled
}
struct Statistic;
@ -405,6 +407,7 @@ namespace test {
/** Abbreviation for starting rules */
static Rule rule() { return Rule(); }
static Rule value(size_t v) { return Rule().fixedVal(v); }
static Rule
rule_atStart (uint v)
@ -449,13 +452,33 @@ namespace test {
}
/** preconfigured topology: isolated simple 2-step chains */
TestChainLoad&&
configureShape_short_chains2()
{
pruningRule(rule().probability(0.8));
weightRule(value(1));
return move(*this);
}
/** preconfigured topology: simple 3-step chains, starting interleaved */
TestChainLoad&&
configureShape_short_chains3_interleaved()
{
pruningRule(rule().probability(0.6));
seedingRule(rule_atStart(1));
weightRule(value(1));
return move(*this);
}
/** preconfigured topology: simple interwoven 3-step graph segments */
TestChainLoad&&
configureShape_simple_short_segments()
configureShape_short_segments3_interleaved()
{
seedingRule(rule().probability(0.8).maxVal(1));
reductionRule(rule().probability(0.75).maxVal(3));
pruningRule(rule_atJoin(1));
weightRule(value(1));
return move(*this);
}
@ -1077,6 +1100,23 @@ namespace test {
/**
* A calibratable CPU load to be invoked from a node job functor.
* Two distinct methods for load generation are provided
* - tight loop with arithmetics in register
* - repeatedly accessing and adding memory marked as `volatile`
* The `timeBase` multiplied with the given `scaleStep´ determines
* the actual run time. When using the _memory method_ (`useAllocation`),
* a heap block of `staleStep*sizeBase` is used, and the number of
* repetitions is chosen such as to match the given timing goal.
* @note since performance depends on the platform, it is mandatory
* to invoke the [self calibration](\ref ComputationalLoad::calibrate)
* at least once prior to use. Performing the calibration with default
* base settings is acceptable, since mostly the overall expense is
* growing linearly; obviously the calibration is more precisely
* however when using the actual `timeBase` and `sizeBase` of
* the intended usage. The calibration watches processing
* speed in a microbenchmark with `LOAD_BENCHMARK_RUNS`
* repetitions; the result is stored in a static
* variable and can thus be reused.
*/
class ComputationalLoad
{
@ -1093,43 +1133,49 @@ namespace test {
}
public:
microseconds timeBase = 100us;
size_t sizeBase = 1000;
microseconds timeBase = LOAD_DEFAULT_TIME;
size_t sizeBase = LOAD_DEFAULT_MEM_SIZE;
bool useAllocation = false;
/** cause a delay by computational load */
double
invoke (uint scaleStep =1)
{
if (scaleStep == 0) return 0;
if (scaleStep == 0 or timeBase < 1us)
return 0; // disabled
return useAllocation? benchmarkTime ([this,scaleStep]{ causeMemProcessLoad (scaleStep); })
: benchmarkTime ([this,scaleStep]{ causeComputationLoad(scaleStep); });
}
/** @return averaged runtime in current configuration */
double
benchmark (uint scaleStep =1)
{
return microBenchmark ([&]{ invoke(scaleStep);}
,LOAD_BENCHMARK_RUNS)
.first;
.first; // ∅ runtime in µs
}
void
calibrate()
{
cout<<">CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(1)<<endl;
TRANSIENTLY(useAllocation) = false;
performIncrementalCalibration();
useAllocation = true;
performIncrementalCalibration();
cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(1)<<endl;
}
static void
calibrate (microseconds timeBase)
void
maybeCalibrate()
{
ComputationalLoad probe;
probe.timeBase = timeBase;
probe.calibrate();
if (not isCalibrated())
calibrate();
}
bool
isCalibrated() const
{
return computationSpeed(false) != LOAD_SPEED_BASELINE;
}
private:
@ -1144,7 +1190,7 @@ cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(
allocNeeded (uint scaleStep)
{
auto cnt = roundsNeeded(scaleStep);
auto siz = scaleStep * sizeBase;
auto siz = max (scaleStep * sizeBase, 1u);
auto rep = max (cnt/siz, 1u);
// increase size to fit
siz = cnt / rep;
@ -1192,7 +1238,6 @@ cout<<"<CAL: speed="<<computationSpeed(useAllocation)<<" rounds:"<<roundsNeeded(
do {
speed = determineSpeed();
delta = abs(1.0 - speed/prev);
cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
prev = speed;
}
while (delta > 0.05);
@ -1293,10 +1338,12 @@ cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
using Node = typename TestChainLoad<maxFan>::Node;
Node* startNode_;
ComputationalLoad* compuLoad_;
public:
RandomChainCalcFunctor(Node& startNode)
RandomChainCalcFunctor(Node& startNode, ComputationalLoad* load =nullptr)
: startNode_{&startNode}
, compuLoad_{load}
{ }
@ -1309,7 +1356,9 @@ cout<<".CAL: "<<prev<<"->"<<speed<<" Δ="<<delta<<endl;
Node& target = startNode_[nodeIdx];
ASSERT (target.level == level);
// invoke the »media calculation«
cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<endl;
cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<endl;
if (compuLoad_ and target.weight)
compuLoad_->invoke (target.weight);
target.calculate();
}
@ -1363,7 +1412,7 @@ cout<<_Fmt{"\n!◆! %s: calc(i=%d, lev:%d)"} % markThread() % nodeIdx % level <<
{
size_t reachedLevel{0};
size_t targetNodeIDX = decodeNodeID (param.invoKey);
cout<<_Fmt{"\n!◆!plan...to:%d%19t|curr=%d (max:%d)"} % targetNodeIDX % currIdx_ % maxCnt_<<endl;
cout<<_Fmt{"\n!◆!plan...to:%d%19t|curr=%d (max:%d)"} % targetNodeIDX % currIdx_ % maxCnt_<<endl;
for ( ; currIdx_<maxCnt_; ++currIdx_)
{
Node* n = &nodes_[currIdx_];
@ -1413,7 +1462,7 @@ cout<<_Fmt{"%16t|n.(%d,lev:%d)"} % currIdx_ % n->level <<endl;
lib::UninitialisedDynBlock<ScheduleSpec> schedule_;
FrameRate levelSpeed_{1, Duration{_uTicks(1ms)}};
uint loadFactor_{2};
uint blockLoadFactor_{2};
size_t chunkSize_{DEFAULT_CHUNKSIZE};
TimeVar startTime_{Time::ANYTIME};
microseconds preRoll_{guessPlanningPreroll (chunkSize_)};
@ -1422,6 +1471,7 @@ cout<<_Fmt{"%16t|n.(%d,lev:%d)"} % currIdx_ % n->level <<endl;
std::promise<void> signalDone_{};
std::unique_ptr<ComputationalLoad> compuLoad_;
std::unique_ptr<RandomChainCalcFunctor<maxFan>> calcFunctor_;
std::unique_ptr<RandomChainPlanFunctor<maxFan>> planFunctor_;
@ -1476,6 +1526,7 @@ cout <<"--> reschedule to ..."<<nextChunkEndNode<<endl;
size_t firstChunkEndNode = calcNextChunkEnd(0)-1;
cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
schedule_.allocate (numNodes);
compuLoad_->maybeCalibrate();
startTime_ = anchorStartTime();
scheduler_.seedCalcStream (planningJob(firstChunkEndNode)
,manID_
@ -1487,7 +1538,8 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
ScheduleCtx (TestChainLoad& mother, Scheduler& scheduler)
: chainLoad_{mother}
, scheduler_{scheduler}
, calcFunctor_{new RandomChainCalcFunctor<maxFan>{chainLoad_.nodes_[0]}}
, compuLoad_{new ComputationalLoad}
, calcFunctor_{new RandomChainCalcFunctor<maxFan>{chainLoad_.nodes_[0], compuLoad_.get()}}
, planFunctor_{new RandomChainPlanFunctor<maxFan>{chainLoad_.nodes_[0], chainLoad_.numNodes_
,[this](size_t i, size_t l){ disposeStep(i,l); }
,[this](auto* p, auto* s) { setDependency(p,s);}
@ -1515,7 +1567,7 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
ScheduleCtx&&
withLoadFactor (uint factor_on_levelSpeed)
{
loadFactor_ = factor_on_levelSpeed;
blockLoadFactor_ = factor_on_levelSpeed;
}
ScheduleCtx&&
@ -1543,6 +1595,33 @@ cout <<"+++ "<<markThread()<<": seed(num:"<<numNodes<<")"<<endl;
manID_ = manID;
}
ScheduleCtx&&
withLoadTimeBase (microseconds timeBase =LOAD_DEFAULT_TIME)
{
compuLoad_->timeBase = timeBase;
}
ScheduleCtx&&
deactivateLoad()
{
compuLoad_->timeBase = 0us;
}
ScheduleCtx&&
withLoadMem (size_t sizeBase =LOAD_DEFAULT_MEM_SIZE)
{
if (not sizeBase)
{
compuLoad_->sizeBase = LOAD_DEFAULT_MEM_SIZE;
compuLoad_->useAllocation =false;
}
else
{
compuLoad_->sizeBase = sizeBase;
compuLoad_->useAllocation =true;
}
}
private:
/** push away any existing wait state and attach new clean state */
std::future<void>
@ -1609,7 +1688,7 @@ cout<<"ANCHOR="+relT(ank)+" preRoll="+util::toString(_raw(_uTicks(preRoll_)))<<e
FrameRate
calcLoadHint()
{
return FrameRate{levelSpeed_ * loadFactor_};
return FrameRate{levelSpeed_ * blockLoadFactor_};
}
size_t
@ -1631,7 +1710,7 @@ cout<<"ANCHOR="+relT(ank)+" preRoll="+util::toString(_raw(_uTicks(preRoll_)))<<e
the chain-load graph only defines dependencies over one level
thus the first level in the next chunk must still be able to attach
dependencies to the last row of the preceding chunk, implying that
those still need to be ahead of schedule.
those still need to be ahead of schedule, and not yet dispatched.
*/
size_t nextChunkLevel = chainLoad_.nodes_[lastNodeIDX].level;
nextChunkLevel = nextChunkLevel>2? nextChunkLevel-2 : 0;

View file

@ -96379,8 +96379,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1699745687140" ID="ID_703752888" MODIFIED="1699745716356" TEXT="es gibt eine Sammlung von Standard-Bausteinen zur Parametrisierung der Steuergr&#xf6;&#xdf;en"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1701477281049" TEXT="in separatem Test entwerfen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1697740857815" ID="ID_1544079509" MODIFIED="1702317805054" TEXT="in separatem Test entwerfen">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1697741633966" ID="ID_787175245" MODIFIED="1701476481436" TEXT="Nutzen vorher kl&#xe4;ren">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1697741661950" ID="ID_1735458016" MODIFIED="1697741661950" TEXT="Darstellung der Abh&#xe4;ngigkeits-Struktur">
@ -96396,8 +96396,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697743909120" ID="ID_483537733" MODIFIED="1697743924734" TEXT="#1346 reproducible computational load">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697740877587" ID="ID_1275890321" MODIFIED="1699747567145" TEXT="TestChainLoad_test">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1697740877587" ID="ID_1275890321" MODIFIED="1702317799986" TEXT="TestChainLoad_test">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1699747322625" ID="ID_1190216980" MODIFIED="1699804627509" TEXT="verify_Node">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1699753108010" ID="ID_1374103098" MODIFIED="1699754432064" TEXT="Default-Konstruktion">
@ -96767,14 +96767,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702180165409" ID="ID_168687387" MODIFIED="1702234110735" TEXT="verify_computation_load">
<node COLOR="#338800" CREATED="1702180165409" ID="ID_168687387" MODIFIED="1702317795714" TEXT="verify_computation_load">
<linktarget COLOR="#c26a36" DESTINATION="ID_168687387" ENDARROW="Default" ENDINCLINATION="-214;715;" ID="Arrow_ID_917319622" SOURCE="ID_257805938" STARTARROW="None" STARTINCLINATION="-169;-474;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180170904" ID="ID_1257116598" MODIFIED="1702180207372" TEXT="pr&#xfc;ft die konfigurierbare CPU-Last">
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702180170904" ID="ID_1257116598" MODIFIED="1702317797128" TEXT="pr&#xfc;ft die konfigurierbare CPU-Last">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702180201092" ID="ID_852013156" MODIFIED="1702180207372" TEXT="verifiziert den Eichungs-Proze&#xdf;">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1702180201092" ID="ID_852013156" MODIFIED="1702317798195" TEXT="verifiziert den Eichungs-Proze&#xdf;">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701374229504" ID="ID_1338953492" MODIFIED="1701374413822" TEXT="reseed_recalculate">
@ -96813,15 +96813,23 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701838479658" ID="ID_120274201" MODIFIED="1701838586016" TEXT="usageExample">
<linktarget COLOR="#bb1868" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" SOURCE="ID_111682569" STARTARROW="None" STARTINCLINATION="-428;0;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1701838479658" ID="ID_120274201" MODIFIED="1702317754549" TEXT="usageExample">
<linktarget COLOR="#7718bb" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" SOURCE="ID_111682569" STARTARROW="None" STARTINCLINATION="-428;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1701838487567" ID="ID_535031858" MODIFIED="1701838516891" TEXT="das ist zugleich ein einfacher Integrations-Test">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1701838497798" ID="ID_1377336908" MODIFIED="1701838519142" TEXT="verwendet also einen voll funktionalen Scheduler (und Threadpool)">
<icon BUILTIN="info"/>
</node>
<node CREATED="1702317761795" ID="ID_662891478" MODIFIED="1702317771621" TEXT="verwendet einen einfachen vorkonfigurierten Graphen"/>
<node COLOR="#338800" CREATED="1702317772680" ID="ID_1058689959" MODIFIED="1702317791471" TEXT="alles auf Default-Einstellungen (-&gt; 100&#xb5;s compuLoad)">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701374229504" ID="ID_521071616" MODIFIED="1702319695136" TEXT="verify_runtime_reference">
<linktarget COLOR="#51c3bc" DESTINATION="ID_521071616" ENDARROW="Default" ENDINCLINATION="-721;75;" ID="Arrow_ID_734579827" SOURCE="ID_393831927" STARTARROW="None" STARTINCLINATION="-378;-41;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1701017861080" ID="ID_797249846" MODIFIED="1701017874112" TEXT="nur begrenzte Verifikation">
@ -99442,8 +99450,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1699803875494" TEXT="Node">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1699746891934" ID="ID_1003055056" MODIFIED="1702317366383" TEXT="Node">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1699746898954" ID="ID_1174327209" MODIFIED="1702180967086" TEXT="Datenstruktur">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1699746902068" ID="ID_1045369485" MODIFIED="1699754419615" TEXT="maxFan ist ein Template-Param">
@ -99483,8 +99491,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#621ebb" DESTINATION="ID_96811527" ENDARROW="Default" ENDINCLINATION="374;25;" ID="Arrow_ID_1925771236" SOURCE="ID_1681365504" STARTARROW="None" STARTINCLINATION="135;10;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699747521150" ID="ID_356376425" MODIFIED="1699747533637" TEXT="kann durch Repetitionen aufwendig gemacht werden">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1699747521150" FOLDED="true" ID="ID_356376425" MODIFIED="1702317355301" TEXT="kann durch Repetitionen aufwendig gemacht werden">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1699813962931" ID="ID_944363802" MODIFIED="1702174785856" TEXT="repetition-Count in der Node speichern">
<arrowlink COLOR="#16a827" DESTINATION="ID_1466090082" ENDARROW="Default" ENDINCLINATION="77;19;" ID="Arrow_ID_1920139323" STARTARROW="None" STARTINCLINATION="-128;-105;"/>
<icon BUILTIN="button_ok"/>
@ -99536,8 +99544,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702175359697" ID="ID_514427629" MODIFIED="1702264066131" TEXT="entwickle eine einfache reine lokale CPU-Last">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1702175359697" ID="ID_514427629" MODIFIED="1702267758299" TEXT="entwickle eine einfache reine lokale CPU-Last">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1702175912809" ID="ID_163082441" MODIFIED="1702264184671" TEXT="als eigenst&#xe4;ndige Komponente realisiert">
<richcontent TYPE="NOTE"><html>
<head/>
@ -99567,37 +99575,49 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1702238439254" ID="ID_1895497300" MODIFIED="1702238456061">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
also: <b>beides</b>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
<node CREATED="1702252767113" ID="ID_688715635" MODIFIED="1702252791529">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
legt die Eichungs-Konstanten <i><font color="#152eb7">statisch </font></i>ab
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1702252795573" ID="ID_1426973621" MODIFIED="1702252808439" TEXT="wichtig f&#xfc;r effizienten Einsatz in Lasttest-Szenarien"/>
<node CREATED="1702252814273" ID="ID_184752238" MODIFIED="1702252838764" TEXT="mu&#xdf; daf&#xfc;r eine gewisse Koh&#xe4;renz der Eichung gew&#xe4;hrleisten">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1702311347888" ID="ID_1541319663" MODIFIED="1702311350974" TEXT="Konfiguration">
<node CREATED="1702311351992" ID="ID_1339903427" MODIFIED="1702311362539" TEXT="direkt per Zuweisung an public-Felder"/>
<node CREATED="1702311363310" ID="ID_1357141980" MODIFIED="1702311365148" TEXT="timeBase">
<node CREATED="1702311372795" ID="ID_1086898760" MODIFIED="1702311385352" TEXT="0 &#x27f9; deaktiviert global"/>
<node COLOR="#338800" CREATED="1702311434066" ID="ID_1184187363" MODIFIED="1702311445277" TEXT="per explizitem Check in invoke()">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1702311365794" ID="ID_918700853" MODIFIED="1702311367890" TEXT="sizeBase">
<node CREATED="1702311387387" ID="ID_1522029265" MODIFIED="1702311419281" TEXT="0 &#x27f9; 1 Repetition und Allokation in ben&#xf6;tigter Gr&#xf6;&#xdf;e">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#338800" CREATED="1702311422412" ID="ID_1741888978" MODIFIED="1702311430647" TEXT="gegen division by zero sch&#xfc;tzen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1702311368502" ID="ID_735670100" MODIFIED="1702311371089" TEXT="useAllocation"/>
</node>
<node COLOR="#435e98" CREATED="1702176870348" ID="ID_1843992678" MODIFIED="1702264178196" TEXT="soll statisch kalibrierbar sein">
<node CREATED="1702176883018" ID="ID_1063649357" MODIFIED="1702177162816" TEXT="auf 1 LoadUnit &#x2259; 500ms"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702177164613" ID="ID_1363806337" MODIFIED="1702177174397" TEXT="potentiell schwieriges Thema">
@ -99606,7 +99626,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702177263500" ID="ID_1442486267" MODIFIED="1702177272676" TEXT="der Arbeitspunkt kann extrem stark vom System abh&#xe4;ngen"/>
<node CREATED="1702177960453" ID="ID_1625146144" MODIFIED="1702177990715" TEXT="der konkrete Aufruf bedingt einen zus&#xe4;tzlichen, schwer kalkulierbaren Overhead"/>
</node>
<node COLOR="#435e98" CREATED="1702177290852" ID="ID_67369431" MODIFIED="1702264175024" TEXT="mu&#xdf; daf&#xfc;r mehrere microbenchmark-L&#xe4;ufe machen">
<node COLOR="#435e98" CREATED="1702177290852" FOLDED="true" ID="ID_67369431" MODIFIED="1702264175024" TEXT="mu&#xdf; daf&#xfc;r mehrere microbenchmark-L&#xe4;ufe machen">
<icon BUILTIN="yes"/>
<node CREATED="1702177304850" ID="ID_807191919" MODIFIED="1702177310093" TEXT="eine Grobmessung"/>
<node CREATED="1702177310801" ID="ID_1861526014" MODIFIED="1702177325890" TEXT="eine Feinmessung nach erster Kalibrierung"/>
@ -99626,8 +99646,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702180295927" ID="ID_773261601" MODIFIED="1702264050859" TEXT="Komponente testen">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1702180295927" ID="ID_773261601" MODIFIED="1702267755882" TEXT="Komponente testen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702170514679" ID="ID_1603893065" MODIFIED="1702180426043" TEXT="Infrastruktur f&#xfc;r einen &#xbb;weight&#xab;-Parameter">
<arrowlink COLOR="#68cb83" DESTINATION="ID_1963766841" ENDARROW="Default" ENDINCLINATION="549;30;" ID="Arrow_ID_1920696609" STARTARROW="None" STARTINCLINATION="47;-145;"/>
<icon BUILTIN="button_ok"/>
@ -99636,9 +99656,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#c26a36" DESTINATION="ID_168687387" ENDARROW="Default" ENDINCLINATION="-214;715;" ID="Arrow_ID_917319622" STARTARROW="None" STARTINCLINATION="-169;-474;"/>
<node COLOR="#435e98" CREATED="1702245098652" ID="ID_1449908056" MODIFIED="1702263276344" TEXT="Fehler im Test?">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
schwierig...
@ -99653,8 +99671,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Stelle schon mal fest: der Einzel-Lauf streut ganz deutlich. Und Cache-Effekte k&#246;nnten auch noch ein gewisses Problem darstellen (wenngleich auch der vorangegangene Test grunds&#228;tzlich den Code schon <i>vorgew&#228;rmt</i>&#160; hat. Also setze mal&#160;&#160;&#177;30% f&#252;r den Einzeltest an, aber nur &#177;10% f&#252;r den Benchmark
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="help"/>
</node>
<node COLOR="#338800" CREATED="1702263260126" ID="ID_1499147739" MODIFIED="1702264010690" TEXT="funktioniert ordentlich">
@ -99664,9 +99681,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702265746035" ID="ID_1709742498" MODIFIED="1702265757916" TEXT="gr&#xf6;&#xdf;ere Timebase &#x27f6; schneller"/>
<node CREATED="1702263578440" ID="ID_1625923973" MODIFIED="1702264017267" TEXT="mem wird langsamer">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
bei..
@ -99678,15 +99693,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
sizeBase = 100000 &#10236; +10-20%
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702178041646" ID="ID_1422218309" MODIFIED="1702178058926" TEXT="f&#xfc;r den konkreten Test wird dann eine Skalen-Stufe gew&#xe4;hlt">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1702178041646" ID="ID_1422218309" MODIFIED="1702317312550" TEXT="f&#xfc;r den konkreten Test wird dann eine Skalen-Stufe gew&#xe4;hlt">
<icon BUILTIN="button_ok"/>
<node CREATED="1702178070732" ID="ID_1943958168" MODIFIED="1702178083613" TEXT="per RandomDrawRegel &#x27f6; Node"/>
<node CREATED="1702178084682" ID="ID_1482968846" MODIFIED="1702178112522" TEXT="Skalenfaktor f&#xfc;r den ganzen Test">
<node CREATED="1702232275607" ID="ID_94944522" MODIFIED="1702232381062" TEXT="timeBase in &#xb5;s">
@ -99696,22 +99710,70 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702178113354" ID="ID_1844351587" MODIFIED="1702178121761" TEXT="der Eichfaktor aus der Kalibrierung">
<node CREATED="1702232275607" ID="ID_1593878835" MODIFIED="1702264132798" TEXT="computationSpeed()">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
repetitions/&#181;s
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#61778b" DESTINATION="ID_1593878835" ENDARROW="Default" ENDINCLINATION="138;-14;" ID="Arrow_ID_193276040" SOURCE="ID_683123783" STARTARROW="None" STARTINCLINATION="54;3;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702264216478" ID="ID_1256970210" MODIFIED="1702265717124" TEXT="per default mit 100&#xb5;s aktiv">
<node COLOR="#338800" CREATED="1702310848627" FOLDED="true" ID="ID_1289981656" MODIFIED="1702317329910" TEXT="Einbindung: erst &#xfc;ber den konkreten ScheduleCtx">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702312063775" ID="ID_1912884451" MODIFIED="1702312437576" TEXT="dort in einem unique_ptr gehalten">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702310867865" ID="ID_598880651" MODIFIED="1702312441519" TEXT="default-konstruiert und in den RandomChainCalcFunctor injiziert (ctor-DI)">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702310926577" ID="ID_160715907" MODIFIED="1702313285602" TEXT="setter-Builder">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1702310949446" ID="ID_1499329976" MODIFIED="1702313288220" TEXT="withLoadTimeBase(...)">
<node CREATED="1702311075735" ID="ID_1004880566" MODIFIED="1702313351230" TEXT="0 deaktiviert insgesamt">
<linktarget COLOR="#6d7b8c" DESTINATION="ID_1004880566" ENDARROW="Default" ENDINCLINATION="-21;33;" ID="Arrow_ID_38394156" SOURCE="ID_1684899351" STARTARROW="None" STARTINCLINATION="36;6;"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1702313291182" ID="ID_1684899351" MODIFIED="1702313356715" TEXT="deactivateLoad()">
<arrowlink COLOR="#6d7b8c" DESTINATION="ID_1004880566" ENDARROW="Default" ENDINCLINATION="-21;33;" ID="Arrow_ID_38394156" STARTARROW="None" STARTINCLINATION="36;6;"/>
</node>
<node COLOR="#435e98" CREATED="1702310996616" ID="ID_9783829" MODIFIED="1702313288221" TEXT="withLoadMem(sizeBase)">
<node CREATED="1702311031331" ID="ID_321137191" MODIFIED="1702311042151" TEXT="0 deaktiviert / schaltet auf CPU-Load zur&#xfc;ck"/>
<node CREATED="1702313163837" ID="ID_1098561635" MODIFIED="1702313171544" TEXT="sonst: aktiviert auch die Memory-Methode"/>
</node>
</node>
<node COLOR="#338800" CREATED="1702311129039" ID="ID_331667454" MODIFIED="1702312496254" TEXT="automatisch einmal kalibrieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702312477365" ID="ID_1388538795" MODIFIED="1702312495685" TEXT="im performRun()">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702312482009" ID="ID_1090639427" MODIFIED="1702312494941" TEXT="pr&#xfc;ft ob statische Kalibrierung vom Default abweicht">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1702312397572" ID="ID_1288275386" MODIFIED="1702312421687" TEXT="im RandomChainCalcFunctor optional">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702312422706" ID="ID_468355442" MODIFIED="1702312433486" TEXT="aufrufen wenn vorhanden">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702312427184" ID="ID_1377239804" MODIFIED="1702312432800" TEXT="und Node eine weight hat">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1702264216478" ID="ID_1256970210" MODIFIED="1702313387597" TEXT="per default mit 100&#xb5;s aktiv">
<arrowlink COLOR="#f41958" DESTINATION="ID_880925728" ENDARROW="Default" ENDINCLINATION="91;4;" ID="Arrow_ID_669621335" STARTARROW="None" STARTINCLINATION="-10;15;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1702310607196" ID="ID_1584452918" MODIFIED="1702313392698" TEXT="jdoch keine default-Node-Regel (default = pobability 0)">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#435e98" CREATED="1702310617411" ID="ID_495203598" MODIFIED="1702313394870" TEXT="ComputationLoad wird zwar aufgerufen, kehrt aber sofort zur&#xfc;ck">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1702310654134" ID="ID_1971907846" MODIFIED="1702317309286" TEXT="in Standard-Regels&#xe4;tze mit scaleStep = 1 eingebaut">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702264248082" ID="ID_880925728" MODIFIED="1702265717124" TEXT="&#x27f9; Konsequenz: mu&#xdf; Graph-Berechnung statisch messen k&#xf6;nnen">
@ -99739,7 +99801,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#338800" CREATED="1702158518149" ID="ID_1079943297" MODIFIED="1702173712470" TEXT="Hash aus mehreren Exit-Nodes kombinieren">
<node COLOR="#338800" CREATED="1702158518149" FOLDED="true" ID="ID_1079943297" MODIFIED="1702173712470" TEXT="Hash aus mehreren Exit-Nodes kombinieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#5b280f" CREATED="1702158566367" ID="ID_523736559" MODIFIED="1702163792736" TEXT="Spezialfall-Behandlung: nur eine Exit-Node">
<icon BUILTIN="button_cancel"/>
@ -100014,7 +100076,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#11660e" CREATED="1700761069915" ID="ID_557518427" MODIFIED="1700761165588" TEXT="Basis: &#xbb;ziehen&#xab; von Zufallszahlen aus dem Hash &#x27f6; lib::RandomDraw">
<arrowlink COLOR="#719f60" DESTINATION="ID_1225692248" ENDARROW="Default" ENDINCLINATION="-466;214;" ID="Arrow_ID_834549033" STARTARROW="None" STARTINCLINATION="241;10;"/>
</node>
<node COLOR="#338800" CREATED="1701012898916" ID="ID_1931960006" MODIFIED="1701476590458" TEXT="Regel-Baukasten aufbauen">
<node COLOR="#338800" CREATED="1701012898916" FOLDED="true" ID="ID_1931960006" MODIFIED="1702317469442" TEXT="Regel-Baukasten aufbauen">
<arrowlink COLOR="#5a509e" DESTINATION="ID_1092101612" ENDARROW="Default" ENDINCLINATION="8;265;" ID="Arrow_ID_362060244" STARTARROW="None" STARTINCLINATION="415;-28;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1701313975373" HGAP="49" ID="ID_1693658322" MODIFIED="1701314186518" TEXT="Bausteine" VSHIFT="14">
@ -100055,6 +100117,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1702317426755" HGAP="33" ID="ID_1821826492" MODIFIED="1702317441058" TEXT="vorkonfigurierte Standard-Graphen" VSHIFT="-3">
<icon BUILTIN="info"/>
<node CREATED="1702317450817" MODIFIED="1702317450817" TEXT="configureShape_short_chains2"/>
<node CREATED="1702317456195" ID="ID_1445949540" MODIFIED="1702317456195" TEXT="configureShape_short_chains3_interleaved"/>
<node CREATED="1702317460960" ID="ID_1823731538" MODIFIED="1702317460960" TEXT="configureShape_short_segments3_interleaved"/>
<node CREATED="1702317462619" ID="ID_739952809" MODIFIED="1702317464487" TEXT="..."/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1701225831100" ID="ID_502326802" MODIFIED="1701225843337" TEXT="seed und shufle zur Auswahl von Varianten">
@ -100916,7 +100985,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1701033623128" ID="ID_1915341389" MODIFIED="1701033635439" TEXT="durch das L&#xf6;schen wird ein sehr naheliegender Fehler vermieden"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701033495195" ID="ID_193483520" MODIFIED="1701374413822" TEXT="Ergebnisse im Test verifizieren">
<node COLOR="#338800" CREATED="1701033495195" FOLDED="true" ID="ID_193483520" MODIFIED="1701374413822" TEXT="Ergebnisse im Test verifizieren">
<arrowlink COLOR="#51c3bc" DESTINATION="ID_1338953492" ENDARROW="Default" ENDINCLINATION="-572;68;" ID="Arrow_ID_1159113647" STARTARROW="None" STARTINCLINATION="-272;-345;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701033509532" ID="ID_1793560814" MODIFIED="1701033521653" TEXT="Filter-Pr&#xe4;gdikate: isStart und isExit">
@ -100996,21 +101065,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702264442593" ID="ID_1012991246" MODIFIED="1702264507186" TEXT="lineare Berechnungs-Zeit m&#xfc;hsam bis unm&#xf6;glich zu ermitteln">
<icon BUILTIN="info"/>
</node>
<node CREATED="1702264696031" ID="ID_1280925602" MODIFIED="1702264716392" TEXT="daher Benchmark eines Berechnungs-Durchganges"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702264680182" ID="ID_1945693212" MODIFIED="1702264692151" TEXT="kann man einen theoretischen Concurrency-Faktor bestimmen?">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702264696031" ID="ID_1280925602" MODIFIED="1702319553572" TEXT="daher Benchmark eines Berechnungs-Durchganges als Operator anbieten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702319679776" ID="ID_102349499" MODIFIED="1702319686670" TEXT="calcRuntimeReference">
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#338800" CREATED="1701033495195" ID="ID_393831927" MODIFIED="1702319695136" TEXT="einfacher Test">
<arrowlink COLOR="#51c3bc" DESTINATION="ID_521071616" ENDARROW="Default" ENDINCLINATION="-721;75;" ID="Arrow_ID_734579827" STARTARROW="None" STARTINCLINATION="-378;-41;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1702264680182" ID="ID_1945693212" MODIFIED="1702319534283" TEXT="kann man einen theoretischen Concurrency-Faktor bestimmen?">
<icon BUILTIN="help"/>
<node CREATED="1702265262323" ID="ID_1908727445" MODIFIED="1702265353793" TEXT="ja ... die Datenstruktur ist g&#xfc;nstig">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
und zwar der Umstand, da&#223; die Nodes <i>innerhalb eines Levels stets voneinander unabh&#228;ngig sind; </i>deshalb sind <i>zumindest</i>&#160;diese Nodes komplett parallelisierbar
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1702265418472" ID="ID_565310505" MODIFIED="1702265468382" TEXT="Beschleunigungsfaktor: &#x2205;w / floor(&#x2205;w/concurrency)">
@ -101018,9 +101093,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700105555476" ID="ID_587761135" MODIFIED="1700105558876" TEXT="Scheduling">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1701488317653" ID="ID_502099140" MODIFIED="1702158167293" TEXT="Art der Integration festlegen">
<node COLOR="#338800" CREATED="1700105555476" ID="ID_587761135" MODIFIED="1702317677406" TEXT="Scheduling">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701488317653" FOLDED="true" ID="ID_502099140" MODIFIED="1702317515953" TEXT="Art der Integration festlegen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701488246119" ID="ID_518382795" LINK="#ID_53693227" MODIFIED="1701488287933" TEXT="Bezug zur &#xbb;Encodierung von Job-Argumenten&#xab;">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701490186822" ID="ID_658348473" MODIFIED="1701490206342" TEXT="#1295 job invocation parameter representation">
@ -101057,7 +101132,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1701488366430" ID="ID_1676473919" MODIFIED="1702158165070" TEXT="Steuerung des Zugriffs">
<node COLOR="#435e98" CREATED="1701488366430" FOLDED="true" ID="ID_1676473919" MODIFIED="1702158165070" TEXT="Steuerung des Zugriffs">
<node CREATED="1701488374014" ID="ID_923328966" MODIFIED="1701488576222">
<richcontent TYPE="NODE"><html>
<head/>
@ -101251,17 +101326,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701488306399" ID="ID_437847189" MODIFIED="1701488325489" TEXT="Schinttstelle bestimmen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1701488306399" ID="ID_437847189" MODIFIED="1702317522045" TEXT="Schinttstelle bestimmen">
<icon BUILTIN="button_ok"/>
<node CREATED="1701735941318" ID="ID_838192654" MODIFIED="1701735953071" TEXT="die Job-Functoren sind low-Level"/>
<node CREATED="1701735956675" ID="ID_1255143540" MODIFIED="1701735980625" TEXT="TestChainLoad hat Schedule-Operator">
<node CREATED="1701736001878" ID="ID_512576307" MODIFIED="1701736016095" TEXT="dieser bekommt die Scheduling-Charakteristiken"/>
<node CREATED="1701736046063" ID="ID_1447466146" MODIFIED="1701736059002" TEXT="und eine Referenz auf den Scheduler"/>
</node>
<node CREATED="1702317536683" ID="ID_575047185" MODIFIED="1702317601938" TEXT="Testlauf wird blockend abgewartet">
<arrowlink COLOR="#4867b6" DESTINATION="ID_735638406" ENDARROW="Default" ENDINCLINATION="-581;-687;" ID="Arrow_ID_1897270044" STARTARROW="None" STARTINCLINATION="-174;14;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493065993" ID="ID_1474617887" MODIFIED="1701493070377" TEXT="Implementierung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1701548966576" ID="ID_1078499413" MODIFIED="1701838335253" TEXT="Basis und Rahmen">
</node>
<node COLOR="#338800" CREATED="1701493065993" ID="ID_1474617887" MODIFIED="1702317613548" TEXT="Implementierung">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701548966576" FOLDED="true" ID="ID_1078499413" MODIFIED="1701838335253" TEXT="Basis und Rahmen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701549002234" ID="ID_1561610431" MODIFIED="1701735925477" TEXT="Design-Fragen zu kl&#xe4;ren">
<icon BUILTIN="button_ok"/>
@ -101594,7 +101672,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1701493082582" ID="ID_1894179968" MODIFIED="1701661794782" TEXT="Dispatcher-Job implementieren">
<node COLOR="#338800" CREATED="1701493082582" FOLDED="true" ID="ID_1894179968" MODIFIED="1701661794782" TEXT="Dispatcher-Job implementieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701661796628" ID="ID_561235182" MODIFIED="1701661828350" TEXT="verwendet einen FixedFrameQuantiser (Meyer&apos;s Singleton)">
<linktarget COLOR="#74bda6" DESTINATION="ID_561235182" ENDARROW="Default" ENDINCLINATION="1286;0;" ID="Arrow_ID_794806390" SOURCE="ID_207437696" STARTARROW="None" STARTINCLINATION="403;33;"/>
@ -101614,7 +101692,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701493075903" ID="ID_114421309" MODIFIED="1701735887233" TEXT="Meta-Job implementieren">
<node COLOR="#338800" CREATED="1701493075903" FOLDED="true" ID="ID_114421309" MODIFIED="1701735887233" TEXT="Meta-Job implementieren">
<linktarget COLOR="#546bbc" DESTINATION="ID_114421309" ENDARROW="Default" ENDINCLINATION="-34;-130;" ID="Arrow_ID_234763232" SOURCE="ID_1982023018" STARTARROW="None" STARTINCLINATION="-98;10;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701692565258" ID="ID_706254089" MODIFIED="1701702780297" TEXT="nun doch die Operationen als &#x3bb;">
@ -101647,7 +101725,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1702012511964" ID="ID_788253401" MODIFIED="1702094456903" TEXT="Logik umprogrammieren auf vorgegebene Node-Zahl">
<node COLOR="#338800" CREATED="1702012511964" FOLDED="true" ID="ID_788253401" MODIFIED="1702094456903" TEXT="Logik umprogrammieren auf vorgegebene Node-Zahl">
<linktarget COLOR="#466a91" DESTINATION="ID_788253401" ENDARROW="Default" ENDINCLINATION="-2;380;" ID="Arrow_ID_1856813245" SOURCE="ID_1304679964" STARTARROW="None" STARTINCLINATION="-149;0;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1702080463433" ID="ID_479353313" MODIFIED="1702080490992">
@ -101677,12 +101755,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702081414108" ID="ID_273894390" MODIFIED="1702081435384" TEXT="&#x27f9; also: Zugriff auf den Chain-Load-Grapen um die Deadline festzulegen"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701493107387" ID="ID_1826192324" MODIFIED="1701814987380" TEXT="Aufruf-front-End">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1701493107387" FOLDED="true" ID="ID_1826192324" MODIFIED="1702317660104" TEXT="Aufruf-front-End">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1701814975960" ID="ID_1515169294" MODIFIED="1701814982780" TEXT="move-only">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1701800889991" ID="ID_735638406" MODIFIED="1701800928579" TEXT="Gefahr: Rahmen mu&#xdf; am Leben bleiben bis zum Ende">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701800889991" ID="ID_735638406" MODIFIED="1702317601938" TEXT="Gefahr: Rahmen mu&#xdf; am Leben bleiben bis zum Ende">
<linktarget COLOR="#4867b6" DESTINATION="ID_735638406" ENDARROW="Default" ENDINCLINATION="-581;-687;" ID="Arrow_ID_1897270044" SOURCE="ID_575047185" STARTARROW="None" STARTINCLINATION="-174;14;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701800940860" ID="ID_962597170" MODIFIED="1701801201157" TEXT="bedingt durch das Builder-API ist das nicht klar">
<icon BUILTIN="clanbomber"/>
@ -101698,7 +101777,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
<node COLOR="#338800" CREATED="1701913043245" ID="ID_445438847" MODIFIED="1702094487984" TEXT="bessere Steuerung des Completion-Callback">
<node COLOR="#338800" CREATED="1701913043245" FOLDED="true" ID="ID_445438847" MODIFIED="1702094487984" TEXT="bessere Steuerung des Completion-Callback">
<linktarget COLOR="#594b6a" DESTINATION="ID_445438847" ENDARROW="Default" ENDINCLINATION="-1207;75;" ID="Arrow_ID_1132943593" SOURCE="ID_1739832819" STARTARROW="None" STARTINCLINATION="-73;-483;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1701995129106" ID="ID_1885461201" MODIFIED="1701995147012">
@ -101885,12 +101964,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node CREATED="1701838412722" ID="ID_794626379" MODIFIED="1701838420687" TEXT="einfacher Intergrationstest">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701838524907" ID="ID_111682569" MODIFIED="1701838595646" TEXT="als &#xbb;usageExample&#xab; f&#xfc;r TestChainLoad">
<arrowlink COLOR="#bb1868" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" STARTARROW="None" STARTINCLINATION="-428;0;"/>
<node COLOR="#338800" CREATED="1701838412722" FOLDED="true" ID="ID_794626379" MODIFIED="1702317747548" TEXT="einfacher Intergrationstest">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1701838524907" ID="ID_111682569" MODIFIED="1702317738736" TEXT="als &#xbb;usageExample&#xab; f&#xfc;r TestChainLoad">
<arrowlink COLOR="#7718bb" DESTINATION="ID_120274201" ENDARROW="Default" ENDINCLINATION="-730;116;" ID="Arrow_ID_573558112" STARTARROW="None" STARTINCLINATION="-428;0;"/>
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1701838598906" ID="ID_1235285916" MODIFIED="1701990865812" TEXT="bleibt h&#xe4;ngen &#x27f6; Timeout">
<node COLOR="#435e98" CREATED="1701838598906" FOLDED="true" ID="ID_1235285916" MODIFIED="1702309489443" TEXT="bleibt h&#xe4;ngen &#x27f6; Timeout">
<icon BUILTIN="broken-line"/>
<node COLOR="#338800" CREATED="1701843677557" ID="ID_619867364" MODIFIED="1701990950803" TEXT="offensichtlicher Fehler: mu&#xdf; dem ersten Plan-Job nat&#xfc;rlich einen Offset geben">
<arrowlink COLOR="#3c5b80" DESTINATION="ID_1631524816" ENDARROW="Default" ENDINCLINATION="84;-7;" ID="Arrow_ID_1725054435" STARTARROW="None" STARTINCLINATION="80;3;"/>
@ -102024,6 +102104,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1702309463826" ID="ID_630072282" MODIFIED="1702309485702">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<u>Fazit</u>: durch R&#252;ckbau des Gate-re-Scheduling behoben
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
<node CREATED="1701912890618" ID="ID_1069989280" MODIFIED="1701912903449" TEXT="weitere Beobachtungen">
<icon BUILTIN="list"/>
@ -102033,7 +102124,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1701976331272" ID="ID_820013502" LINK="#ID_1254835545" MODIFIED="1701976374698" TEXT="mu&#xdf;te wirklich die Steuer-Logik reparieren....">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#435e98" CREATED="1701976387256" ID="ID_1657524395" MODIFIED="1701976708995" TEXT="jetzt funktioniert es wunschgem&#xe4;&#xdf;">
<node COLOR="#435e98" CREATED="1701976387256" FOLDED="true" ID="ID_1657524395" MODIFIED="1701976708995" TEXT="jetzt funktioniert es wunschgem&#xe4;&#xdf;">
<arrowlink COLOR="#6478c8" DESTINATION="ID_802885873" ENDARROW="Default" ENDINCLINATION="36;-60;" ID="Arrow_ID_676956631" STARTARROW="None" STARTINCLINATION="-30;44;"/>
<icon BUILTIN="list"/>
<node CREATED="1701976413221" ID="ID_119859495" MODIFIED="1701976419769" TEXT="ignite() passiert einmal"/>
@ -102117,7 +102208,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1702012175699" ID="ID_247790637" MODIFIED="1702012199043" TEXT="im Besonderen wenn die ganze WorkForce kurz nach dem Tick geballt auftaucht"/>
<node CREATED="1702012202351" ID="ID_622532522" MODIFIED="1702012248862" TEXT="hat in einem Fall 5ms gedauert, bis sich der Dispatch bis an den Schedule gearbeitet hat"/>
<node COLOR="#435e98" CREATED="1702012419402" ID="ID_2703596" MODIFIED="1702075109191" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
<node COLOR="#435e98" CREATED="1702012419402" FOLDED="true" ID="ID_2703596" MODIFIED="1702309420662" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
<icon BUILTIN="help"/>
<node CREATED="1702068730383" ID="ID_939170295" MODIFIED="1702068733719" TEXT="Beobachtungen">
<node CREATED="1702068734834" ID="ID_1770589762" MODIFIED="1702068748470" TEXT="die Contention tritt (nur) auf beim Abarbeiten eines &#xbb;backlog&#xab;"/>
@ -102233,10 +102324,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#7e496c" DESTINATION="ID_616818979" ENDARROW="Default" ENDINCLINATION="1590;-261;" ID="Arrow_ID_359699316" STARTARROW="None" STARTINCLINATION="707;25;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012250472" ID="ID_1150173173" MODIFIED="1702075177129">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012250472" FOLDED="true" ID="ID_1150173173" MODIFIED="1702075177129">
<richcontent TYPE="NODE"><html>
<head/>
<body>
@ -102376,7 +102468,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1702075831901" ID="ID_1933660911" MODIFIED="1702075861290" TEXT="Karenz-Zeit(Grooming) &#x27f9; Dichte-Limit (DEBUG: 3 Tasks / 100&#xb5;s)"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702087135999" ID="ID_1116666606" MODIFIED="1702087157529" TEXT="Drastisch entgleister Testlauf">
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702087135999" FOLDED="true" ID="ID_1116666606" MODIFIED="1702087157529" TEXT="Drastisch entgleister Testlauf">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1702087159620" ID="ID_872269266" MODIFIED="1702087167941" TEXT="mu&#xdf; das Zeug irgendwo dokumentieren">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
@ -102487,27 +102579,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="help"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1702076009462" ID="ID_485796782" MODIFIED="1702076013414" TEXT="TOD-Oh">
<icon BUILTIN="flag-pink"/>
<node CREATED="1702076118040" ID="ID_1646791544" MODIFIED="1702076135046" TEXT="Einsichten in der Mindmap aufschreiben"/>
<node CREATED="1702076136898" ID="ID_1934895235" MODIFIED="1702076145387" TEXT="Planung der Dokumentation"/>
<node CREATED="1702076163209" ID="ID_1341902785" MODIFIED="1702076173572" TEXT="den verf**ten Test nun endlich fertig bekommen">
<node COLOR="#338800" CREATED="1702076310654" ID="ID_1949942178" MODIFIED="1702233605547" TEXT="pre-Roll besser sch&#xe4;tzen">
<node COLOR="#338800" CREATED="1702317700442" ID="ID_1710994860" MODIFIED="1702317716582" TEXT="nach Integration der Coputation-Load: weiterhin glatt">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702076363983" ID="ID_1118507080" MODIFIED="1702094437747" TEXT="wake-Up-Job genauer timen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1702076180112" ID="ID_587585848" MODIFIED="1702076185302" TEXT="Ticket abschlie&#xdf;en"/>
<node COLOR="#338800" CREATED="1702076194614" ID="ID_560462139" MODIFIED="1702233613652" TEXT="Exit-Hash-Verkn&#xfc;pfung">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1702076274883" ID="ID_53147677" LINK="#ID_514427629" MODIFIED="1702234096377" TEXT="Computation-Load">
<icon BUILTIN="pencil"/>
</node>
<node CREATED="1702076289573" ID="ID_1400286686" MODIFIED="1702076302209" TEXT="Ziele / Plan f&#xfc;r KPI formuieren"/>
</node>
</node>
</node>
</node>
@ -102692,8 +102766,16 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node CREATED="1701977587127" ID="ID_359746928" MODIFIED="1701977609244" TEXT="Scheduler verf&#xfc;gbar nach 2ms"/>
<node CREATED="1701977515433" ID="ID_874906164" MODIFIED="1701977547419" TEXT="Faustformel: 1&#xb7;planen &#x2259; 100&#xb5;s"/>
<node CREATED="1702308936671" FOLDED="true" ID="ID_1786089739" MODIFIED="1702309164395" TEXT="Dispatch/Laststeuerung">
<icon BUILTIN="clock"/>
<node CREATED="1702308948599" ID="ID_291487865" MODIFIED="1702308965383" TEXT="Poll-Zyklus(uncontended): 15&#xb5;s"/>
<node CREATED="1702308966339" ID="ID_1363442304" MODIFIED="1702308976791" TEXT="Poll-Zyklus(contended): 50&#xb5;s"/>
<node CREATED="1702308979114" ID="ID_632440435" MODIFIED="1702309010346" TEXT="&#xdc;bernahme &#x27f6; drop-Grooming: 30&#xb5;s"/>
<node CREATED="1702309058200" ID="ID_1888511103" MODIFIED="1702309098838" TEXT="Abarbeiten der Kette eines &#x201e;praktisch leeren&#x201c; Jobs: 80&#xb5;s"/>
<node CREATED="1702309135573" ID="ID_85007648" MODIFIED="1702309146250" TEXT="Abarbeiten bis zum failed Gate-check: 25&#xb5;s"/>
</node>
<node COLOR="#16515f" CREATED="1701977287887" HGAP="52" ID="ID_860609942" MODIFIED="1701977997582" TEXT="Timings(release)" VSHIFT="55">
</node>
<node COLOR="#16515f" CREATED="1701977287887" HGAP="55" ID="ID_860609942" MODIFIED="1701977997582" TEXT="Timings(release)" VSHIFT="56">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<node BACKGROUND_COLOR="#8892ba" COLOR="#435e98" CREATED="1701978004448" HGAP="31" ID="ID_1521359529" MODIFIED="1701978094945" STYLE="bubble" TEXT="(wartet auf Release-Build)" VSHIFT="20">
<font NAME="SansSerif" SIZE="9"/>
@ -102739,7 +102821,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698449617586" ID="ID_1388229244" MODIFIED="1698450803071" TEXT="hot-polling on Grooming-Token?">
<linktarget COLOR="#7f5d5b" DESTINATION="ID_1388229244" ENDARROW="Default" ENDINCLINATION="1570;-56;" ID="Arrow_ID_1744066292" SOURCE="ID_1023610173" STARTARROW="None" STARTINCLINATION="1233;109;"/>
<icon BUILTIN="hourglass"/>
<node CREATED="1698449890835" HGAP="30" ID="ID_913093042" MODIFIED="1698450576260" TEXT="das scheint eine ehr akademische Frage" VSHIFT="28">
<node CREATED="1698449890835" HGAP="30" ID="ID_913093042" MODIFIED="1698450576260" TEXT="das scheint eine ehr akademische Frage" VSHIFT="64">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -102760,6 +102842,61 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<arrowlink COLOR="#9198a2" DESTINATION="ID_1389677902" ENDARROW="Default" ENDINCLINATION="-297;15;" ID="Arrow_ID_16649799" STARTARROW="None" STARTINCLINATION="209;9;"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1702307651060" HGAP="14" ID="ID_38541116" MODIFIED="1702307688251" TEXT="verh&#xe4;lt sich aber unter extremen Tests problematisch">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1702307703437" ID="ID_616818979" MODIFIED="1702309412724" TEXT="und zwar wenn....">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li>
die eigentlichen Work-Jobs<i>&#160;praktisch nix zu tun haben</i>
</li>
<li>
mehr als 3 Worker um das Grooming-Token konkurrieren (bei 3 Workern ist &#8709; keine Verz&#246;gerung verststellbar, auch wenn sie ziemlich viel herumeiern)
</li>
<li>
nacheinander mehrere Jobs gepr&#252;ft werden, die dann jeweils nicht ausf&#252;hrbar sind
</li>
</ul>
<p>
Der zuletzt genannte Punkt ist <b>inh&#228;rent problematisch<i>&#160;</i></b><i>&#8212; </i>es w&#252;rde sich nicht lohnen, das Grooming-Token zu droppen, da der blo&#223;e Check weniger als 1&#181;s kostet, der Test auf das Grooming-Token danach aber wieder 10-20&#181;s. Unter <b>Contention</b>&#160;allerdings kann sich eine solche Pr&#252;f-Kette <b>auf 100-200&#181;s ausdehnen</b>, und w&#228;hrend der Zeit passiert sonst praktisch nix.
</p>
</body>
</html></richcontent>
<linktarget COLOR="#7e496c" DESTINATION="ID_616818979" ENDARROW="Default" ENDINCLINATION="1590;-261;" ID="Arrow_ID_359699316" SOURCE="ID_999152455" STARTARROW="None" STARTINCLINATION="707;25;"/>
</node>
<node CREATED="1702308143827" ID="ID_528067239" MODIFIED="1702308198872" TEXT="Parallelisierung prakisch unm&#xf6;glich"/>
<node CREATED="1702308199854" ID="ID_810936180" MODIFIED="1702308283316" TEXT="Verarbeitung wird durch Contention deutlich langsamer">
<arrowlink COLOR="#b94a54" DESTINATION="ID_1972684777" ENDARROW="Default" ENDINCLINATION="62;-26;" ID="Arrow_ID_1309390811" STARTARROW="None" STARTINCLINATION="-306;0;"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702308251821" ID="ID_1972684777" MODIFIED="1702308278020" TEXT="Contention-Bremse?">
<linktarget COLOR="#b94a54" DESTINATION="ID_1972684777" ENDARROW="Default" ENDINCLINATION="62;-26;" ID="Arrow_ID_1309390811" SOURCE="ID_810936180" STARTARROW="None" STARTINCLINATION="-306;0;"/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702308286759" ID="ID_1416310165" MODIFIED="1702308706928" TEXT="Ausgangspunkt: Zugriffs-Phase verl&#xe4;ngert sich deutlich unter Contention">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
unter &#187;Zugriffs-Phase&#171; verstehe ich die Zeit, w&#228;hrend der die Queues modifiziert werden m&#252;ssen, was nur exklusiv von einem Thread gemacht werden kann (erst danach k&#246;nnte dieser mit eigentlicher Arbeit &#8222;weggehen&#8220;). Das Problem ist nun: wenn wir im R&#252;ckstau sind, dann werden alle Threads an die Head-Time geschickt. Dort <i>drehen sie dann am Rad </i>und machen dadurch alles viel langsamer
</p>
</body>
</html></richcontent>
<icon BUILTIN="clanbomber"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1702308567135" ID="ID_1246493114" MODIFIED="1702308703800" TEXT="Relevanz ist noch unklar....">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...wir reden hier &#252;ber Abl&#228;ufe in der Gr&#246;&#223;enordnung der &#187;Grund-Unsch&#228;rfe&#171; (100&#181;s); und das Problem tritt nur auf, wenn die eigentliche Aktion in der gleichen (kurzen) Zeit erledigt sein k&#246;nnte. Wenn dagegen 500&#181;s gearbeitet werden m&#252;&#223;te, sollte sich das Verhalten (theoretisch) von selbst entspannen
</p>
</body>
</html></richcontent>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698454549032" ID="ID_1970723448" MODIFIED="1698454589468" TEXT="Activity-Lang: processing setzt auf einem Proc-State auf">
<icon BUILTIN="hourglass"/>
@ -102794,6 +102931,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698933255623" ID="ID_926010770" MODIFIED="1698933271790" TEXT="ist die Auslegung der &#xbb;horizons&#xab; sinnvoll?">
<icon BUILTIN="help"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702308749285" ID="ID_1143341374" MODIFIED="1702308778902" TEXT="sollte man innerhalb des NEAR_HORIZON vielleicht st&#xe4;rker fokussieren?">
<icon BUILTIN="help"/>
<node CREATED="1702308780781" ID="ID_1202725220" MODIFIED="1702308791788" TEXT="NEAR_HORIZON: 50&#xb5;s...5ms"/>
<node CREATED="1702308794283" ID="ID_1737860337" MODIFIED="1702308811677" TEXT="derzeit verteilen wir radomisiert gleichm&#xe4;&#xdf;ig &#xfc;ber die n&#xe4;chsten 5ms"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702308812697" ID="ID_1741760241" MODIFIED="1702308844201" TEXT="man k&#xf6;nnte stattdessen den aktuellen Abstand zum Head als Verteilungsraum nehmen">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698933282432" ID="ID_918993851" MODIFIED="1698933288745" TEXT="Bedeutung der Queue-Performance">
<icon BUILTIN="hourglass"/>