Scheduler-test: simple implementation of range coverage
- fill the range randomly with probe points - use the node count as independent parameter - measurement method *works as intended* - results indeed show a linear relationship Results are ''interesting'' however, since the (par,time) points seem to be arranged into two lines, implying that about half of the runs were somehow ''degraded'' and performed way slower.
This commit is contained in:
parent
a117e6e8c5
commit
2556151304
3 changed files with 176 additions and 73 deletions
|
|
@ -81,8 +81,9 @@ namespace test {
|
|||
{
|
||||
//smokeTest();
|
||||
// setup_systematicSchedule();
|
||||
search_breaking_point();
|
||||
// verify_instrumentation();
|
||||
// search_breaking_point();
|
||||
watch_expenseFunction();
|
||||
// investigateWorkProcessing();
|
||||
walkingDeadline();
|
||||
}
|
||||
|
|
@ -328,16 +329,22 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO determine the breaking point towards scheduler overload
|
||||
/** @test determine the breaking point towards scheduler overload
|
||||
* - use the integrated StressRig
|
||||
* - demonstrate how parameters can be tweaked
|
||||
* - perform a run, leading to a binary search for the breaking point
|
||||
* @note on my machine, I observe stress factors close below 0.5, due to the fact
|
||||
* that the ComputationalLoad typically takes 2 times as long in concurrent
|
||||
* usage compared to its calibration, which is done in a tight loop. This
|
||||
* is strange and may well be due to some peculiarity of my system. Which
|
||||
* also implies that this test's behaviour might be difficult to verify,
|
||||
* other than by qualitative interpretation of the log output on STDOUT.
|
||||
* @remark this stress-test setup uses instrumentation internally note to deduce
|
||||
* some systematic deviations from the theoretically established behaviour.
|
||||
* For example, on my machine, the ComputationalLoad performs slower within the
|
||||
* Scheduler environment compared to its calibration, which is done in a tight loop.
|
||||
* This may be due to internals of the processor, which show up under increased
|
||||
* contention combined with more frequent cache misses. In a similar vein, the
|
||||
* actually observed concurrency turns out to be consistently lower than could
|
||||
* be expected by accounting for the work units in isolation, without considering
|
||||
* dependency constraints. These observed deviations are cast into an empirical
|
||||
* »form factor«, which is then used to correct the applied stress factor.
|
||||
* Only with taking these corrective steps, the observed stress factor at
|
||||
* _breaking point_ comes close to the theoretically expected value of 1.0
|
||||
* @see stress-test-rig.hpp
|
||||
* @todo WIP 1/24 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
|
|
@ -363,6 +370,41 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO Investigate the relation of run time (expense) to input length.
|
||||
* @see vault::gear::bench::ParameterRange
|
||||
* @todo WIP 1/24 🔁 define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
watch_expenseFunction()
|
||||
{
|
||||
ComputationalLoad cpuLoad;
|
||||
cpuLoad.timeBase = 200us;
|
||||
cpuLoad.calibrate();
|
||||
//////////////////////////////////////////////////////////////////TODO for development only
|
||||
MARK_TEST_FUN
|
||||
|
||||
struct Setup : StressRig
|
||||
{
|
||||
usec LOAD_BASE = 500us;
|
||||
uint CONCURRENCY = 4;
|
||||
bool showRuns = true;
|
||||
|
||||
auto testLoad(size_t nodes)
|
||||
{
|
||||
TestChainLoad<8> testLoad{nodes};
|
||||
return testLoad.seedingRule(testLoad.rule().probability(0.6).minVal(2))
|
||||
.pruningRule(testLoad.rule().probability(0.44))
|
||||
.weightRule(testLoad.value(1))
|
||||
.setSeed(55);
|
||||
}
|
||||
};
|
||||
|
||||
auto results = StressRig::with<Setup>()
|
||||
.perform<bench::ParameterRange> (2,64);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 1/24 🔁 define ⟶ implement
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
#include "lib/meta/function.hpp"
|
||||
#include "lib/format-string.hpp"
|
||||
#include "lib/format-cout.hpp"//////////////////////////TODO RLY?
|
||||
//#include "lib/util.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
//#include <functional>
|
||||
#include <utility>
|
||||
|
|
@ -194,9 +194,9 @@ namespace test {
|
|||
protected:
|
||||
/** Extension point: build the computation topology for this test */
|
||||
auto
|
||||
testLoad()
|
||||
testLoad(size_t nodes =64)
|
||||
{
|
||||
return TestChainLoad<>{64};
|
||||
return TestChainLoad<>{nodes};
|
||||
}
|
||||
|
||||
/** (optional) extension point: base configuration of the test ScheduleCtx */
|
||||
|
|
@ -431,27 +431,62 @@ namespace test {
|
|||
class ParameterRange
|
||||
: public CONF
|
||||
{
|
||||
using TestLoad = decltype(declval<ParameterRange>().testLoad());
|
||||
using TestLoad = decltype(declval<ParameterRange>().testLoad(1));
|
||||
using TestSetup = decltype(declval<ParameterRange>().testSetup (declval<TestLoad&>()));
|
||||
|
||||
template<typename PAR>
|
||||
using Point = std::pair<PAR, double>;
|
||||
|
||||
|
||||
template<typename PAR>
|
||||
void
|
||||
runTest (Point<PAR>& point)
|
||||
{
|
||||
PAR param = point.first;
|
||||
double stressFac = 1.0;
|
||||
TestLoad testLoad = CONF::testLoad(param).buildTopology();
|
||||
TestSetup testSetup = CONF::testSetup (testLoad)
|
||||
.withLoadTimeBase(CONF::LOAD_BASE)
|
||||
.withBaseExpense (CONF::BASE_EXPENSE)
|
||||
.withSchedNotify (CONF::SCHED_NOTIFY)
|
||||
.withSchedDepends(CONF::SCHED_DEPENDS)
|
||||
.withAdaptedSchedule(stressFac, CONF::CONCURRENCY);
|
||||
point.second = testSetup.launch_and_wait() / 1000;
|
||||
cout << "x="<<point.first<<" y="<<point.second<<endl;
|
||||
}
|
||||
|
||||
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]`
|
||||
*/
|
||||
template<typename PAR>
|
||||
auto
|
||||
perform()
|
||||
perform (PAR lower, PAR upper)
|
||||
{
|
||||
TRANSIENTLY(work::Config::COMPUTATION_CAPACITY) = CONF::CONCURRENCY;
|
||||
|
||||
TestLoad testLoad = CONF::testLoad().buildTopology();
|
||||
TestSetup testSetup = CONF::testSetup (testLoad);
|
||||
PAR dist = upper - lower;
|
||||
uint cnt = CONF::REPETITIONS;
|
||||
vector<Point<PAR>> results(cnt);
|
||||
PAR minP{upper}, maxP{lower};
|
||||
for (uint i=0; i<cnt; ++i)
|
||||
{
|
||||
auto random = double(rand())/RAND_MAX;
|
||||
PAR pos = lower + PAR(floor (random*dist + 0.5));
|
||||
results[i].first = pos;
|
||||
minP = min (pos, minP);
|
||||
maxP = max (pos, maxP);
|
||||
}
|
||||
// ensure the bounds participate in test
|
||||
if (maxP < upper) results[cnt-2].first = upper;
|
||||
if (minP > lower) results[cnt-1].first = lower;
|
||||
|
||||
UNIMPLEMENTED ("parametric runs");
|
||||
// return make_tuple (res.stressFac, res.avgDelta, res.avgTime);
|
||||
for (auto& point : results)
|
||||
runTest (point);
|
||||
|
||||
return results;
|
||||
}
|
||||
};
|
||||
//
|
||||
|
|
|
|||
|
|
@ -111146,8 +111146,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
erster Versuch: <i>überhaupt keinen </i>Graph konstruieren
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node COLOR="#435e98" CREATED="1707960829288" ID="ID_1851262882" MODIFIED="1707960963715" TEXT="geht das?">
|
||||
<node CREATED="1707960839374" ID="ID_1245687450" MODIFIED="1707960846370" TEXT="Bauchgefühl sagt: sollte gehen"/>
|
||||
<node CREATED="1707960847717" ID="ID_185775784" MODIFIED="1707960867598" TEXT="es ist dann topLevel() ≡ 0"/>
|
||||
|
|
@ -111176,8 +111175,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
fast alle Threads sind im Contention-wait
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</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>
|
||||
|
|
@ -111187,8 +111185,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
das ist zwar ganz klar geplant, aber ich jetzt lasse ich die Tests erst mal so laufen...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1708021150829" ID="ID_841513991" MODIFIED="1708021415380" TEXT="Theorie: der Basis-Vector für die Threads wird concurrent erweitert">
|
||||
|
|
@ -111199,8 +111196,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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“
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1708021200631" ID="ID_1507367200" MODIFIED="1708021325426" TEXT="das ist nicht threadsafe">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -111210,8 +111206,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<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">
|
||||
|
|
@ -111222,8 +111217,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Das ist ein Instrumentierungs-Hilfsmittel, und generell nur darauf ausgelegt, »richtig verwendet zu werden«
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1708025327359" ID="ID_461738408" MODIFIED="1708025344662" TEXT="mit Vor-Dimensionierung nicht mehr beobachtet">
|
||||
|
|
@ -111273,8 +111267,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...waren aber geblockt, solange noch die eigentlichen Jobs mit t=0 in der Queue stehen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708029502085" ID="ID_43040367" MODIFIED="1708029516159" TEXT="auch hierfür kommt nur ein Worker zum Zug"/>
|
||||
<node CREATED="1708029516987" ID="ID_650283156" MODIFIED="1708029523286" TEXT="einige Contention währenddessen"/>
|
||||
|
|
@ -111295,8 +111288,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...und die Selbstreguliertung sorgt schntell dafür, daß der größte Teil der WorkForce in contention-Wait geht
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708029641698" ID="ID_1689204888" MODIFIED="1708029653045" TEXT="trotzdem findet noch eine gewisse Parallelisierung statt"/>
|
||||
</node>
|
||||
|
|
@ -111311,8 +111303,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
zweiter Versuch: <i>unconnected Nodes with weight</i><font size="2"> (500µs)</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node COLOR="#338800" CREATED="1708033299088" ID="ID_1415838317" MODIFIED="1708033320164" TEXT="hierfür neue setWeight()">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1708033322701" ID="ID_1244159152" MODIFIED="1708033352875" TEXT="infolge der neuen Einsicht, daß keine Topologie notwendig ist"/>
|
||||
|
|
@ -111333,8 +111324,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
das entspricht<b> exakt</b> der Concurrency
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708033977406" ID="ID_1893515841" MODIFIED="1708033994569" TEXT="Planung abgeschlossen bei t=2.8ms"/>
|
||||
<node CREATED="1708034237043" ID="ID_858054398" MODIFIED="1708034251356" TEXT="binnen 1.3ms sind alle 8 Worker da und haben einen Job übernommen"/>
|
||||
|
|
@ -111357,8 +111347,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
das ist effektiv <b>concurrency ≡ 6</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -111389,8 +111378,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
mit 400 Nodes  ⟼ real ∅ 12ms und <b>Concurrency ≡ 7.9</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1708051327255" ID="ID_695348528" MODIFIED="1708051345087" TEXT="mit 800 Nodes (und längerer Dealine): Scheuler läuft für 1.2 sec"/>
|
||||
|
|
@ -111414,8 +111402,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...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
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1708268252064" ID="ID_1446014590" MODIFIED="1708650315798" TEXT="effektive Concurrency für StressFac berücksichtigen">
|
||||
|
|
@ -111431,8 +111418,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708268487001" ID="ID_1962998809" MODIFIED="1708268499603" TEXT="wird erst während der Messung entdeckt"/>
|
||||
<node CREATED="1708268571343" ID="ID_1673801414" MODIFIED="1708268584520" TEXT="verschiebt dann das Koordinatensystem der Prozeßsteuerung"/>
|
||||
|
|
@ -111476,8 +111462,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1708270380308" ID="ID_631811144" MODIFIED="1708270582922" TEXT="⟹ �� mehrfach pro Meßpunkt ausführen und nachjustieren">
|
||||
|
|
@ -111500,8 +111485,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
Mehraufwand ⟹ bereits ein <i>entsprechend kleinerer </i>Stress-Faktor hat die gleiche Stress-Wirkung
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1708271377036" ID="ID_999482443" MODIFIED="1708273322761" TEXT="es geht ein: nominalConcurr / realConcurr">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -111524,8 +111508,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...das läßt dann die nominelle Concurrency als integral-Zahl intakt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -111603,8 +111586,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
denn das Schedule wird ja auf eine <i>nominelle </i>Concurrency ausgelegt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708353549722" ID="ID_739919619" MODIFIED="1708353588560">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -111614,8 +111596,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
und diese wird ggfs aus <i>strukturellen Gründen </i>nicht ausgeschöpft
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708353589901" ID="ID_753673138" MODIFIED="1708353635590" TEXT="was dann mithin nicht als Leistungsreserve gedeutet werden darf">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -111631,8 +111612,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...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
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708357060445" ID="ID_1779085910" MODIFIED="1708357108807" TEXT="muß dabei aber die Gewichte beachten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -111642,8 +111622,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
weil die Gewichte entsprechend proportional auch in die durchschnittliche empirische Concurrency eingehen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1708357112590" ID="ID_823184827" MODIFIED="1708357137110" TEXT="Idee: den für's Schedule berechneten Level-WeightFactor ins Verhältnis setzen"/>
|
||||
<node CREATED="1708357576600" ID="ID_630915220" MODIFIED="1708357610199" TEXT="die Reduktion im Vergleich zur reinen weightSum wird als effektive Concurrency gedeutet"/>
|
||||
|
|
@ -111690,8 +111669,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
ohne starke Abhängigkeiten ist durchaus <i>elastisches Verhalten </i>denkbar
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -111699,8 +111677,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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>
|
||||
</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>
|
||||
|
|
@ -111710,8 +111687,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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>
|
||||
</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>
|
||||
|
|
@ -111721,8 +111697,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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>
|
||||
</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">
|
||||
|
|
@ -111732,8 +111707,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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?">
|
||||
<node COLOR="#5b280f" CREATED="1708653013774" ID="ID_1826883977" MODIFIED="1708738858456" TEXT="(optional) soll aber jeder Meßpunkt mehrfach laufen können?">
|
||||
<icon BUILTIN="help"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1708738769854" ID="ID_1335531875" MODIFIED="1708738775540" TEXT="macht hier keinen Sinn"/>
|
||||
<node CREATED="1708738776218" ID="ID_1705315845" MODIFIED="1708738811435">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<i>verschiedene </i>Parameter-Werte führen zu besserer statistischer Abdeckung
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1708653109374" ID="ID_1339763043" MODIFIED="1708653120296" TEXT="Ergebnis ist eine (x,y)-Wolke"/>
|
||||
</node>
|
||||
|
|
@ -111742,7 +111732,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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()">
|
||||
<node COLOR="#5b280f" CREATED="1708653766790" ID="ID_621093180" MODIFIED="1708738915011" TEXT="allein schon die schöne Schreibweise StressRig::with<Setup>().invocation()">
|
||||
<arrowlink COLOR="#725346" DESTINATION="ID_765627090" ENDARROW="Default" ENDINCLINATION="177;0;" ID="Arrow_ID_1910232991" STARTARROW="None" STARTINCLINATION="140;5;"/>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -111750,9 +111741,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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 COLOR="#338800" CREATED="1708704390490" ID="ID_1955311779" MODIFIED="1708738756134" TEXT="erscheint lösbar">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<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">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#0f1269" CREATED="1708704444553" ID="ID_765627090" MODIFIED="1708738903548" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -111764,10 +111756,45 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#725346" DESTINATION="ID_765627090" ENDARROW="Default" ENDINCLINATION="177;0;" ID="Arrow_ID_1910232991" SOURCE="ID_621093180" STARTARROW="None" STARTINCLINATION="140;5;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1708738935308" ID="ID_762477739" MODIFIED="1708738938240" TEXT="Parameter">
|
||||
<node CREATED="1708738939092" ID="ID_1336682025" MODIFIED="1708738949919" TEXT="REPETITIONS : meint hier die Zahl der Meßläufe"/>
|
||||
<node CREATED="1708738958993" ID="ID_366857603" MODIFIED="1708739018813" TEXT="lower, upper : Grenzen des Parameterbereichs"/>
|
||||
<node CREATED="1708744051168" ID="ID_832742285" MODIFIED="1708744058443" TEXT="Typ des Parameters als Template PAR"/>
|
||||
</node>
|
||||
<node CREATED="1708743962212" ID="ID_1501901450" MODIFIED="1708743996092" TEXT="Result-Vector...">
|
||||
<node CREATED="1708743998321" ID="ID_1433691531" MODIFIED="1708744007997" TEXT="mit zufälligen Meßpunkten füllen">
|
||||
<node CREATED="1708744023987" ID="ID_1484783314" MODIFIED="1708744039517" TEXT="vorsicht rand() ⟼ int"/>
|
||||
<node CREATED="1708744039986" ID="ID_699704031" MODIFIED="1708744044277" TEXT="besser mit double rechnen"/>
|
||||
</node>
|
||||
<node CREATED="1708744009942" ID="ID_1661435132" MODIFIED="1708744019908" TEXT="sicherstellen daß die Grenzpunkte mit dabei sind"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1708744078861" ID="ID_1023448351" MODIFIED="1708744085468" TEXT="Integration / Untersuchungen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1708744086675" ID="ID_551606292" MODIFIED="1708744105373" TEXT="erster Meßlauf">
|
||||
<node CREATED="1708744106371" ID="ID_508772586" MODIFIED="1708744111228" TEXT="20 Punkte 2...64"/>
|
||||
<node CREATED="1708744112098" ID="ID_179043543" MODIFIED="1708744119235" TEXT="Parameter: ist Anzahl Nodes"/>
|
||||
<node CREATED="1708744120246" ID="ID_490758949" MODIFIED="1708744134224" TEXT="verwende den massiv breiten Graph mit kurzen Ketten"/>
|
||||
<node COLOR="#338800" CREATED="1708744344761" ID="ID_318922479" MODIFIED="1708744354075" TEXT="zunächst einmal: Meßmethode funktioniert">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1708744139244" ID="ID_955581717" MODIFIED="1708744366315" TEXT="Ergebnis ist »interessant«">
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
<node CREATED="1708744149859" ID="ID_1536683924" MODIFIED="1708744164463" TEXT="es zeigt sich grundsätzlich eine lineare Korrelation"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1708744165001" ID="ID_310456345" MODIFIED="1708744332819" TEXT="aber die Punkt-Wolke zeigt deutlich zwei Linien">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1708744191606" ID="ID_1135040835" MODIFIED="1708744219397" TEXT="die obere Linie stammt von »Langläufern«"/>
|
||||
<node CREATED="1708744220396" ID="ID_1711428581" MODIFIED="1708744297061" TEXT="die untere Linie schneidet die Ordinate bei ca 2.5ms"/>
|
||||
<node CREATED="1708744308614" ID="ID_347796665" MODIFIED="1708744319296" TEXT="beide Linien treten über nahezu den ganzen Bereich auf"/>
|
||||
<node CREATED="1708744320979" ID="ID_382078009" MODIFIED="1708744327943" TEXT="beide Linien sind sehr gut parallel"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -112178,8 +112205,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
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.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1708047710359" ID="ID_1233103402" MODIFIED="1708047732392" TEXT="Beobachtung: davon gehen ~2ms in buildTerm()"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue