Scheduler-test: identify and fix bug in allocator
...well — more of a logical contradiction, not so much a bug. The underlying problematic situation arises when meanwhile the Extent storage has been expanded, and especially the active slots are in »wrapped state«. In this case, the newly allocated extents must be rotated in, which invalidates existing index numbers. This problem was amended by exploting a chaching mechanism, allowing to re-attach and validate an index position still stored in an old iterator; especially this can happen when attempting to attach a follow-up dependency onto a job planned earlier, but not yet scheduled. The problem here was an assertion failure, which was triggered with a high probability; the fix for the problem detailed above used the yield() function, while it actually was only interested in retrieving the Extent's address to probe if the extent matches an known storage location. The solution is to provide a dedicated function for this check, which can then skip the sanity check (because in this case we do not want to use the Extent, and thus can touch obsoleted/inactive Extents without problem)
This commit is contained in:
parent
7c2b9a8ba5
commit
55842a8d4f
3 changed files with 484 additions and 23 deletions
|
|
@ -54,6 +54,8 @@
|
|||
** obsolete goals is pointless and can be just side stepped. Once the scheduling has
|
||||
** passed a defined deadline (and no further pending IO operations are around), the
|
||||
** Epoch can be abandoned as a whole and the storage extent can be re-used.
|
||||
** @warning this implies any access after the deadline is _undefined behaviour,_
|
||||
** spanning also further use of the AllocatorHandle obtained for a deadline.
|
||||
**
|
||||
** Dynamic adjustments are necessary to keep this scheme running efficiently.
|
||||
** Ideally, the temporal stepping between subsequent Epochs should be chosen such
|
||||
|
|
@ -516,6 +518,8 @@ namespace gear {
|
|||
/**
|
||||
* initiate allocations for activities to happen until some deadline
|
||||
* @return opaque handle allowing to perform several allocations.
|
||||
* @warning should not be used after the deadline has passed,
|
||||
* since memory will then be re-used and overwritten.
|
||||
*/
|
||||
AllocatorHandle
|
||||
until (Time deadline)
|
||||
|
|
|
|||
|
|
@ -185,12 +185,12 @@ namespace mem {
|
|||
void
|
||||
validatePos (Extent* knownTarget)
|
||||
{
|
||||
if (knownTarget == & yield())
|
||||
if (exFam->matchPos (index,knownTarget))
|
||||
return;
|
||||
size_t prevIdx = index;
|
||||
do{
|
||||
iterNext();
|
||||
if (knownTarget == & yield())
|
||||
if (exFam->matchPos (index,knownTarget))
|
||||
return;
|
||||
}
|
||||
while (index != prevIdx);
|
||||
|
|
@ -350,6 +350,13 @@ namespace mem {
|
|||
: (start_ <= idx and idx < after_);
|
||||
}
|
||||
|
||||
bool
|
||||
matchPos (size_t idx, void* address)
|
||||
{
|
||||
REQUIRE (idx < slotCnt());
|
||||
return address == extents_[idx].get();
|
||||
}
|
||||
|
||||
Extent&
|
||||
access (size_t idx) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -86672,6 +86672,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1703437483570" FOLDED="true" ID="ID_1892931558" MODIFIED="1703724909995" TEXT="verbleibendes technisches Problem: Invalidierung durch Epochen-Überlauf">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1703437521285" ID="ID_775703939" MODIFIED="1703440908947" TEXT="eine sehr seltene und spezielle Situation — und sehr tückisch">
|
||||
<linktarget COLOR="#c73b6c" DESTINATION="ID_775703939" ENDARROW="Default" ENDINCLINATION="-1012;1337;" ID="Arrow_ID_501409702" SOURCE="ID_1556816113" STARTARROW="None" STARTINCLINATION="-1727;92;"/>
|
||||
<node CREATED="1703437588221" ID="ID_607223766" MODIFIED="1703438380011" TEXT="folgt aus der Struktur mit einem Deadline-gebundenen AllocatorHandle">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -87693,6 +87694,33 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1703724370425" ID="ID_933611212" MODIFIED="1703724803251" TEXT="deshalb ist der Allocator nun im Microbenchmark sogar minimal schneller">
|
||||
<arrowlink COLOR="#2b72c5" DESTINATION="ID_576453194" ENDARROW="Default" ENDINCLINATION="357;24;" ID="Arrow_ID_1759861140" STARTARROW="None" STARTINCLINATION="573;22;"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1713279448677" ID="ID_1699330405" LINK="#ID_1493818454" MODIFIED="1713279611750" TEXT="später: noch ein Folge-Fehler — nach Fix korrektes Verhalten verifiziert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...ich hatte diesen Fix nur oberflächlich getestet, und dabei übersehen, daß eine Assertion ansprechen kann (sogar sehr wahrscheinlich einmal ansprechen wird, sobald der Reparatur-Mechanismus eine größtere Strecke zurücklegt). Das ist aber kein Bug im eigentlichen Reparatur-/reLink-Mechanismus; dieser funktioniert präzise, wie ich nochmals im einzelnen mit dem Debugger nachvollziehen konnte.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1713279615787" ID="ID_307598630" MODIFIED="1713279730132" TEXT="Deadlines sind ein separates Thema">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
wenn eine Deadline überfahren wurde, ist ein weiterer Zugriff auf den Extend als _undefined behaviour_ zu betrachten. Das gilt auch für das AllocatorHandle, das man früher mal für eine bestimmte Deadline bekommen hat; dieses kann man sehr wohl weiterhin verwenden (solange die Deadline noch in der Zukunft liegt). Konkreter Fall: später noch eine Dependency anhängen. Wenn der Anker dieser Dependecy zu dem Zeitpunkt bereits ausgeführt oder invalidiert wurde, ist man selber schuld!
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1703601256942" HGAP="0" ID="ID_607541044" MODIFIED="1703601370098" TEXT="Verbesserung im Test deutlich sichtbar" VSHIFT="3">
|
||||
|
|
@ -96194,11 +96222,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697733236455" ID="ID_698621499" MODIFIED="1697733269203" TEXT="Realtime Full-Load Test">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697733236455" ID="ID_698621499" MODIFIED="1713110634092" TEXT="Realistic Full-Load Test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697733438012" ID="ID_18653531" MODIFIED="1697733448582" TEXT="Ziel: Vollast unter Zeitbeschränkung"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704765993176" ID="ID_549174207" MODIFIED="1704766137597" TEXT="Zwischenziel: hohe Auslastung im Test erreichen">
|
||||
<arrowlink COLOR="#3832ae" DESTINATION="ID_161148852" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_1703930922" STARTARROW="None" STARTINCLINATION="289;17;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704765993176" ID="ID_549174207" MODIFIED="1713110710552" TEXT="Zwischenziel: hohe Auslastung im Test erreichen">
|
||||
<arrowlink COLOR="#3832ae" DESTINATION="ID_161148852" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_1703930922" STARTARROW="None" STARTINCLINATION="333;19;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704765993176" ID="ID_1479474389" MODIFIED="1713110700090" TEXT="Ziel: Auslastung kontrolliert aufrechterhalten">
|
||||
<arrowlink COLOR="#3832ae" DESTINATION="ID_1350821310" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_320251207" STARTARROW="None" STARTINCLINATION="289;17;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -110731,7 +110763,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1703377546048" ID="ID_550271885" MODIFIED="1703377564481" TEXT="der Haupt-Job wurde dispatched aber scheitert an der Deadline"/>
|
||||
<node CREATED="1703377729957" ID="ID_1005606488" MODIFIED="1703377743867" TEXT="es laufen zwe »Tick« innerhalb kurzer Zeit"/>
|
||||
<node CREATED="1703377729957" ID="ID_1005606488" MODIFIED="1703377743867" TEXT="es laufen zwei »Tick« innerhalb kurzer Zeit"/>
|
||||
<node CREATED="1703377744688" ID="ID_582267925" MODIFIED="1703377779491" TEXT="Grund: Queue ist bereits empty ⟹ nächster Job ⟼ ignite()"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -111019,7 +111051,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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="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;"/>
|
||||
<linktarget COLOR="#3832ae" DESTINATION="ID_161148852" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_1703930922" SOURCE="ID_549174207" STARTARROW="None" STARTINCLINATION="333;19;"/>
|
||||
<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>
|
||||
|
|
@ -111032,8 +111064,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1704766425859" ID="ID_819162648" MODIFIED="1704766437260" TEXT="geeignetes Last-Pattern aufbauen">
|
||||
<node COLOR="#435e98" CREATED="1704766438235" FOLDED="true" ID="ID_49179977" MODIFIED="1712595247094" TEXT="Idee: übersättigte Seeds + Breiten-Limitierung">
|
||||
<node COLOR="#435e98" CREATED="1704766438235" FOLDED="true" ID="ID_49179977" MODIFIED="1713111210424" TEXT="Idee: repetitive Pattern + Breiten-Limitierung">
|
||||
<linktarget COLOR="#4c5ab8" DESTINATION="ID_49179977" ENDARROW="Default" ENDINCLINATION="-515;1146;" ID="Arrow_ID_640223049" SOURCE="ID_1751068516" STARTARROW="None" STARTINCLINATION="-64;-3;"/>
|
||||
<linktarget COLOR="#4c5ab8" DESTINATION="ID_49179977" ENDARROW="Default" ENDINCLINATION="-549;1037;" ID="Arrow_ID_1912342428" SOURCE="ID_128782461" STARTARROW="None" STARTINCLINATION="-322;0;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1704849761430" ID="ID_973472982" MODIFIED="1705011573250" TEXT="Graph-1: massiv-vernetzt">
|
||||
<node CREATED="1704849789603" ID="ID_1248796850" MODIFIED="1704850126462" STYLE="bubble">
|
||||
|
|
@ -111125,10 +111158,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1704850649695" ID="ID_204505064" MODIFIED="1704850663456" TEXT="sofort bis zum Anschlag parallel"/>
|
||||
<node CREATED="1704850664900" ID="ID_1637288846" MODIFIED="1704850693948" TEXT="jeweils 4 Einzelketten, dann eine Zusammenhangskette mit 2 gestuften Joins"/>
|
||||
<node CREATED="1704849868616" ID="ID_1616250866" MODIFIED="1704849883546" TEXT="∅pL = 5.8"/>
|
||||
<node CREATED="1713111281419" ID="ID_1398808375" MODIFIED="1713111308931" TEXT="∅pL = 7.53 für 256 Nodes + Breitenbeschränkung auf 8"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1704915286895" ID="ID_263249206" MODIFIED="1704915298866" TEXT="beobachten wie sich diese Varianten verhalten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#5b280f" CREATED="1704915286895" ID="ID_263249206" MODIFIED="1713110849611" TEXT="beobachten wie sich diese Varianten verhalten">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1713110853723" ID="ID_1285288868" MODIFIED="1713110861442" TEXT="Nein! das ist zu früh">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1713110862394" ID="ID_1913007758" MODIFIED="1713110929573" TEXT="erst muß ich mit einer möglichst einfachen Last die Grenzen austesten">
|
||||
<arrowlink COLOR="#5590d5" DESTINATION="ID_430565338" ENDARROW="Default" ENDINCLINATION="20;-51;" ID="Arrow_ID_1521128110" STARTARROW="None" STARTINCLINATION="362;14;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1707665157695" ID="ID_816908094" MODIFIED="1707665443782" TEXT="Reflexion zur Meßmethode">
|
||||
<linktarget COLOR="#e92743" DESTINATION="ID_816908094" ENDARROW="Default" ENDINCLINATION="385;463;" ID="Arrow_ID_1403296989" SOURCE="ID_909181249" STARTARROW="None" STARTINCLINATION="-756;36;"/>
|
||||
|
|
@ -115153,6 +115194,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1712239307017" ID="ID_766419855" MODIFIED="1712239339117" TEXT="Scheduler einmalig beladen"/>
|
||||
<node CREATED="1712239325075" ID="ID_1203654071" MODIFIED="1712239342970" TEXT="Abarbeitung dieser Last beobachtet"/>
|
||||
<node CREATED="1712239349235" ID="ID_430565338" MODIFIED="1712595553285" TEXT="typischerweise: isolierte Nodes + Überlast">
|
||||
<linktarget COLOR="#5590d5" DESTINATION="ID_430565338" ENDARROW="Default" ENDINCLINATION="20;-51;" ID="Arrow_ID_1521128110" SOURCE="ID_1913007758" STARTARROW="None" STARTINCLINATION="362;14;"/>
|
||||
<linktarget COLOR="#4861c1" DESTINATION="ID_430565338" ENDARROW="Default" ENDINCLINATION="-805;54;" ID="Arrow_ID_1774826239" SOURCE="ID_1917510294" STARTARROW="None" STARTINCLINATION="373;-26;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1712239372216" ID="ID_291008354" MODIFIED="1712241669759" TEXT="ist aber flexibel"/>
|
||||
|
|
@ -116210,6 +116252,420 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1704766027439" ID="ID_1350821310" MODIFIED="1713110695900" TEXT="Untersuchung-2: steady work state">
|
||||
<linktarget COLOR="#3832ae" DESTINATION="ID_1350821310" ENDARROW="Default" ENDINCLINATION="-712;-56;" ID="Arrow_ID_320251207" SOURCE="ID_1479474389" STARTARROW="None" STARTINCLINATION="289;17;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1713110807801" ID="ID_11893474" MODIFIED="1713110819844" TEXT="Aufgabe weiterhin: geeignete Last aufbauen">
|
||||
<node CREATED="1712595181747" ID="ID_128782461" MODIFIED="1713110946545" TEXT="gehe wieder von den »kleine Graphen« aus">
|
||||
<arrowlink COLOR="#4c5ab8" DESTINATION="ID_49179977" ENDARROW="Default" ENDINCLINATION="-549;1037;" ID="Arrow_ID_1912342428" STARTARROW="None" STARTINCLINATION="-322;0;"/>
|
||||
<node CREATED="1713111325229" ID="ID_1211516688" MODIFIED="1713111338663" TEXT="1. Ansatz: Breitenbeschränkung nutzen">
|
||||
<node CREATED="1713111339939" ID="ID_908498578" MODIFIED="1713111348070" TEXT="verwende Graph-3: massiv-parallel"/>
|
||||
<node CREATED="1713111348923" ID="ID_640317274" MODIFIED="1713111360772" TEXT="Chain-Load ist auf 8 Nodes beschränkt"/>
|
||||
<node CREATED="1713111370079" ID="ID_1165922148" MODIFIED="1713111383009" TEXT="es ergeben sich 7.53 Nodes / Level"/>
|
||||
<node CREATED="1713111361384" ID="ID_1183485948" MODIFIED="1713111367309" TEXT="rechne mit 8 Kernen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1713110964437" ID="ID_1985468535" MODIFIED="1713110974268" TEXT="Beobachtung wieder im Stress-Test-Rig">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1713111196126" ID="ID_850536834" MODIFIED="1713138669660" TEXT="6.Test">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1713111392612" ID="ID_248623434" LINK="#ID_1699065000" MODIFIED="1713111422512" TEXT="Graph-3 mit 8-Nodes Breite und 8 Kernen">
|
||||
<node CREATED="1713111480488" ID="ID_1948015468" MODIFIED="1713111524014" TEXT="63% Seed, 31% Exit, 12% Join, 8% inner Nodes"/>
|
||||
<node CREATED="1713111537808" ID="ID_1390128414" MODIFIED="1713111552841" TEXT="∅ 4.74 Seeds / Level"/>
|
||||
<node CREATED="1713111566349" ID="ID_1541990956" MODIFIED="1713111576447" TEXT="∅ 0.91 Join / Level"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1713112014301" ID="ID_535829988" MODIFIED="1713112701480" TEXT="mit einer BaseExpense = 200µs ergibt sich eine sonderbare Abweichung">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1713112705699" ID="ID_1707549417" MODIFIED="1713112710131" TEXT="Nämlich ein Stress-Faktor ~3"/>
|
||||
<node CREATED="1713112053159" ID="ID_641736993" MODIFIED="1713112060978" TEXT="das ist dann wohl eine Stellschraube zu viel"/>
|
||||
<node CREATED="1713112247291" ID="ID_284639344" MODIFIED="1713112265000" TEXT="verstehe aber dennoch nicht, warum dann so viel »Luft« entsteht"/>
|
||||
<node CREATED="1713112304323" ID="ID_1867863120" MODIFIED="1713112419494" TEXT="doch! klingt plausibel">
|
||||
<node CREATED="1713112420626" ID="ID_1140249216" MODIFIED="1713112451332" TEXT="durch die hohe nominelle Concurrency werden nur 500µs für 8 Nodes alloziert"/>
|
||||
<node CREATED="1713112452182" ID="ID_840252908" MODIFIED="1713112476377" TEXT="aber der BaseExpense ist pro Node, also + 8*200µs"/>
|
||||
<node CREATED="1713112477227" ID="ID_714621864" MODIFIED="1713112497310" TEXT="das ist eine zusätzliche Spreizung um Faktor 3.2"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1713112728045" FOLDED="true" ID="ID_317332327" MODIFIED="1713138662011" TEXT="wo bleibt dann aber die tatsächliche BaseExpense?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1713113053955" ID="ID_1665688338" MODIFIED="1713113079288" TEXT="sollte ja außerhalb der gemessenen Job-Zeiten liegen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
und damit nicht über eine Abweichung der Job-Zeiten in den Formfaktor eingehen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1713113092429" ID="ID_674076723" MODIFIED="1713131827112" TEXT="⟹ die tatsächliche Concurrency ausgeben">
|
||||
<node CREATED="1713131159383" ID="ID_1723960817" MODIFIED="1713131190568">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
naja... die ist <i>unterirdisch</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1713131550668" ID="ID_1108435309" MODIFIED="1713138652526" TEXT="bewegt sich um 2 — Tendenz fallend">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
zur Erinnerung: in einer Serie machen wir ja eine Art Konvergenz auf einen effektiven Form-Faktor hin. Mit den Ergebnissen eines Laufes wird für den nächsten Lauf nachjustiert; der von außen vorgegebene (nominelle) Streß-Faktor bleibt, aber die tatsächliche Dichte wird so optimiert, daß die dann effektiv diesem Faktor entspricht. Im Zuge dieser Anpassung wird anscheinend das Schedule jeweils etwas verdichtet, und die erreichte Concurency fällt (von etwas über 2 auf 1.6 zuletzt)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#a32248" DESTINATION="ID_1108435309" ENDARROW="Default" ENDINCLINATION="-451;33;" ID="Arrow_ID_1455964137" SOURCE="ID_1397026936" STARTARROW="None" STARTINCLINATION="748;-44;"/>
|
||||
</node>
|
||||
<node CREATED="1713131782234" ID="ID_68565346" MODIFIED="1713131814392" TEXT="das ist aber bei einer Last = 500µs auch nicht überraschend">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
zumindest nach den inzwischen vorliegenden Beobachtungen aus dem Param-Range-Setup
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1713131850473" ID="ID_1125776266" MODIFIED="1713131889256" TEXT="die Verarbeitung ist ohnehin sehr ineffizient"/>
|
||||
<node CREATED="1713131889852" ID="ID_1549644913" MODIFIED="1713131914117" TEXT="und der Admin-Overhead geht da irgendwo mit ein"/>
|
||||
<node CREATED="1713131914870" ID="ID_1307381427" MODIFIED="1713131934784" TEXT="das alles wird aber vom Form-Faktor (per Abweichung Concurrency) abgefangen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713138604028" ID="ID_1397026936" MODIFIED="1713138661033" TEXT="Concurrency ist niedrig">
|
||||
<arrowlink COLOR="#a32248" DESTINATION="ID_1108435309" ENDARROW="Default" ENDINCLINATION="-451;33;" ID="Arrow_ID_1455964137" STARTARROW="None" STARTINCLINATION="748;-44;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1713132789379" ID="ID_340707211" MODIFIED="1713279753842" TEXT="mal mit längerer Job-Load (5ms) versuchen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1713132381066" FOLDED="true" ID="ID_651763651" MODIFIED="1713279739989" TEXT="Fehlzugriff aus dem Allocator (isValidPos (idx))">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
extent-family.hpp:356
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1713132457217" ID="ID_1257716735" LINK="#ID_917615827" MODIFIED="1713132548204" TEXT="die gleiche Assertion hat schon früher angesprochen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...damals allerdings aus einem ganz anderen Kontext, der inzwischen durch einen Umbau im Scheduler behoben ist/sein sollte.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1713132773293" ID="ID_818906770" MODIFIED="1713132783368" TEXT="aufgetreten nach wenigen Läufen der 1.Serie">
|
||||
<node CREATED="1713132811175" ID="ID_1384338907" MODIFIED="1713132859169">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<font color="#114cbf">»investigateWorkProcessing«</font>
|
||||
</p>
|
||||
<p>
|
||||
∅conc:7.29344
|
||||
</p>
|
||||
<p>
|
||||
∅conc:6.53128
|
||||
</p>
|
||||
<p>
|
||||
∅conc:6.24495
|
||||
</p>
|
||||
<p>
|
||||
∅conc:6.082
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" color="#fe0d0d">PRECONDITION: extent-family.hpp:356: thread_9: access: (isValidPos (idx)) </font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1713132874202" ID="ID_222679060" MODIFIED="1713190676385" TEXT="Stacktrace">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">0000000609: PRECONDITION: extent-family.hpp:356: thread_9: access: (isValidPos (idx)) </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::mem::ExtentFamily<vault::gear::Activity, 500ul>::access(unsigned long) const+0xdd </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::mem::ExtentFamily<vault::gear::Activity, 500ul>::IdxLink::yield() const+0x26 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::mem::ExtentFamily<vault::gear::Activity, 500ul>::IdxLink::validatePos(vault::mem::ExtentFamily<vault::gear::Activity, 500ul>::Extent*)+0x52 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::BlockFlow<vault::gear::blockFlow::RenderConfig>::</font><font face="Monospaced" size="2" color="#761602">StorageAdaptor::iterNext()</font><font face="Monospaced" size="2">+0x23 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">lib::IterableDecorator<vault::gear::blockFlow::Epoch<vault::mem::ExtentFamily<vault::gear::Activity, 500ul> >, vault::gear::BlockFlow<vault::gear::blockFlow::RenderConfig>::StorageAdaptor>::</font><font face="Monospaced" size="2" color="#8e2207">operator++()</font><font face="Monospaced" size="2">+0x20 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::BlockFlow<vault::gear::blockFlow::RenderConfig>::AllocatorHandle::</font><font face="Monospaced" size="2" color="#673e04">claimSlot()</font><font face="Monospaced" size="2">+0x228 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::Activity& vault::gear::BlockFlow<vault::gear::blockFlow::RenderConfig>::AllocatorHandle::create<vault::gear::Activity::Verb>(vault::gear::Activity::Verb&&)+0x2e </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::activity::Term::appendNotificationTo(vault::gear::activity::Term&, bool)+0x2f </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::ScheduleSpec::</font><font color="#c50955" face="Monospaced" size="2">linkToPredecessor</font><font face="Monospaced" size="2">(vault::gear::ScheduleSpec&, bool)+0x68 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::test::TestChainLoad<8ul>::</font><font color="#c80202" face="Monospaced" size="2">ScheduleCtx::<b>continuation</b></font><font face="Monospaced" size="2">(unsigned long, unsigned long, unsigned long, bool)+0x2ef </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::test::TestChainLoad<8ul>::ScheduleCtx::performRun()::{lambda(unsigned long, unsigned long, unsigned long, bool)#3}::operator()(unsigned long, unsigned long, unsigned long, bool) const+0x40 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">std::_Function_handler<void (unsigned long, unsigned long, unsigned long, bool), vault::gear::test::TestChainLoad<8ul>::ScheduleCtx::performRun()::{lambda(unsigned long, unsigned long, unsigned long, bool)#3}>::_M_invoke(std::_Any_data const&, unsigned long&&, std::_Any_data const&, std::_Any_data const&, bool&&)+0x86 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">std::function<void (unsigned long, unsigned long, unsigned long, bool)>::operator()(unsigned long, unsigned long, unsigned long, bool) const+0x90 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::test::</font><font color="#5401bd" face="Monospaced" size="2">RandomChainPlanFunctor</font><font face="Monospaced" size="2"><8ul>::invokeJobOperation(lumiera_jobParameter_struct const&)+0x2ca </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::Activity::invokeFunktor(lib::time::Time)+0x740 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::activity::Proc vault::gear::Activity::activate<vault::gear::Scheduler::ExecutionCtx>(lib::time::Time, vault::gear::Scheduler::ExecutionCtx&)+0x70 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::activity::Proc vault::gear::ActivityLang::activateChain<vault::gear::Scheduler::ExecutionCtx>(vault::gear::Activity*, vault::gear::Scheduler::ExecutionCtx&)+0x4e </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::activity::Proc vault::gear::ActivityLang::dispatchChain<vault::gear::Scheduler::ExecutionCtx>(vault::gear::Activity*, vault::gear::Scheduler::ExecutionCtx&)+0x68 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}::operator()(vault::gear::ActivationEvent) const+0x4d </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::SchedulerCommutator::dispatchCapacity<vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2}>(vault::gear::SchedulerInvocation&, vault::gear::LoadController&, vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2})::{lambda()#2}::operator()() const+0x8f </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::SchedulerCommutator::WorkerInstruction vault::gear::SchedulerCommutator::WorkerInstruction::performStep<vault::gear::SchedulerCommutator::dispatchCapacity<vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2}>(vault::gear::SchedulerInvocation&, vault::gear::LoadController&, vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2})::{lambda()#2}>(vault::gear::LoadController)+0x1f </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::activity::Proc vault::gear::SchedulerCommutator::dispatchCapacity<vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2}>(vault::gear::SchedulerInvocation&, vault::gear::LoadController&, vault::gear::Scheduler::doWork()::{lambda(vault::gear::ActivationEvent)#1}, vault::gear::Scheduler::doWork()::{lambda()#2})+0xc5 </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::Scheduler::doWork()+0x3d </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::Scheduler::Setup::doWork()+0x1c </font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" size="2">vault::gear::work::Worker<vault::gear::Scheduler::Setup>::</font><font color="#840404" face="Monospaced" size="2">pullWork()</font><font face="Monospaced" size="2">+0x26 </font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1713133485192" ID="ID_947110182" MODIFIED="1713133504295" TEXT="in einem Worker — pullWork()"/>
|
||||
<node CREATED="1713133509060" ID="ID_1843358766" MODIFIED="1713133518742" TEXT="führt Job-Planung aus"/>
|
||||
<node CREATED="1713133529198" ID="ID_977652732" MODIFIED="1713133539508" TEXT="ist im else-Zweig der »continuation«">
|
||||
<node CREATED="1713133544399" ID="ID_294329345" MODIFIED="1713133557385" TEXT="work_left ≡ false"/>
|
||||
</node>
|
||||
<node CREATED="1713133619529" ID="ID_82008393" MODIFIED="1713133626170">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<font color="#c50955" face="Monospaced" size="2">linkToPredecessor()</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1713133698201" ID="ID_703173235" MODIFIED="1713133914947" TEXT="Feststellungen">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1713133680251" ID="ID_1272458001" MODIFIED="1713133692053" TEXT="es ist also wieder der bekannte problematische Aufruf"/>
|
||||
<node CREATED="1713133704391" ID="ID_1458097512" MODIFIED="1713133762755" TEXT="hier aber beim Verdrahten des wake-up-Job"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1713133892253" ID="ID_1626209382" MODIFIED="1713133909974" TEXT="kann das Problem noch nicht sehen">
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1713133918034" ID="ID_836115954" MODIFIED="1713133942722" TEXT="genau deshalb hatte ich doch die Dependencies auf den aktuellen Chunk beschränkt"/>
|
||||
<node CREATED="1713133943318" ID="ID_1392041972" MODIFIED="1713133959336" TEXT="da wir aus der Planung kommen, kann auch kein »Tick« dazwischengefunkt haben"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713134829893" ID="ID_169525701" MODIFIED="1713134851513">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
tritt <b>reproduzierbar</b> auf ab Load=4ms
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1713134858753" ID="ID_123414665" MODIFIED="1713134871171" TEXT="und zwar immer nach 4 Läufen"/>
|
||||
<node CREATED="1713134946150" ID="ID_1065135099" MODIFIED="1713134957552" TEXT="nach 16 Läufen für nur 64 Nodes"/>
|
||||
<node CREATED="1713134998585" ID="ID_658130040" MODIFIED="1713135006343" TEXT="nach 8 Läufen für 128 Nodes"/>
|
||||
<node CREATED="1713135206679" ID="ID_1775229427" MODIFIED="1713135398059" TEXT="Aber: mit 512 Nodes tritt das Problem nicht auf">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1713135274627" ID="ID_474427976" MODIFIED="1713135278870" TEXT="für 4ms"/>
|
||||
<node CREATED="1713135279578" ID="ID_1655783173" MODIFIED="1713135290933" TEXT="für 5ms lösen wir eine SchedulerEmergency aus"/>
|
||||
<node CREATED="1713135383258" ID="ID_1427209469" MODIFIED="1713135395155" TEXT="wenn man dafür die Schwelle anhebt : dann läuft er durch"/>
|
||||
</node>
|
||||
<node CREATED="1713135778518" ID="ID_1026046718" MODIFIED="1713135806670" TEXT="exakt ist diese Anzahl zyklen nicht: es sind dann schon mal 6 statt 4"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1713135816592" ID="ID_592388147" MODIFIED="1713279355629" TEXT="Untersuchung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1713189769528" ID="ID_1640489443" MODIFIED="1713189787209" TEXT="Stacktrace ⟹ operator ++">
|
||||
<node CREATED="1713189804219" ID="ID_282173894" MODIFIED="1713189819428" TEXT="d.h. es kam in claimSlot() zu einem Block-Überlauf"/>
|
||||
<node CREATED="1713189946440" ID="ID_1348653516" MODIFIED="1713189967557" TEXT="es wurde aber der bestehnde Pool verwendet (keine Erweiterung der Allokation)"/>
|
||||
<node CREATED="1713190750074" ID="ID_1669596264" MODIFIED="1713190781618" TEXT="es kommt aber gar nicht zur Iteration RawIter::iterNext()"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713190785949" ID="ID_1791183032" MODIFIED="1713190807614" TEXT="die Validierung der aktuellen Position scheitert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1713190363888" ID="ID_1032034712" MODIFIED="1713190386538">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
alloziert wurde auf dem <i>predecessor-Term</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1713190497629" ID="ID_1118247685" MODIFIED="1713190503792" TEXT="dieser hat ein Allocator-Handle"/>
|
||||
<node CREATED="1713192060574" ID="ID_1556816113" MODIFIED="1713192191503" TEXT="in dieser Konstellation sind einige Probleme denkbar">
|
||||
<arrowlink COLOR="#c73b6c" DESTINATION="ID_775703939" ENDARROW="Default" ENDINCLINATION="-1012;1337;" ID="Arrow_ID_501409702" STARTARROW="None" STARTINCLINATION="-1727;92;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1713210855468" ID="ID_554850522" MODIFIED="1713210893567" TEXT="Stacktrace ⟹ IdxLink::validatePos() im call-Graph">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1713210896741" ID="ID_1428283332" LINK="#ID_369981064" MODIFIED="1713211030888" TEXT="⟹ der kürzlich eingebaute Reparatur-Mechanismus hat hier gegriffen"/>
|
||||
<node CREATED="1713211056973" ID="ID_1006526481" MODIFIED="1713211085415" TEXT="dieser Mechanismus wurde nur oberflächlich gestestet">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1713211741301" ID="ID_131088163" MODIFIED="1713211763310" TEXT="ein gründlicher Test der Grenzfälle würde mich Wochen kosten"/>
|
||||
<node CREATED="1713211763857" ID="ID_1965258471" MODIFIED="1713211784987" TEXT="das gilt für den Allocator insgesamt — nur der positive Pfad ist abgedeckt"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d7cb6b" COLOR="#913c2c" CREATED="1713211103814" ID="ID_38656557" MODIFIED="1713279395056" TEXT="die Implementierung enthält einen ziemlich offensichtlichen Denkfehler">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1713211131566" ID="ID_597601333" MODIFIED="1713211163073" TEXT="die Assertion wird mit hoher Wahrscheinlichkeit bei der Reparatur triggern"/>
|
||||
<node CREATED="1713211180858" ID="ID_552338679" MODIFIED="1713211294831" TEXT="denn wir laufen einmal über alle Extents um die Addresse wiederzufinden"/>
|
||||
<node CREATED="1713211223700" ID="ID_1527516549" MODIFIED="1713211300325" TEXT="und dabei sind nahezu sicher auch solche außerhalb der aktiven Zone"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#981d77" CREATED="1713212015289" ID="ID_5077199" MODIFIED="1713212350495" TEXT="bestätigt per Debugger">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1713212022935" ID="ID_297079686" MODIFIED="1713212050920" TEXT="der Reparatur-Code wird zum ersten Mal nach dem 5.Durchgang aufgerufen"/>
|
||||
<node CREATED="1713212052508" ID="ID_839082587" MODIFIED="1713212074781" TEXT="zu dem Zeitpunkt ist die ExtentFamily eindeutig in »wrapped state«">
|
||||
<node CREATED="1713212081392" ID="ID_1411278354" MODIFIED="1713212102856" TEXT="start ≡ 42"/>
|
||||
<node CREATED="1713212103445" ID="ID_639166794" MODIFIED="1713212114471" TEXT="after ≡ 37"/>
|
||||
<node CREATED="1713212131881" ID="ID_479213056" MODIFIED="1713212181985" TEXT="fraglicher Index ≡ 20"/>
|
||||
</node>
|
||||
<node CREATED="1713212270055" ID="ID_481372004" MODIFIED="1713212306410" TEXT="wenn die Iteration 37 erreicht ⟶ ��"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1713275005051" ID="ID_17370134" MODIFIED="1713278893420" TEXT="Fix">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1713275014742" ID="ID_1261730499" MODIFIED="1713278884631" TEXT="nicht yield() für den Check verwenden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...das ist ohnehin <i>etwas kreativ</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1713275064894" ID="ID_18075325" MODIFIED="1713278877792" TEXT="stattdessen eine (dedizierte) sichere Prüf-Funktion schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1713278871499" ID="ID_1493818454" MODIFIED="1713278874840" TEXT="Überprüfung/Test: einen re-link-Zyklus explizit im Debugger beobachtet">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1713278922710" ID="ID_1345315613" MODIFIED="1713279328774" TEXT="sicherer Gebrauch?">
|
||||
<node CREATED="1713278934306" ID="ID_1396168333" MODIFIED="1713278957520">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
dieser hängt an der <i>Deadline</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1713278960231" ID="ID_758113376" MODIFIED="1713279346057" TEXT="man kann auch ein Allocator-Handle problemlos weiterverwenden">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1713278985251" ID="ID_1944860606" MODIFIED="1713279002077" TEXT="solange die Deadline in der Zukunft liegt"/>
|
||||
<node CREATED="1713279002569" ID="ID_914456498" MODIFIED="1713279030864" TEXT="sollte der Extent bereits voll sein, erfolgt transparent Overflow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1713279054034" ID="ID_1468104613" MODIFIED="1713279340076" TEXT="vor der Deadline wird auch der gespeicherte Index garantiert im aktiven Bereich liegen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1713279085734" ID="ID_701792778" MODIFIED="1713279202169" TEXT="Deadline wird im Allocator nicht geprüft — absichtlich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Der Allokator in sich ist robust; die Deadline beschreibt nur einen Nutzungs-Kontrakt; sie ist zwar im Gate des Blocks gespeichert, aber für den Allokator nur maßgeblich zur Suche des passenden Blocks. Das weitere Nutzungs-Muster muß auf einer höheren Ebene gewährleistet sein.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1713279203766" ID="ID_1759355521" MODIFIED="1713279234766" TEXT="Das Belegungs/Nutzungsmuster ist an den Nutzungs-Kontext gebunden"/>
|
||||
<node CREATED="1713279235549" ID="ID_380603990" MODIFIED="1713279288738" TEXT="konkret: selber schuld, wenn man eine Dependency auf eine abgelaufene Activity setzt">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1713279292850" ID="ID_1962749953" MODIFIED="1713279304562" TEXT="hier im Test ist das eine Frage der Test-Parametrisierung"/>
|
||||
<node CREATED="1713279305162" ID="ID_1870807056" MODIFIED="1713279319675" TEXT="im tatsächlichen Gebrauch obliegt das dem Planungs-Job"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1712878607523" ID="ID_61094750" MODIFIED="1712878636653" TEXT="Ergebnisse">
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1712878620561" ID="ID_1169608980" MODIFIED="1712878630380" TEXT="keine dramatsichen Bugs mehr gefinden"/>
|
||||
|
|
@ -116227,8 +116683,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
Und zwar unabhängig davon, ob die Kalibrierung mit kurzen oder langen Zeiten und single- oder multithreaded erfolgte. Die Abweichtung tritt nur im realen Last-Kontext auf, und ist (visuell. den Diagrammen nach zu urteilen) korreliert mit dem Grad an contention und irregularität im Ablauf. Tendentiell nimmt sie für längere Testläufe ab, konvergiert aber — auch für ganz große Lasten und sehr lange Läufe — typischerweise zu einem Offset von ~ +1ms
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712878761558" ID="ID_398679192" MODIFIED="1712879104846" TEXT="es gibt eine relativ stabile Abweichung der effektiven Concurrency ggü der Heuristik">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -116240,8 +116695,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
Und das ist schon aus rein-logischen Gründen so zu erwarten. Bewußt habe ich beim Aufstellen der Heuristig für das Test-Schedule auf jedwede <i>optimale Anordnung der Rechenwege</i> verzichtet (kein Box-stacking problem lösen!). Hinzu kommen die tatsächlichen Beschränkungen des Worker-Pools. Daraus ergibt sich eine charakteristische Abweichung zwischen einem theoretisch berechneten concurrency-speed-up (wie er in's Schedule eingerechnet ist) und der <b>empirisch</b> beobachteten durchschnittlichen concurrency. Das wird als <b>Form-Faktor</b> gedeutet.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712879109979" ID="ID_492630552" MODIFIED="1712879132252" TEXT="⟹ Zeit und Ablauf-Steuerung arbeitet effizient"/>
|
||||
|
|
@ -116257,8 +116711,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
zwischen Load-Size und Laufzeit zum kompletten Abarbeiten der erzeugten Lastspitze
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712879196455" ID="ID_1128294894" MODIFIED="1712879210685" TEXT="bestägitt über einen weiten Parameter-Bereich"/>
|
||||
<node CREATED="1712879211454" ID="ID_686196534" MODIFIED="1712879234055" TEXT="für größere Test-Längen: sehr hohe Korrelationen"/>
|
||||
|
|
@ -116272,8 +116725,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
Gradient <b>sehr nah</b> am zu erwartenden Wert
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -116283,8 +116735,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
wenn man die empirisch beobachtete, effektive Concurrency und reale durchschnittliche Job-Zeit ansetzt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712879303773" ID="ID_1548672424" MODIFIED="1712879504409" TEXT="Sockel-Offset: 5ms + spin-up/down-Effekt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -116296,8 +116747,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
das bedeutet: der tatsächlich beobachtete Sockel hängt von der Länge der Job-Last und der Concurrency ab: Grundsätzlich muß man einmal die ganze Worker-Pool-size zu Beginn und am Ende aufschlagen — mit reduzierter Concurrency. Das ergibt sich bereits aus einer rein logischen Überlegung: »Voll-Last« kann erst konstituiert werden, wenn <i>der erste Worker sich den zweiten Job holt. </i>Analog beginnt der spin-down, wenn der erste worker <i>idle fällt.</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1712879511487" ID="ID_630980319" MODIFIED="1712879529007" TEXT="drastische Performance-Degradierung für Jobs < 1ms">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -124818,7 +125268,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
size="10!"<br/>
|
||||
ratio="expand"
|
||||
</p>
|
||||
<p>Beachte das Ausrufezeichen; auch <tt>expand</tt> ist wichtig, um die Apsect-Ratio zu erhalten. Wenn man stark verkleinert, sollte man ein generisches node-Template hinzufügen mit <tt>node[fontsize="16"]</tt>... dann Rendern mit -Tsvg</p>
|
||||
<p>Beachte das Ausrufezeichen; auch <tt>expand</tt> ist wichtig, um die Apsect-Ratio zu erhalten. Wenn man stark verkleinert, sollte man ein generisches node-Template hinzufügen mit <tt>node[fontsize="16"]</tt>... dann Rendern mit -Tsvg</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue