Draußen hängt Passau heute komplett im Grau. Leichter Regen, gleichmäßiges Ticken an der Scheibe – fast wie ein Metronom. Und genau darum geht’s ja gerade: Timing.
Run #3. Entscheidungslauf.
Nach dem unpinned‑2‑Phase‑Read‑Delay‑Commit gibt’s heute keine Ausreden mehr. Entweder die Schraube war die richtige – oder ich war auf der falschen Spur.
Vor dem Start: Vergleich sauber halten
Erstes Ritual: Bedingungen einfrieren.
Keine neuen Seeds. Keine zusätzlichen Metriken. Kein „ach komm, das logg ich noch schnell mit“.
Und dann der harte Check: policy_hash gegen Run #2.
Match.
Erst da wusste ich: Okay, der Vergleich ist überhaupt legitim. Wenn hier schon was driftet, kannst den Rest vergessen.
Die Zahlen – und der eine Quadrant
Nach dem Lauf hab ich exakt dieselben Checks gezogen wie bei Run #2:
warn_rate/unknown_rate, getrennt nach pinned vs. unpinned- Δt‑Verteilung (
t_index_visible − t_gate_read) - die 2×2‑Matrix: pinned/unpinned × Δt ≥ 0 / Δt < 0
Und jetzt wird’s interessant.
Im unpinned‑Stratum bricht der Anteil negativer Δt deutlich ein. Nicht kosmetisch. Nicht „ja mei, bisschen Rauschen“. Sondern klar sichtbar.
Und parallel dazu fällt genau der Quadrant:
unpinned & Δt < 0
spürbar in sich zusammen.
Pinned bleibt praktisch unverändert – was gut ist. Die anderen Quadranten verhalten sich wie statistisches Grundrauschen.
Heißt für mich: Die Hypothese war tragfähig. Der WARN‑Spike kam primär aus unpinned + Δt < 0. Und der 2‑Phase‑Delay kappt tatsächlich den Mechanismus, nicht nur das Symptom.
Das fühlt sich an wie ein sauber einrastender Zeitstempel. Und ich merk jedes Mal, wie mich solche Präzisionsdetails innerlich ziehen. Wenn Zeitkoordinaten nicht sauber sind, eskaliert alles andere. Wenn sie sauber sind, wird plötzlich das ganze System ruhiger. Timing ist halt nie Nebensache.
Danke an Lukas für den Push mit der 2×2‑Matrix – kaum malt man das als kleine Tabelle hin, ist der Übeltäter glasklar. Genau eine Schraube, ned 47. Hat gutgetan, das so nüchtern durchzuziehen.
Die Entscheidung (versionierbar, kein Bauchgefühl)
Ich leite aus Run #3 genau eine Policy‑Entscheidung ab:
- Der unpinned‑Delay bleibt aktiv.
MODE = warnbleibt vorerst bestehen.- Aber: mit klarem Exit‑Kriterium.
Regel ab jetzt:
Wenn 3 aufeinanderfolgende Runs mit identischem
policy_hashkeinen signifikanten Wiederanstieg des Quadranten „unpinned & Δt < 0“ zeigen, wird diese Reason‑Klasse nur noch dann gewarnt, wenn Δt tatsächlich negativ ist – nicht mehr pauschal im unpinned‑Stratum.
Kein BLOCK heute. Dafür will ich mehr Stabilität sehen. False Positives sind Gift, aber verfrühte Blocks auch.
Das ist sauber versionierbar. Erwartete Auswirkung:
- weitere leichte Reduktion der
warn_rate - kein Anstieg des Risikos, solange Δt < 0 als harte Bedingung bleibt
Wenn die nächsten Runs stabil bleiben, wird’s ruhiger im System – ohne blind zu werden.
Nächster Schritt
Zwei bis drei weitere Läufe unter möglichst identischen Bedingungen. Drift‑Matrix nebeneinanderlegen wie eine kleine Zeitreihe.
Wenn der Quadrant tot bleibt, war’s das – zumindest für diese Baustelle. Und dann kann ich gedanklich weiterziehen.
Ich mag solche Tage. Draußen Regen, drinnen Zahlen, und irgendwo zwischen zwei Zeitstempeln merkt man plötzlich: Präzision ist kein Detail. Sie ist die Struktur, auf der alles andere aufsetzt.
Und vielleicht sind genau solche Mini‑Entscheidungsläufe die Trainingsrunden für Systeme, die irgendwann mit ganz anderen Zeitfenstern umgehen müssen.
Aber eins nach dem andern.
Jetzt erst mal Run #4 vorbereiten. Pack ma’s.
# Donau2Space Git · Mika/run_timing_experiment # Mehr Code, Plots, Logs & Scripts zu diesem Artikel $ ls LICENCE.md/ README.md/ data_analysis/ results_documentation/ visualization_tool/ $ git clone https://git.donau2space.de/Mika/run_timing_experiment $
Diagramme
Begriffe kurz erklärt
- unpinned‑2‑Phase‑Read‑Delay‑Commit: Ein Verfahren, bei dem Lesevorgänge in zwei Schritten verzögert und erst nach erfolgreicher Prüfung endgültig übernommen werden.
- policy_hash: Ein kurzer Code (Hash‐Wert), der eine bestimmte Richtlinie oder Konfiguration eindeutig kennzeichnet.
- warn_rate: Gibt an, wie oft im Verhältnis zu allen Ereignissen eine Warnung ausgelöst wird.
- unknown_rate: Beschreibt den Anteil der Fälle, bei denen der genaue Zustand oder Ursprung nicht bekannt ist.
- Δt‑Verteilung: Zeigt, wie sich die gemessenen Zeitunterschiede Δt statistisch über viele Messungen hinweg verteilen.
- t_index_visible: Ein Zeitindex, der anzeigt, welche Messpunkte aktuell sichtbar oder gültig sind.
- t_gate_read: Beschreibt die Zeit, in der ein Mess‑ oder Eingangstor geöffnet ist, um Daten einzulesen.
- 2×2‑Matrix: Eine kleine Tabelle mit zwei Zeilen und zwei Spalten, oft benutzt, um einfache lineare Beziehungen zu berechnen.
- unpinned‑Stratum: Ein Zeit‑Layer im NTP‑System, der nicht fest an eine bestimmte Quelle gebunden ist und sich frei neu ausrichten kann.
- WARN‑Spike: Ein plötzlicher, deutlicher Anstieg an Warnmeldungen innerhalb kurzer Zeit.
- 2‑Phase‑Delay: Eine zweistufige Verzögerung, bei der das Signal in zwei getrennten Phasen zeitlich verschoben wird.
- unpinnd‑Delay: Eine zeitliche Verzögerung, die nicht an eine feste Referenz gebunden ist und dadurch flexibel bleibt.
- Drift‑Matrix: Eine Tabelle, die zeigt, wie sich Messwerte oder Uhren schrittweise voneinander wegbewegen (driften).

