Scheduler-test: consider using a complementary measurement method
With the latest improvements, the »breaking point search« works as expected and yields meaningful data; however — it seems to be well suited rather for specific setups, which involve an extended graph with massive dependencies, because only such a setup produces a clearly defined ''breaking point.'' Thus I'm considering to complement this research by another measurement setup to establish a linear regression model of the Scheduler expense. To allow integration of this different setup into the existing stress-test-rig, some rearrangements of the builder notation are necessary; especially we need to pass the type name of the actual tool, and it seems indicated to reorder the source code to provide the config base class `StressRig` at the top, followed by a long (and very technical) implementation namespace.
This commit is contained in:
parent
93729e5667
commit
a117e6e8c5
3 changed files with 313 additions and 185 deletions
|
|
@ -355,7 +355,8 @@ namespace test {
|
|||
auto testLoad() { return TestChainLoad<>{64}.configureShape_chain_loadBursts(); }
|
||||
};
|
||||
|
||||
auto [stress,delta,time] = StressRig::with<Setup>().searchBreakingPoint();
|
||||
auto [stress,delta,time] = StressRig::with<Setup>()
|
||||
.perform<bench::BreakingPoint>();
|
||||
CHECK (delta > 2.5);
|
||||
CHECK (1.15 > stress and stress > 0.9);
|
||||
}
|
||||
|
|
@ -429,7 +430,8 @@ SHOW_EXPR(loadMicros)
|
|||
return testLoad;
|
||||
}
|
||||
};
|
||||
auto [stress,delta,time] = StressRig::with<Setup>().searchBreakingPoint();
|
||||
auto [stress,delta,time] = StressRig::with<Setup>()
|
||||
.perform<bench::BreakingPoint>();
|
||||
SHOW_EXPR(stress)
|
||||
SHOW_EXPR(delta)
|
||||
SHOW_EXPR(time)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,13 @@
|
|||
** which is 2 times the basic failure indicator.
|
||||
**
|
||||
** ## Observation tools
|
||||
** As a complement to the bench::BreakingPoint tool, another tool is provided to
|
||||
** run a specific Scheduler setup while varying a single control parameter within
|
||||
** defined limits. This produces a set of (x,y) data, which can be used to search
|
||||
** for correlations or build a linear regression model to describe the Scheduler's
|
||||
** behaviour as function of the control parameter. The typical use case would be
|
||||
** to use the input length (number of Jobs) as control parameter, leading to a
|
||||
** model for the Scheduler's expense.
|
||||
**
|
||||
** @see TestChainLoad_test
|
||||
** @see SchedulerStress_test
|
||||
|
|
@ -132,18 +139,106 @@ namespace test {
|
|||
|
||||
}
|
||||
|
||||
namespace stress_test_rig {
|
||||
|
||||
|
||||
/** configurable template framework for running Scheduler Stress tests */
|
||||
class StressRig
|
||||
: util::NonCopyable
|
||||
{
|
||||
|
||||
public:
|
||||
/***********************************************************************//**
|
||||
* Entrance Point: build a stress test measurement setup using a dedicated
|
||||
* \a TOOL class, takes the configuration \a CONF as template parameter
|
||||
* and which is assumed to inherit (indirectly) from StressRig.
|
||||
* @tparam CONF specialised subclass of StressRig with customisation
|
||||
* @return a builder to configure and then launch the actual test
|
||||
*/
|
||||
template<class CONF>
|
||||
static auto
|
||||
with()
|
||||
{
|
||||
return Launcher<CONF>{};
|
||||
}
|
||||
|
||||
|
||||
/* ======= default configuration (inherited) ======= */
|
||||
|
||||
using usec = std::chrono::microseconds;
|
||||
|
||||
usec LOAD_BASE = 500us;
|
||||
usec BASE_EXPENSE = 0us;
|
||||
bool SCHED_NOTIFY = true;
|
||||
bool SCHED_DEPENDS = false;
|
||||
uint CONCURRENCY = work::Config::getDefaultComputationCapacity();
|
||||
bool INSTRUMENTATION = true;
|
||||
double EPSILON = 0.01; ///< error bound to abort binary search
|
||||
double UPPER_STRESS = 0.6; ///< starting point for the upper limit, likely to fail
|
||||
double FAIL_LIMIT = 2.0; ///< delta-limit when to count a run as failure
|
||||
double TRIGGER_FAIL = 0.55; ///< %-fact: criterion-1 failures above this rate
|
||||
double TRIGGER_SDEV = FAIL_LIMIT; ///< in ms : criterion-2 standard derivation
|
||||
double TRIGGER_DELTA = 2*FAIL_LIMIT; ///< in ms : criterion-3 average delta above this limit
|
||||
bool showRuns = false; ///< print a line for each individual run
|
||||
bool showStep = true; ///< print a line for each binary search step
|
||||
bool showRes = true; ///< print result data
|
||||
bool showRef = true; ///< calculate single threaded reference time
|
||||
|
||||
static uint constexpr REPETITIONS{20};
|
||||
|
||||
BlockFlowAlloc bFlow{};
|
||||
EngineObserver watch{};
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
/** Extension point: build the computation topology for this test */
|
||||
auto
|
||||
testLoad()
|
||||
{
|
||||
return TestChainLoad<>{64};
|
||||
}
|
||||
|
||||
/** (optional) extension point: base configuration of the test ScheduleCtx */
|
||||
template<class TL>
|
||||
auto
|
||||
testSetup (TL& testLoad)
|
||||
{
|
||||
return testLoad.setupSchedule(scheduler)
|
||||
.withJobDeadline(100ms)
|
||||
.withUpfrontPlanning();
|
||||
}
|
||||
|
||||
template<class CONF>
|
||||
struct Launcher : CONF
|
||||
{
|
||||
template<template<class> class TOOL, typename...ARGS>
|
||||
auto
|
||||
perform (ARGS&& ...args)
|
||||
{
|
||||
return TOOL<CONF>{}.perform (std::forward<ARGS> (args)...);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
namespace bench { ///< Specialised tools to investigate scheduler performance
|
||||
|
||||
/**
|
||||
using std::declval;
|
||||
|
||||
|
||||
/**************************************************//**
|
||||
* Specific stress test scheme to determine the
|
||||
* »breaking point« where the Scheduler starts to slip
|
||||
*/
|
||||
template<class CONF>
|
||||
class BreakingPointBench
|
||||
: CONF
|
||||
class BreakingPoint
|
||||
: public CONF
|
||||
{
|
||||
using TestLoad = decltype(std::declval<CONF>().testLoad());
|
||||
using TestSetup = decltype(std::declval<CONF>().testSetup (std::declval<TestLoad&>()));
|
||||
using TestLoad = decltype(declval<BreakingPoint>().testLoad());
|
||||
using TestSetup = decltype(declval<BreakingPoint>().testSetup (declval<TestLoad&>()));
|
||||
|
||||
struct Res
|
||||
{
|
||||
|
|
@ -301,7 +396,7 @@ namespace test {
|
|||
* @return a tuple `[stress-factor, ∅delta, ∅run-time]`
|
||||
*/
|
||||
auto
|
||||
searchBreakingPoint()
|
||||
perform()
|
||||
{
|
||||
TRANSIENTLY(work::Config::COMPUTATION_CAPACITY) = CONF::CONCURRENCY;
|
||||
|
||||
|
|
@ -323,73 +418,43 @@ namespace test {
|
|||
return make_tuple (res.stressFac, res.avgDelta, res.avgTime);
|
||||
}
|
||||
};
|
||||
}//namespace stress_test_rig
|
||||
|
||||
|
||||
|
||||
/** configurable template for running Scheduler Stress tests */
|
||||
class StressRig
|
||||
: util::NonCopyable
|
||||
{
|
||||
|
||||
public:
|
||||
using usec = std::chrono::microseconds;
|
||||
|
||||
usec LOAD_BASE = 500us;
|
||||
usec BASE_EXPENSE = 0us;
|
||||
bool SCHED_NOTIFY = true;
|
||||
bool SCHED_DEPENDS = false;
|
||||
uint CONCURRENCY = work::Config::getDefaultComputationCapacity();
|
||||
bool INSTRUMENTATION = true;
|
||||
double EPSILON = 0.01; ///< error bound to abort binary search
|
||||
double UPPER_STRESS = 0.6; ///< starting point for the upper limit, likely to fail
|
||||
double FAIL_LIMIT = 2.0; ///< delta-limit when to count a run as failure
|
||||
double TRIGGER_FAIL = 0.55; ///< %-fact: criterion-1 failures above this rate
|
||||
double TRIGGER_SDEV = FAIL_LIMIT; ///< in ms : criterion-2 standard derivation
|
||||
double TRIGGER_DELTA = 2*FAIL_LIMIT; ///< in ms : criterion-3 average delta above this limit
|
||||
bool showRuns = false; ///< print a line for each individual run
|
||||
bool showStep = true; ///< print a line for each binary search step
|
||||
bool showRes = true; ///< print result data
|
||||
bool showRef = true; ///< calculate single threaded reference time
|
||||
|
||||
static uint constexpr REPETITIONS{20};
|
||||
|
||||
BlockFlowAlloc bFlow{};
|
||||
EngineObserver watch{};
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
||||
/** Extension point: build the computation topology for this test */
|
||||
auto
|
||||
testLoad()
|
||||
{
|
||||
return TestChainLoad<>{64};
|
||||
}
|
||||
|
||||
/** (optional) extension point: base configuration of the test ScheduleCtx */
|
||||
template<class TL>
|
||||
auto
|
||||
testSetup (TL& testLoad)
|
||||
{
|
||||
return testLoad.setupSchedule(scheduler)
|
||||
.withJobDeadline(100ms)
|
||||
.withUpfrontPlanning();
|
||||
}
|
||||
|
||||
/**
|
||||
* Entrance Point: build a stress test measurement setup
|
||||
* to determine the »breaking point« where the Scheduler is unable
|
||||
* to keep up with the defined schedule.
|
||||
* @tparam CONF specialised subclass of StressRig with customisation
|
||||
* @return a builder to configure and then launch the actual test
|
||||
*/
|
||||
template<class CONF>
|
||||
static auto
|
||||
with()
|
||||
{
|
||||
return stress_test_rig::BreakingPointBench<CONF>{};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}}} // namespace vault::gear::test
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************//**
|
||||
* Specific test scheme to perform a Scheduler setup
|
||||
* over a given control parameter range to determine
|
||||
* correlations
|
||||
*/
|
||||
template<class CONF>
|
||||
class ParameterRange
|
||||
: public CONF
|
||||
{
|
||||
using TestLoad = decltype(declval<ParameterRange>().testLoad());
|
||||
using TestSetup = decltype(declval<ParameterRange>().testSetup (declval<TestLoad&>()));
|
||||
|
||||
|
||||
|
||||
public:
|
||||
/**
|
||||
* Launch a measurement sequence running the Scheduler with a
|
||||
* varying parameter value to investigate (x,y) correlations.
|
||||
* @return ////TODO a tuple `[stress-factor, ∅delta, ∅run-time]`
|
||||
*/
|
||||
auto
|
||||
perform()
|
||||
{
|
||||
TRANSIENTLY(work::Config::COMPUTATION_CAPACITY) = CONF::CONCURRENCY;
|
||||
|
||||
TestLoad testLoad = CONF::testLoad().buildTopology();
|
||||
TestSetup testSetup = CONF::testSetup (testLoad);
|
||||
|
||||
UNIMPLEMENTED ("parametric runs");
|
||||
// return make_tuple (res.stressFac, res.avgDelta, res.avgTime);
|
||||
}
|
||||
};
|
||||
//
|
||||
}// namespace bench
|
||||
}}}// namespace vault::gear::test
|
||||
#endif /*VAULT_GEAR_TEST_STRESS_TEST_RIG_H*/
|
||||
|
|
|
|||
|
|
@ -140,9 +140,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1481332855167" ID="ID_362694314" MODIFIED="1557498707215">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font color="#cf1445">AUA</font>: Henne oder Ei?
|
||||
|
|
@ -152,9 +150,7 @@
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1481332888362" ID="ID_85978592" MODIFIED="1576282358165" TEXT="Nexus braucht CoreService braucht Nexus...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn:
|
||||
|
|
@ -176,9 +172,7 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1481338222672" ID="ID_318056010" MODIFIED="1576282358165" TEXT="Bus-Term greift tatsächlich nicht auf Uplink zu">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
gemeint ist: im ctor
|
||||
|
|
@ -198,9 +192,7 @@
|
|||
<node CREATED="1481338237550" ID="ID_781727426" MODIFIED="1557498707215" TEXT="kann also eine Referenz auf lokalen Speicher reinreichen"/>
|
||||
<node CREATED="1481338295614" ID="ID_1811061645" MODIFIED="1576282358164" TEXT="Folglich muß Nexus lokal in CoreServices angesiedelt werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
oder anders herum,
|
||||
|
|
@ -53506,9 +53498,7 @@
|
|||
<node CREATED="1489717927279" ID="ID_845301501" MODIFIED="1489717959263" TEXT="Command-ID erfüllt keine regulierende Funktion"/>
|
||||
<node CREATED="1491003369611" ID="ID_854080320" MODIFIED="1576282357979" TEXT="Instanz-Management funktioniert anonym">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...weil es zu jedem InvocationPath
|
||||
|
|
@ -53527,9 +53517,7 @@
|
|||
</node>
|
||||
<node CREATED="1489546998918" HGAP="43" ID="ID_668687712" MODIFIED="1576282357978" TEXT="Aktivierung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
gemeint ist:
|
||||
|
|
@ -53566,9 +53554,7 @@
|
|||
</node>
|
||||
<node CREATED="1489547112255" ID="ID_270498008" MODIFIED="1576282357978" TEXT="generische Rollen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
die Idee ist hier,
|
||||
|
|
@ -53612,9 +53598,7 @@
|
|||
<icon BUILTIN="closed"/>
|
||||
<node CREATED="1489719257426" ID="ID_1618753270" MODIFIED="1576282357977" TEXT="wer erzeugt den InvocationTrail">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...eben!
|
||||
|
|
@ -53736,9 +53720,7 @@
|
|||
<node CREATED="1489786245024" ID="ID_430222749" MODIFIED="1489786255810" TEXT="alle Definitionen in Makros einwickeln"/>
|
||||
<node CREATED="1489786393908" ID="ID_1345826013" MODIFIED="1576282357977" TEXT="spezielle Inclusion-Rituale">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
vermutlich läuft es immer darauf hinaus
|
||||
|
|
@ -53844,9 +53826,7 @@
|
|||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1490986345879" ID="ID_1736956933" MODIFIED="1576282357976" TEXT="denn: Dispatch bedeutet Verzögerung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...also ist eine Instanz durchaus noch am Leben,
|
||||
|
|
@ -53863,9 +53843,7 @@
|
|||
</node>
|
||||
<node CREATED="1490986336425" ID="ID_1955343463" MODIFIED="1576282357976" TEXT="Konsequenz: leerer Eintrag">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...damit die Nummer erhalten bleibt
|
||||
|
|
@ -110670,7 +110648,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1704502966511" ID="ID_1561993195" MODIFIED="1704502993624" TEXT="wird aber danach wieder rasch aufgefangen, wenn genügend »Luft« im Schedule ist"/>
|
||||
<node CREATED="1704503002882" ID="ID_893513147" MODIFIED="1704503021717" TEXT="⟹ Überlastung zeigt sich indem diese Fluktuationen »durchschlagen«"/>
|
||||
</node>
|
||||
<node CREATED="1704503038702" ID="ID_1005585769" MODIFIED="1704503122646">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1704503038702" ID="ID_1005585769" MODIFIED="1708650795076">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -110730,6 +110708,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1708650675029" ID="ID_582492163" MODIFIED="1708650807596" TEXT="durch Beobachten und korrigieren um situative Faktoren �� nahe 1.0">
|
||||
<arrowlink COLOR="#3895bf" DESTINATION="ID_3066237" ENDARROW="Default" ENDINCLINATION="-1136;-1018;" ID="Arrow_ID_1263603979" STARTARROW="None" STARTINCLINATION="1149;47;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1708651041802" ID="ID_493702418" MODIFIED="1708651197464" TEXT="auch mit verschiedensten Lastszenarien ist die Job-Zeit erhöht">
|
||||
<arrowlink COLOR="#9455c4" DESTINATION="ID_638536593" ENDARROW="Default" ENDINCLINATION="-678;-86;" ID="Arrow_ID_365229383" STARTARROW="None" STARTINCLINATION="344;16;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1708651212948" ID="ID_411081941" MODIFIED="1708651228445" TEXT="einzeln gemessen stimmt die Kalibrierung aber auch unter Concurrency"/>
|
||||
<node BACKGROUND_COLOR="#e0baaa" COLOR="#690f14" CREATED="1708651230201" HGAP="43" ID="ID_1820970520" LINK="#ID_1084113416" MODIFIED="1708651320917" TEXT="Komplexer Ablauf — Detail-Untersuchungen zwingend erforderlich" VSHIFT="-16">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1704677622809" ID="ID_276645813" MODIFIED="1704680965552">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -110965,8 +110955,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1707697757045" ID="ID_1084113416" MODIFIED="1707954709271" TEXT="Instrumentierung im Job ⟼ effektive Concurrenvcy">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1707697757045" ID="ID_1084113416" MODIFIED="1708651346551" TEXT="Instrumentierung im Job ⟼ effektive Concurrenvcy">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1707753850583" ID="ID_974443691" MODIFIED="1707753886880" TEXT="beide Instrumentierungen kann man hier gemeinsam machen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -111115,8 +111105,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1707755101530" ID="ID_219913539" MODIFIED="1707954714696" TEXT="Integration">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1707755101530" ID="ID_219913539" MODIFIED="1708650524009" TEXT="Integration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1707755106784" ID="ID_1004950823" MODIFIED="1707960767740" TEXT="neue Flag schaltbar machen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1707755159128" ID="ID_159603961" MODIFIED="1707755173776" TEXT="kann der smart-ptr selber sein">
|
||||
|
|
@ -111150,9 +111140,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1707960810363" ID="ID_1898538089" MODIFIED="1707960828231">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
erster Versuch: <i>überhaupt keinen </i>Graph konstruieren
|
||||
|
|
@ -111182,9 +111170,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708020942683" ID="ID_1311204177" MODIFIED="1708021017716" TEXT="passiert irgendwo in den Workern"/>
|
||||
<node CREATED="1708021019319" ID="ID_933251621" MODIFIED="1708021051197" TEXT="Callstacks lassen auf heftige Contention schließen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
fast alle Threads sind im Contention-wait
|
||||
|
|
@ -111195,9 +111181,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#cdc17d" COLOR="#a50125" CREATED="1708021069617" ID="ID_146646167" MODIFIED="1708021356534" TEXT="Wichtiger Umstand: habe Vor-Dimensionierung des IncidenceCount noch nicht implementiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist zwar ganz klar geplant, aber ich jetzt lasse ich die Tests erst mal so laufen...
|
||||
|
|
@ -111209,9 +111193,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708021150829" ID="ID_841513991" MODIFIED="1708021415380" TEXT="Theorie: der Basis-Vector für die Threads wird concurrent erweitert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Zwar beobachte ich die Memory-Corruption dann ehr beim Einfügen der Events, aber das kann sehr wohl ein Folge-Fehler sein. Ich sehe auch anderes Verhalten, das „eigentlich gar nicht möglich ist“
|
||||
|
|
@ -111222,9 +111204,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1708021200631" ID="ID_1507367200" MODIFIED="1708021325426" TEXT="das ist nicht threadsafe">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Hier passiert ein Vector-realloc. Wenn währenddessen der nächste Thread kommt, macht der ebenfalls ein re-Alloc und die Memory-corruption wäre garantiert.
|
||||
|
|
@ -111236,9 +111216,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708021206366" ID="ID_34842564" MODIFIED="1708021215512" TEXT="eigentlich müßte hier ein Mutex verwendet werden"/>
|
||||
<node CREATED="1708021217380" ID="ID_1094048458" MODIFIED="1708021275576" TEXT="KISS ⟹ stattdessen richtig vor-Dimensionieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das ist ein Instrumentierungs-Hilfsmittel, und generell nur darauf ausgelegt, »richtig verwendet zu werden«
|
||||
|
|
@ -111289,9 +111267,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708029441269" ID="ID_188822401" MODIFIED="1708029458039" TEXT="werden alle Notification-Jobs aktivierbar"/>
|
||||
<node CREATED="1708029458939" ID="ID_1665382552" MODIFIED="1708029498911" TEXT="(sie liegen dann schon in der Vergangenheit)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...waren aber geblockt, solange noch die eigentlichen Jobs mit t=0 in der Queue stehen
|
||||
|
|
@ -111313,9 +111289,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708029738565" ID="ID_1641558536" MODIFIED="1708029756350" TEXT="während der Organisations-Arbeit blockt das GroomingToken"/>
|
||||
<node CREATED="1708029627922" ID="ID_242925751" MODIFIED="1708029790131" TEXT="der Scheduler ist nicht auf Contention ausgelegt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...und die Selbstreguliertung sorgt schntell dafür, daß der größte Teil der WorkForce in contention-Wait geht
|
||||
|
|
@ -111331,9 +111305,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708029837603" ID="ID_641612793" MODIFIED="1708033285779">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
zweiter Versuch: <i>unconnected Nodes with weight</i><font size="2"> (500µs)</font>
|
||||
|
|
@ -111355,9 +111327,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708033541160" ID="ID_716582623" MODIFIED="1708033567799" TEXT="coveredTime 5.118ms"/>
|
||||
<node CREATED="1708033575180" ID="ID_1360284834" MODIFIED="1708033591128">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das entspricht<b> exakt</b> der Concurrency
|
||||
|
|
@ -111381,9 +111351,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708034908809" ID="ID_1836121465" MODIFIED="1708034936555">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist effektiv <b>concurrency ≡ 6</b>
|
||||
|
|
@ -111409,13 +111377,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708050404196" ID="ID_951934036" MODIFIED="1708050408863" TEXT="weitere Experimente">
|
||||
<node CREATED="1708050412751" ID="ID_638536593" MODIFIED="1708050422134" TEXT="längere Node-Zeiten">
|
||||
<linktarget COLOR="#9455c4" DESTINATION="ID_638536593" ENDARROW="Default" ENDINCLINATION="-678;-86;" ID="Arrow_ID_365229383" SOURCE="ID_493702418" STARTARROW="None" STARTINCLINATION="344;16;"/>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1708050425513" ID="ID_567927785" MODIFIED="1708050453145" TEXT="5ms ⟼ real ∅ 6ms"/>
|
||||
<node CREATED="1708050458589" ID="ID_1695942732" MODIFIED="1708050467855" TEXT="10ms ⟼ real ∅ 11ms"/>
|
||||
<node CREATED="1708050481797" ID="ID_1497974818" MODIFIED="1708050641215">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
mit 400 Nodes  ⟼ real ∅ 12ms und <b>Concurrency ≡ 7.9</b>
|
||||
|
|
@ -111440,9 +111408,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708202940088" ID="ID_1078042444" MODIFIED="1708202953985" TEXT="kann zumindest einen einfachen Scheduler-Lauf machen"/>
|
||||
<node CREATED="1708202954868" ID="ID_575048126" MODIFIED="1708203062489" TEXT="kann dann aber nicht sonderlich viel verifizieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...weil keine Festlegung auf eine bestimmte Zahl an Cores möglich ist und auch die Werte stark statistisch schwanken, besonders bei den relativ kurzen Laufzeiten, die hier aus praktischen Gründen erforderlich sind, schon um das Test-Setup einfach zu halten
|
||||
|
|
@ -111452,16 +111418,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1708268252064" ID="ID_1446014590" MODIFIED="1708268303222" TEXT="effektive Concurrency für StressFac berücksichtigen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1708268252064" ID="ID_1446014590" MODIFIED="1708650315798" TEXT="effektive Concurrency für StressFac berücksichtigen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1708268310664" ID="ID_1275839146" MODIFIED="1708268330317" TEXT="problematisch...">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1708268331813" ID="ID_1488193496" MODIFIED="1708268351974" TEXT="ist ein Durchschnittswert"/>
|
||||
<node CREATED="1708268352561" ID="ID_499399388" MODIFIED="1708268481369" TEXT="nicht genau bekannt, wie sie wirkt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Stichwort: Box stacking. Das ist ein NP-hartes Problem und wir lösen es hier nicht; vielmehr wird so getan, als könnte man um die durchschnittliche Concurrency elastisch stauchen. Das führt dann zum Auftreten eines weiteren »Form-Faktors«, der eben genau darin besteht, zu welchem Grad diese Annahme zu den strukturellen Beschränkugeneni im Widerspruch steht.
|
||||
|
|
@ -111486,9 +111450,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708269678586" ID="ID_1258803425" MODIFIED="1708269778784" TEXT="Ergebnis läge dann am Rand des Intervalls ⟹ möglicherweise grob falsch"/>
|
||||
<node CREATED="1708269787930" ID="ID_1448332820" MODIFIED="1708270312970" TEXT="das ist sowiso bereits ein Problem in der Praxis (statistische Fluktuationen)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
da wir die Überschreitung einer Grenze beobachten, kann bereits ein zufälliger "outlier" den Suchmechanismus in ein falsches Intervall „abbiegen lassen“. Denn eine einmal etablierte Intervall-Grenze wird grundsätzlich nicht nochmal geprüft. Ich hatte deswegen regelmäßig grob daneben liegende Ergebnisse beobachtet. Ein typisches Beispiel
|
||||
|
|
@ -111532,9 +111494,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708271149076" ID="ID_1320464252" MODIFIED="1708271223063" TEXT="dieser enthält zusätzlich zu berücksichtigenden Aufwand"/>
|
||||
<node CREATED="1708271225458" ID="ID_1722094971" MODIFIED="1708271352966" TEXT="d.h es wird der stressFac dadurch geteilt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Mehraufwand ⟹ bereits ein <i>entsprechend kleinerer </i>Stress-Faktor hat die gleiche Stress-Wirkung
|
||||
|
|
@ -111558,9 +111518,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1708271748403" ID="ID_979134538" MODIFIED="1708272179424" TEXT="formFac besser als Zusatz-Parameter in adaptedSchedule()">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...das läßt dann die nominelle Concurrency als integral-Zahl intakt
|
||||
|
|
@ -111578,7 +111536,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708275070790" ID="ID_989990379" MODIFIED="1708275106286" TEXT="Konsequenz: Anpassung des Schedule sollte graduell konvergieren"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1708295682057" ID="ID_1692984155" MODIFIED="1708295686540" TEXT="Verhalten im Test">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1708295682057" ID="ID_1692984155" MODIFIED="1708650309261" TEXT="Verhalten im Test">
|
||||
<icon BUILTIN="list"/>
|
||||
<node COLOR="#435e98" CREATED="1708295760082" ID="ID_1240131502" MODIFIED="1708295777613" TEXT="kumulierte Statistik nicht berücksichtigt">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1708295779333" ID="ID_34626875" MODIFIED="1708295812603" TEXT="Zeit und Summen werden ja nicht zurückgesetzt"/>
|
||||
|
|
@ -111638,9 +111597,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1708353529389" ID="ID_1264074130" MODIFIED="1708353581342">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn das Schedule wird ja auf eine <i>nominelle </i>Concurrency ausgelegt
|
||||
|
|
@ -111651,9 +111608,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708353549722" ID="ID_739919619" MODIFIED="1708353588560">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und diese wird ggfs aus <i>strukturellen Gründen </i>nicht ausgeschöpft
|
||||
|
|
@ -111670,9 +111625,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1708355316244" ID="ID_1132423890" MODIFIED="1708355357499" TEXT="läuft auf eine Berechnung hinaus analog zum Schedule"/>
|
||||
<node CREATED="1708355455934" ID="ID_1644260527" MODIFIED="1708355549750" TEXT="muß es aber from scratch berechnen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...die Berechnung läuft zwar genauso, nämlich über eine Gruppierung per Level, jedoch müssen dann nur die reinen Nodes pro Level berücksichtigt werden
|
||||
|
|
@ -111683,9 +111636,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1708357060445" ID="ID_1779085910" MODIFIED="1708357108807" TEXT="muß dabei aber die Gewichte beachten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil die Gewichte entsprechend proportional auch in die durchschnittliche empirische Concurrency eingehen
|
||||
|
|
@ -111700,9 +111651,121 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1708359933075" ID="ID_559935495" MODIFIED="1708359945343" TEXT="nur die Abweichung von der erwarteten Concurrency in den Form-Faktor">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1708650329163" ID="ID_489815369" MODIFIED="1708650505361" TEXT="Reflexion; das ist auch logisch sinnvoll">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn es ist tatsächlich sowas wie ein »Form-Faktor«, ergibt sich also aus der konkreten Dependency-Struktur und der konkreten Scheduling-Situation. Umso besser, daß dieser Wert sich auch nur leicht vom »Druck« abhängig erweist; es ist also <i>etwas Situatives, </i>und insofern arbeitet der »Streß« relativ dazu
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1708359949377" ID="ID_3066237" MODIFIED="1708359973277" TEXT="damit kommt ein Streß-Faktor ganz nah an 1 heraus!!">
|
||||
<linktarget COLOR="#3895bf" DESTINATION="ID_3066237" ENDARROW="Default" ENDINCLINATION="-1136;-1018;" ID="Arrow_ID_1263603979" SOURCE="ID_582492163" STARTARROW="None" STARTINCLINATION="1149;47;"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
<node CREATED="1708650176871" ID="ID_1138728780" MODIFIED="1708650184954" TEXT="mehrere gute Indikatoren..."/>
|
||||
<node CREATED="1708650185842" ID="ID_1126166801" MODIFIED="1708650232171" TEXT="die Abweichung der Job-Zeiten ist (bis auf statistische Schwankunen) sehr konsistent"/>
|
||||
<node CREATED="1708650238320" ID="ID_1511620555" MODIFIED="1708650269982" TEXT="die tatsächliche Concurrency is ebenfalls nahezu stabil (1.25 vs 2 etwartet)"/>
|
||||
<node CREATED="1708650271826" ID="ID_1697336474" MODIFIED="1708650283604" TEXT="unter Druck nimmt die Concurrency ganz leicht zu"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1708651353088" ID="ID_9850721" MODIFIED="1708651367397" TEXT="ergänzende Meßmethode : lineare Regression">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1708651381229" ID="ID_34422716" MODIFIED="1708651432845" TEXT="Ansatz: Verhaltesmuster durch anderen Meß-Ansatz bestätigen">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1708651455035" ID="ID_154910298" MODIFIED="1708651476794" TEXT="das Kriterium »Schedule gebrochen« ist sehr spezifisch">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1708651478703" ID="ID_464008145" MODIFIED="1708651910901">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
ohne starke Abhängigkeiten ist durchaus <i>elastisches Verhalten </i>denkbar
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Zwar ist die nun entwickelte Meßmethode durchaus elegant, wird aber zunehmend ungenau, wenn es kein klar definiertes »Brechen« mehr gibt, bzw. wenn man nur noch einen numerischen Grenzwert festlegen kann, der dann von den Dimensionen des konketen Falls abhängen. Für das wohldefinierte »Brechen« ist eine komplexe Abhängikeitsstruktur notewendig, die durch einen Rückstau komplett aus der Balance kippt. Das ist dann doch ein sehr spezieller Fall, denn in der Praxis erwarte ich im Durchschnitt ehr viele kleine 2-er und 3-er-Ketten ohne viel Verknüfpungen (ein IO-Job und ein Render-Job). Und bei länger laufenden Berechnungen wäre definitiv zu erwarten (ja sogar zwingend gefordert), daß sich freie Kapazität elastisch auf die nächsten Aufgaben verschieben läßt.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1708651570100" ID="ID_1828305401" MODIFIED="1708652227401" TEXT="Setup- und Technologie-Effekte verhindern genaue Untersuchung »am Nullpunkt«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Der Scheduler ist ein komplexer Mechanismus, und allein das Hochfahren des Worker-Pools, alsauch das Erstellen des initialen Schedule erzeugt einen festen Overhead, der mehr oder weniger unkontrolliert in den Start der Arbeitsphase hineinwirkt. Je nachdem wann und wo der erste Eintrag im Schedule auftaucht, erscheinen zu einem bestimmten Zeitpunkt alle Worker und sorgen erst mal für deutlich meßbare Contention-Verzögerungen. Des Weiteren erzeugt auch die Abhängigkeit auf den Wake-up-Job einen erheblichen Overhead, sobald es nicht mehr einen einzigen stringenten Berchnungspfad gibt. Hinzu kommt, daß wir nicht auf einem Realtime-Betriebssystem arbeiten, und die vermutete Basis-Last stark von der Optimierung abhängig ist. Und außerdem hat der Scheduler nun einen speziellen Schutzmechanismus, der den Worker-Pool beim Auftreten von Contention effektiv herunterregelt. All dies zusammen macht eine Beobachtung des »Leerlauf-Aufwandes« sehr schwer...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1708652230771" ID="ID_10502230" MODIFIED="1708652415101" TEXT="Daher soll versucht werden, ein affin-lineares Näherungsmodell aufzustellen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Nebenbei sollten sich dabei auch nicht-lineare Basis-Effekte zeigen, aber idealerweise sollte das Verhalten ab einem gewissen Punkt linear werden; aus diesem näherungsweise linearen Verhalten ließe sich auf theoretischem Weg auch ein hypothetischer / amortisierter Basis-Aufwand ableiten. Die Hoffung ist, daß durch den Abgleich dieser verschiedenen Meßmethoden ein klareres Verständnis der Grenzen der Meßanordnung gewonnen werden kann.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1708652417482" ID="ID_350523685" MODIFIED="1708652439760" TEXT="brauche dafür ein anderes Meßwerkzeug">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1708652645156" ID="ID_1558350785" MODIFIED="1708652664818" TEXT="»ParameterRangeBench«">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1708652942700" ID="ID_1844757015" MODIFIED="1708652953623" TEXT="soll einen Skalen-Parameter variieren"/>
|
||||
<node CREATED="1708652954547" ID="ID_650515837" MODIFIED="1708652960989" TEXT="ein Parameter-Bereich wird vorgegeben"/>
|
||||
<node CREATED="1708652961866" ID="ID_289578111" MODIFIED="1708653011804" TEXT="der Parameter wird für jeden Meßpunkt zufällig gesampelt"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1708653013774" ID="ID_1826883977" MODIFIED="1708653098216" TEXT="(optional) soll aber jeder Meßpunkt mehrfach laufen können?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1708653109374" ID="ID_1339763043" MODIFIED="1708653120296" TEXT="Ergebnis ist eine (x,y)-Wolke"/>
|
||||
</node>
|
||||
<node CREATED="1708652867679" ID="ID_691426611" MODIFIED="1708652871625" TEXT="Konstruktion">
|
||||
<node CREATED="1708652873661" ID="ID_603525757" MODIFIED="1708653741701" TEXT="StressRig sollte idealerweise erweitert werden">
|
||||
<node COLOR="#5b280f" CREATED="1708653752832" ID="ID_1837975712" MODIFIED="1708653864446" TEXT="habe mich aber leider komplett auf den einen Testfall eingeschossen">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1708653766790" ID="ID_621093180" MODIFIED="1708653855760" TEXT="allein schon die schöne Schreibweise StressRig::with<Setup>().invocation()">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1708652882062" ID="ID_143789267" MODIFIED="1708652909325" TEXT="Probleme">
|
||||
<node CREATED="1708652910217" ID="ID_1065173939" MODIFIED="1708652910217" TEXT="müssen hier jedes mal das Grund-Setup neu bauen können"/>
|
||||
<node CREATED="1708652911961" ID="ID_151694383" MODIFIED="1708653217715" TEXT="braucht vermutlich mehr Offenheit/Flexibilität"/>
|
||||
<node CREATED="1708653266575" ID="ID_974267734" MODIFIED="1708653290547" TEXT="sowohl für den Parameter, alsauch für den Beobachtungswert"/>
|
||||
<node CREATED="1708704390490" ID="ID_1955311779" MODIFIED="1708704482518" TEXT="erscheint lösbar">
|
||||
<node CREATED="1708704485480" ID="ID_1418959649" MODIFIED="1708704532222" TEXT="muß „lediglich“ die Builder-Notation auf das konrete TOOL parametrisieren"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#0f1269" CREATED="1708704444553" ID="ID_765627090" MODIFIED="1708704513327" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">auto [stress,delta,time] = StressRig::with<Setup>() </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">                                     .perform<bench::BreakingPoint>(); </font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -112109,9 +112172,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1708044890924" ID="ID_1806382832" MODIFIED="1708045069169" TEXT="warum braucht das Planen des wake-up-Job so extrem lang (>3ms)?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das beobachte ich mit dem DUMP-Logging immer wieder. Und zwar ohne eine ausgeprägte Contention-Spitze. Nach dem Absetzen des letzten regulären Node-Jobs sieht man das Log vom Continuation-Aufruf, dann lang nichts, dann die Sequenz der dependencies.
|
||||
|
|
|
|||
Loading…
Reference in a new issue