Scheduler-test: fix Segfault in test setup
...as it turned out, this segfault was caused by flaws in the ScheduleCtx used for generate the test-schedule; especially when all node-spreads are set to zero and thus all jobs are scheduled immediately at t=0, there was a loophole in the logic to set the dependencies for the final »wake-up« job. When running such a schedule in the Stress-Test-Bench, the next measurement run could be started due to a premature wake-up job, thereby overrunning the previous test-run, which could be still in the middle of computations. So this was not a bug in the Scheduler itself, yet something to take care of later when programming the actual Job-Planning and schedule generation.
This commit is contained in:
parent
81d4b5d323
commit
6a08c97543
4 changed files with 255 additions and 37 deletions
|
|
@ -328,15 +328,42 @@ namespace test {
|
|||
void
|
||||
investigateWorkProcessing()
|
||||
{
|
||||
// TestChainLoad<8> testLoad{64};
|
||||
// testLoad.seedingRule(testLoad.rule().probability(0.6).minVal(2))
|
||||
// .pruningRule(testLoad.rule().probability(0.44))
|
||||
// .setSeed(55)
|
||||
// .buildTopology()
|
||||
// .printTopologyDOT()
|
||||
// .printTopologyStatistics()
|
||||
// ;
|
||||
MARK_TEST_FUN
|
||||
TestChainLoad<8> testLoad{64};
|
||||
testLoad.seedingRule(testLoad.rule().probability(0.6).minVal(2))
|
||||
.pruningRule(testLoad.rule().probability(0.44))
|
||||
.setSeed(55)
|
||||
.buildTopology()
|
||||
.printTopologyDOT()
|
||||
.printTopologyStatistics()
|
||||
;
|
||||
// ////////////////////////////////////////////////////////WIP : Run test directly for investigation of SEGFAULT....
|
||||
// BlockFlowAlloc bFlow;
|
||||
// EngineObserver watch;
|
||||
// Scheduler scheduler{bFlow, watch};
|
||||
// auto LOAD_BASE = 500us;
|
||||
// auto stressFac = 1.0;
|
||||
// auto concurrency = 8;
|
||||
//
|
||||
// ComputationalLoad cpuLoad;
|
||||
// cpuLoad.timeBase = LOAD_BASE;
|
||||
// cpuLoad.calibrate();
|
||||
//
|
||||
// double loadMicros = cpuLoad.invoke();
|
||||
// double refTime = testLoad.calcRuntimeReference(LOAD_BASE);
|
||||
//SHOW_EXPR(loadMicros)
|
||||
//
|
||||
// auto testSetup =
|
||||
// testLoad.setupSchedule(scheduler)
|
||||
// .withLoadTimeBase(LOAD_BASE)
|
||||
// .withJobDeadline(50ms)
|
||||
// .withUpfrontPlanning()
|
||||
// .withAdaptedSchedule (stressFac, concurrency);
|
||||
// double runTime = testSetup.launch_and_wait();
|
||||
// double expected = testSetup.getExpectedEndTime();
|
||||
//SHOW_EXPR(runTime)
|
||||
//SHOW_EXPR(expected)
|
||||
//SHOW_EXPR(refTime)
|
||||
|
||||
struct Setup : StressRig
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1315,7 +1315,7 @@ namespace test {
|
|||
// replicate this relation into the clone array
|
||||
clone[predIdx].addSucc(clone[succIdx]);
|
||||
};
|
||||
auto continuation = [&](size_t nodeDone, size_t levelDone, bool work_left)
|
||||
auto continuation = [&](size_t, size_t nodeDone, size_t levelDone, bool work_left)
|
||||
{
|
||||
lastNode =nodeDone;
|
||||
lastLevel = levelDone;
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ namespace test {
|
|||
const Duration SCHEDULE_LEVEL_STEP{_uTicks(1ms)}; ///< time budget to plan for the calculation of each »time level« of jobs
|
||||
const Duration SCHEDULE_NODE_STEP{Duration::NIL}; ///< additional time step to include in the plan for each job (node).
|
||||
const Duration SCHEDULE_PLAN_STEP{_uTicks(100us)}; ///< time budget to reserve for each node to be planned and scheduled
|
||||
const Offset SCHEDULE_WAKE_UP{_uTicks(10us)}; ///< tiny offset to place the final wake-up job behind any systematic schedule
|
||||
const bool SCHED_DEPENDS = false; ///< explicitly schedule a dependent job (or rely on NOTIFY)
|
||||
const bool SCHED_NOTIFY = true; ///< explicitly set notify dispatch time to the dependency's start time.
|
||||
|
||||
|
|
@ -1592,9 +1593,9 @@ namespace test {
|
|||
{
|
||||
using Node = typename TestChainLoad<maxFan>::Node;
|
||||
|
||||
function<void(size_t,size_t)> scheduleCalcJob_;
|
||||
function<void(Node*,Node*)> markDependency_;
|
||||
function<void(size_t,size_t,bool)> continuation_;
|
||||
function<void(size_t,size_t)> scheduleCalcJob_;
|
||||
function<void(Node*,Node*)> markDependency_;
|
||||
function<void(size_t,size_t,size_t,bool)> continuation_;
|
||||
|
||||
size_t maxCnt_;
|
||||
Node* nodes_;
|
||||
|
|
@ -1621,6 +1622,7 @@ namespace test {
|
|||
void
|
||||
invokeJobOperation (JobParameter param) override
|
||||
{
|
||||
size_t start{currIdx_};
|
||||
size_t reachedLevel{0};
|
||||
size_t targetNodeIDX = decodeNodeID (param.invoKey);
|
||||
for ( ; currIdx_<maxCnt_; ++currIdx_)
|
||||
|
|
@ -1636,7 +1638,7 @@ namespace test {
|
|||
markDependency_(pred,n);
|
||||
}
|
||||
ENSURE (currIdx_ > 0);
|
||||
continuation_(currIdx_-1, reachedLevel, currIdx_ < maxCnt_);
|
||||
continuation_(start, currIdx_-1, reachedLevel, currIdx_ < maxCnt_);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1719,7 +1721,7 @@ namespace test {
|
|||
|
||||
/** continue planning: schedule follow-up planning job */
|
||||
void
|
||||
continuation (size_t lastNodeIDX, size_t levelDone, bool work_left)
|
||||
continuation (size_t chunkStart, size_t lastNodeIDX, size_t levelDone, bool work_left)
|
||||
{
|
||||
if (work_left)
|
||||
{
|
||||
|
|
@ -1729,13 +1731,15 @@ namespace test {
|
|||
,manID_);
|
||||
}
|
||||
else
|
||||
scheduler_.defineSchedule(wakeUpJob())
|
||||
.manifestation (manID_)
|
||||
.startTime(jobStartTime (levelDone+1))
|
||||
.lifeWindow(SAFETY_TIMEOUT)
|
||||
.post()
|
||||
.linkToPredecessor (schedule_[lastNodeIDX], not schedNotify_)
|
||||
; // Setup wait-dependency on last computation
|
||||
{
|
||||
auto wakeUp = scheduler_.defineSchedule(wakeUpJob())
|
||||
.manifestation (manID_)
|
||||
.startTime(jobStartTime (levelDone+1, lastNodeIDX+1) + SCHEDULE_WAKE_UP)
|
||||
.lifeWindow(SAFETY_TIMEOUT)
|
||||
.post();
|
||||
for (size_t exitIDX : lastExitNodes (chunkStart))
|
||||
wakeUp.linkToPredecessor (schedule_[exitIDX]);
|
||||
} // Setup wait-dependency on last computations
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1751,7 +1755,8 @@ namespace test {
|
|||
planFunctor_.reset (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);}
|
||||
,[this](size_t n,size_t l, bool w){ continuation(n,l,w); }
|
||||
,[this](size_t s,size_t n,size_t l, bool w)
|
||||
{ continuation(s,n,l,w); }
|
||||
});
|
||||
startTime_ = anchorSchedule();
|
||||
scheduler_.seedCalcStream (planningJob(firstChunkEndNode)
|
||||
|
|
@ -2026,14 +2031,15 @@ namespace test {
|
|||
}
|
||||
|
||||
void
|
||||
fillAdaptedSchedule (double stressFac, uint concurrency)
|
||||
fillAdaptedSchedule (double stressFact, uint concurrency)
|
||||
{
|
||||
REQUIRE (stressFact > 0);
|
||||
size_t numPoints = chainLoad_.topLevel()+2;
|
||||
startTimes_.clear();
|
||||
startTimes_.reserve (numPoints);
|
||||
startTimes_.push_back (Time::ZERO);
|
||||
chainLoad_.levelScheduleSequence (concurrency)
|
||||
.transform([&](double scheduleFact){ return (scheduleFact/stressFac) * Offset{1,levelSpeed_};})
|
||||
.transform([&](double scheduleFact){ return (scheduleFact/stressFact) * Offset{1,levelSpeed_};})
|
||||
.effuse(startTimes_);
|
||||
}
|
||||
|
||||
|
|
@ -2045,6 +2051,14 @@ namespace test {
|
|||
+ nodeExpense_ * nodeIDX;
|
||||
}
|
||||
|
||||
auto
|
||||
lastExitNodes (size_t lastChunkStartIDX)
|
||||
{
|
||||
return chainLoad_.allExitNodes()
|
||||
.transform([&](Node& n){ return chainLoad_.nodeID(n); })
|
||||
.filter([=](size_t idx){ return idx >= lastChunkStartIDX; });
|
||||
} // index of all Exit-Nodes within last planning-chunk...
|
||||
|
||||
Time
|
||||
calcPlanScheduleTime (size_t lastNodeIDX)
|
||||
{/* must be at least 1 level ahead,
|
||||
|
|
|
|||
|
|
@ -110773,14 +110773,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704288869866" ID="ID_1475817699" MODIFIED="1704288911093" TEXT="Aufgabe: Belegen der grundsätzlichen Tauglichkeit"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704288897590" ID="ID_1251840457" MODIFIED="1704288911094" TEXT="Parameter + Grenzen für eine Standard-Last herausfinden"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704766027439" ID="ID_161148852" MODIFIED="1704915359907" TEXT="Untersuchung-1: hohe Auslastung">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704766027439" ID="ID_161148852" MODIFIED="1704919268932" TEXT="Untersuchung-1: hohe Auslastung">
|
||||
<linktarget COLOR="#3832ae" DESTINATION="ID_161148852" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_1703930922" SOURCE="ID_549174207" STARTARROW="None" STARTINCLINATION="289;17;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1704766160781" ID="ID_1879705815" MODIFIED="1704766424803" TEXT="bisher ging es um Dependency-Management — nun geht es um »Last«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
die ganzen Test zur Integration und zum Aufbau der Testanordnung haben die »chained load bursts« verwendet, ein hochgradig unregelmäßiges und abschnittsweise stark verknüpftes Pattern. Damit konnte ich in etwa die erwartete Parallelisierung beobachten, aber die Computational Load ist typischerweise doppelt so lang gelaufen wie kalibriert, während gleichzeitig permanent Koordinations-Aufwand zu leisten war. Deshalb wähle ich nun einen anderen Blickwinkel: Wie gut können wir die theoretisch vorhandene »Rechenkapazität« zum Einsatz bringen? Dafür braucht es ein möglichst einfaches Pattern, das aber hinreichend breit sein muß, um alle Kerne auszulasten. Ziel ist es, einen gleichmäßigen »Flow« von länger laufenden Rechen-Jobs zu generieren
|
||||
|
|
@ -110795,9 +110793,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1704849761430" ID="ID_973472982" MODIFIED="1704849788023" TEXT="massiv-vernetzt">
|
||||
<node CREATED="1704849789603" ID="ID_1248796850" MODIFIED="1704850126462" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font size="2">          TestChainLoad<8> testLoad{64}; </font>
|
||||
|
|
@ -110828,9 +110824,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1704849928488" ID="ID_1928191255" MODIFIED="1704850743844" TEXT="4-parallel-interleaved">
|
||||
<node CREATED="1704850003870" ID="ID_703412136" MODIFIED="1704850140684" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font size="2">          TestChainLoad<8> testLoad{64}; </font>
|
||||
|
|
@ -110861,9 +110855,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1704850522511" ID="ID_1699065000" MODIFIED="1704850544528" TEXT="massiv-parallel">
|
||||
<node CREATED="1704850545733" ID="ID_1888388122" MODIFIED="1704850628464" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<font size="2">          TestChainLoad<8> testLoad{64}; </font>
|
||||
|
|
@ -110905,8 +110897,193 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704915326966" ID="ID_117301056" MODIFIED="1704915346470" TEXT="8 Kerne gleichmäßige Last 500µs">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#435e98" CREATED="1704940787856" FOLDED="true" ID="ID_548135052" MODIFIED="1705010869404" TEXT="SEGFAULT">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1704990398092" ID="ID_80295046" MODIFIED="1704990404404" TEXT="Beobachtungen">
|
||||
<node CREATED="1704990408854" ID="ID_1906248087" MODIFIED="1704990424328" TEXT="reproduzierbar im Test-Bench"/>
|
||||
<node CREATED="1704990425041" ID="ID_1845017576" MODIFIED="1704990437358" TEXT="der gleiche Graph läuft im direkten Test problemlos durch"/>
|
||||
<node CREATED="1704990442728" ID="ID_153024669" MODIFIED="1704990457145" TEXT="SEGFAULT kommt stets aus irgend einem Worker"/>
|
||||
<node CREATED="1704990463047" ID="ID_1160243754" MODIFIED="1704990504216" TEXT="er tritt auf beim Zugriff auf den calcFunctor"/>
|
||||
<node CREATED="1704990553070" ID="ID_1526538911" MODIFIED="1704990565368" TEXT="Sonderbare Verhalten und Crash im Debugger">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1704990567617" ID="ID_1173334240" MODIFIED="1704990584316" TEXT="die Addresse des calcFunctors ist noch die Gleiche wie zu Beginn"/>
|
||||
<node CREATED="1704990585358" ID="ID_586252989" MODIFIED="1704990599008" TEXT="man kann den Inhalt aber nicht mehr inspizieren"/>
|
||||
<node CREATED="1704990600476" ID="ID_142853753" MODIFIED="1704990622133" TEXT="im Test-Thread kann man dann den btr Shared-Ptr auch nicht mehr inspizieren"/>
|
||||
<node CREATED="1704990684393" ID="ID_1789340667" MODIFIED="1704990717130">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
andere Stack-Frames oder Thrads inspizieren ⟶ <b>Debugger terminiert</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1704990723937" ID="ID_178341494" MODIFIED="1704990752371" TEXT="mehrere andere Threads stehen an der gleichen Stelle im Code">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1704990754552" ID="ID_1329373124" MODIFIED="1704990896919" TEXT="das Spezielle bei diesem Test: alle Jobs für t=0 gescheduled"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704990897845" HGAP="21" ID="ID_716447039" MODIFIED="1704990957152" STYLE="bubble" VSHIFT="8">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
⟹ <u>Verdacht</u>: <b>Daten-Korruption durch ungesicherten Race</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1704990778899" ID="ID_1882100216" MODIFIED="1704990783330" TEXT="Situation">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1704990784695" ID="ID_1057384980" MODIFIED="1704990807613" TEXT="die Test-Last war für diesen Test noch nicht konfiguriert"/>
|
||||
<node CREATED="1704990793642" ID="ID_77629130" MODIFIED="1704990823802" TEXT="deshalb ist die nominelle Laufzeit ≡ 0"/>
|
||||
<node CREATED="1704990824957" ID="ID_1361111256" MODIFIED="1704990835799" TEXT="alle Jobs werden daher zugleich gescheduled"/>
|
||||
<node CREATED="1704990868467" ID="ID_1318496153" MODIFIED="1704990880051" TEXT="es passiert wohl ziemlich am Anfang des ersten Testlaufs"/>
|
||||
<node CREATED="1704990880795" ID="ID_1948314569" MODIFIED="1704990887162" TEXT="die Planung ist aber bereits durch"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1704990966046" ID="ID_986682266" MODIFIED="1705010677923" TEXT="Untersuchung">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1704990969371" ID="ID_1971034431" MODIFIED="1704990986428" TEXT="Dump einbinden ⟶ Glück gehabt, SEGFAULT reproduzierbar">
|
||||
<node COLOR="#435e98" CREATED="1704991498765" ID="ID_1480139423" MODIFIED="1705001660275" TEXT="seltsam: warum startet Planungs-Funktor nicht im pre-Roll?">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1704997199852" ID="ID_468557813" MODIFIED="1704997215882" TEXT="liegt vmtl. an der Referenz-Zeit im DUMP"/>
|
||||
<node CREATED="1704997216462" ID="ID_1676022132" MODIFIED="1705001290651" TEXT="möglich daß es da mehrere Instanzen gibt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
theoretisch sollte es auch so sein: sie befindet sich in einem anonymen Namespace...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1704997251159" ID="ID_1254432212" MODIFIED="1704997276149" TEXT="⟹ explizit in eine Translation-Unit (activity-lang.cpp)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704996029443" ID="ID_1771223657" MODIFIED="1705001665527" TEXT="alle Jobs werden auf t=12153 gesetzt"/>
|
||||
<node CREATED="1704999274739" ID="ID_470946777" MODIFIED="1704999285952" TEXT="wirre Folge von Ausführungen...."/>
|
||||
<node CREATED="1704999398984" ID="ID_935321430" MODIFIED="1704999420905" TEXT="auch die letzte Kette ist relativ bald mit dabei"/>
|
||||
<node CREATED="1704999421719" ID="ID_250374885" MODIFIED="1704999434257" TEXT="Nodes mit höheren Nummern werden vor früheren Ketten ausgeführt"/>
|
||||
<node CREATED="1704999439133" ID="ID_713393704" MODIFIED="1704999460718" TEXT="NOTIFY-continuations bekommen Vorfahrt ⟹ letzte Kette macht Fortschritte"/>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1704999461378" ID="ID_372748970" MODIFIED="1705003161373" TEXT=" ���� wake-up Continuation aktiviert — obwohl viele andere Ketten noch unterwegs sind">
|
||||
<arrowlink COLOR="#d90173" DESTINATION="ID_1510371688" ENDARROW="Default" ENDINCLINATION="226;-7;" ID="Arrow_ID_547071277" STARTARROW="None" STARTINCLINATION="-325;11;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#dcc1a9" COLOR="#ff0000" CREATED="1704999555581" ID="ID_132163274" MODIFIED="1704999629290" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Problem erkannt: <b>re-Entrance</b>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704999646841" ID="ID_1490241879" MODIFIED="1704999666830" STYLE="fork" TEXT="der nächste Testlauf startet bereits">
|
||||
<node COLOR="#c40264" CREATED="1704999733982" ID="ID_1748055178" MODIFIED="1704999796418" TEXT="das bestehende Schedule wird de-Alloziert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node COLOR="#c40264" CREATED="1704999744068" ID="ID_1687999691" MODIFIED="1704999796419" TEXT="die Job-Funktoren werden ebenfalls re-alloziert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1704999646841" ID="ID_739939003" MODIFIED="1704999698630" STYLE="fork" TEXT="während noch die Verarbeitung des aktuellen Testlaufs unterwegs ist"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1705010732582" HGAP="-2" ID="ID_1350365350" MODIFIED="1705010804404" TEXT="Abhilfe strikt definierte Dependencies" VSHIFT="6">
|
||||
<linktarget COLOR="#3a84b6" DESTINATION="ID_1350365350" ENDARROW="Default" ENDINCLINATION="-192;14;" ID="Arrow_ID_980960219" SOURCE="ID_909211409" STARTARROW="None" STARTINCLINATION="118;-27;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1705002884235" ID="ID_669579747" MODIFIED="1705002898912" TEXT="Konsequenzen">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node CREATED="1705002913235" ID="ID_1850530595" MODIFIED="1705002925055" TEXT="Test-Setup">
|
||||
<node COLOR="#435e98" CREATED="1705002942000" FOLDED="true" ID="ID_882063020" MODIFIED="1705010871389" TEXT="Wake-up > calc sicherstellen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1705003013406" ID="ID_1062338611" MODIFIED="1705004263654" TEXT="die letzte Node kann vor früheren Nodes zum Zug kommen">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1705003087228" ID="ID_741945444" MODIFIED="1705003099054" TEXT="Konsequenz: Wake-up zu früh getriggert"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1705003099694" ID="ID_1510371688" MODIFIED="1705003152022" TEXT="im Test-Bench überfährt der nächtse Lauf den aktuellen Lauf">
|
||||
<linktarget COLOR="#d90173" DESTINATION="ID_1510371688" ENDARROW="Default" ENDINCLINATION="226;-7;" ID="Arrow_ID_547071277" SOURCE="ID_372748970" STARTARROW="None" STARTINCLINATION="-325;11;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1705003068679" ID="ID_975652225" MODIFIED="1705004256969" TEXT="nicht zu 100% auszuschließen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1705003171035" ID="ID_1766218775" MODIFIED="1705003181878" TEXT="wenn das gesamte Schedule ohne Schrittweite ausfällt"/>
|
||||
<node CREATED="1705003184935" ID="ID_510244737" MODIFIED="1705003200875" TEXT="wenn der Graph sehr breit ist und nicht in eine Exit-Node zusammenläuft"/>
|
||||
<node CREATED="1705003217034" ID="ID_1881563553" MODIFIED="1705010855805" TEXT="wegen Planning-Chunk-Aufteilung kann Dependency nur auf letzte ExitNode gesetzt werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
über alles andere können wir keine Annahmen machen — frühere Nodes könnten schon „durch“ sein und dann würde der Wake-up für-immer warten
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#384b8b" DESTINATION="ID_502331773" ENDARROW="Default" ENDINCLINATION="-142;-8;" ID="Arrow_ID_151297788" STARTARROW="None" STARTINCLINATION="-164;5;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1705003318951" ID="ID_159903527" MODIFIED="1705009211252" TEXT="Heuristik: nominelle Zeit > alle anderen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1705003345113" ID="ID_968042609" MODIFIED="1705003422497" TEXT="muß dafür dann doch die Node-ID (für Spreizung) mit angeben">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
habe ich nicht gemacht, weil ich dachte, es sei eine gute Idee, wenn die Contuation »frühest-möglich« zurückkommt. An das Dependency-Problem habe ich nicht gedach.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1705003424007" ID="ID_1509168666" MODIFIED="1705003450839" TEXT="da alle Spreads auf Null gesetzt sein können ⟹ künstlicher Aufschlag">
|
||||
<node CREATED="1705003457506" ID="ID_1969405800" MODIFIED="1705003461192" TEXT="+10µs"/>
|
||||
<node CREATED="1705003466937" ID="ID_1006741284" MODIFIED="1705003475092" TEXT="damit steht dieser immer am Ende der Queue"/>
|
||||
<node CREATED="1705003481007" ID="ID_397220801" MODIFIED="1705004288466">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
sofern SCHED_NOTIFY wären wir <i>theoretisch </i>sicher
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1705004289667" ID="ID_1272300583" MODIFIED="1705009215439" TEXT="praktisch leider nicht...">
|
||||
<arrowlink COLOR="#e60a56" DESTINATION="ID_909211409" ENDARROW="Default" ENDINCLINATION="56;-82;" ID="Arrow_ID_1973950783" STARTARROW="None" STARTINCLINATION="-181;19;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1705004334677" ID="ID_566241813" MODIFIED="1705004354158" TEXT="laufende Nodes können Continuations „nachliefern“"/>
|
||||
<node CREATED="1705004372232" ID="ID_1518391029" MODIFIED="1705004482664" TEXT="auch wenn vorher kurz die Queue ganz leer war">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
zwar kann (nach diesem ersten Fix) die Continuation erst starten, nachdem das von Anfang an geplante Schedule abgearbeitet war; jedoch laufen zu dem Zeitpunkt u.U noch eine Anzahl Nodes (Paralleitäts-Grad FAN_OUT). Und wenn diese dann fertig sind, könnten die weitere NOTIFY-Dependencies „abwerfen“ ⟹ SEGFAULT
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1705004228755" ID="ID_909211409" MODIFIED="1705010791415" TEXT="genügt nicht ⟹ wenigstens partielle Dependencies">
|
||||
<arrowlink COLOR="#3a84b6" DESTINATION="ID_1350365350" ENDARROW="Default" ENDINCLINATION="-192;14;" ID="Arrow_ID_980960219" STARTARROW="None" STARTINCLINATION="118;-27;"/>
|
||||
<linktarget COLOR="#e60a56" DESTINATION="ID_909211409" ENDARROW="Default" ENDINCLINATION="56;-82;" ID="Arrow_ID_1973950783" SOURCE="ID_1272300583" STARTARROW="None" STARTINCLINATION="-181;19;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1705004486681" ID="ID_665048830" MODIFIED="1705004506586" TEXT="muß also doch explizit Dependencies setzen"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1705004507198" ID="ID_502331773" MODIFIED="1705010855806" TEXT="muß diese aber auf den aktuellen Chunk einschränken">
|
||||
<linktarget COLOR="#384b8b" DESTINATION="ID_502331773" ENDARROW="Default" ENDINCLINATION="-142;-8;" ID="Arrow_ID_151297788" SOURCE="ID_1881563553" STARTARROW="None" STARTINCLINATION="-164;5;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue