# A/B-Experiment-Design: Pinned vs. Unpinned Publish-Bedingungen ## Purpose Definition und Dokumentation des A/B-Experiment-Designs zur Bewertung von Publish-Timelines bei pinned und unpinned Bedingungen. **Problemstellung:** Die Position des ersten retry-freien Reads in der Publish-Sequenz ist nicht stabil. Es muss untersucht werden, ob CPU-Pinning das Mischfenster zwischen relevanten Write-Events verkleinert. **Ziele:** - Analyse des Einflusses von CPU-Pinning auf Publish-Timing-Zonen. - Bestimmung der relativen Häufigkeit von Reads zwischen spezifischen Write-Schritten. - Quantifizierung typischer Mischfenster-Dauern (p50, p95, max). ## Kontext & Hintergrund Trace-Daten pro corr_id mit Write-Events und zugehörigen Read-Events. **Gruppierung:** - Case_03 - Case_04 - pinned - unpinned **Trace-Metadaten / zusätzliche Tags:** - base_raw_write - nsec_base_write - baseline_recalc_enter - baseline_recalc_exit - clocksource_id_write **Domänenkontext:** - Low-Level-Timing-Analyse - eBPF-Instrumentation - System-Performance-Validierung **Outlier-Definition:** - Methode: absolute duration cutoff - Beschreibung: Events mit extrem hohen Latenzen werden ausgeschlossen, wenn sie oberhalb 3×p95 liegen. - Metrik: Zeitdifferenz zwischen aufeinanderfolgenden Writes oder Reads **Motivation:** - Ermittlung von Übergangsphasen im Publish-Prozess. - Validierung von baseline_recalc als relevanter Segmentierungspunkt. - Untersuchung des Einflusses von CPU-Pinning auf Publish-Timing-Kohärenz. ## Methode / Spezifikation **Übersicht:** - Pro corr_id werden Write- und Read-Events kombiniert. - Reads werden einer Zone zwischen definierten Write-Schritten zugeordnet. - Vergleich von Zonenverteilungen zwischen pinned und unpinned Gruppen. **Algorithmen / Verfahren:** - Instrumentiere Write-Events mit field_tags (base_raw_write, nsec_base_write). - Instrumentiere baseline_recalc_enter/exit als Marker. - Aggregiere Events per corr_id in trace_agg.py zu Step-Listen. - Klassifiziere Reads nach Position zwischen Steps (read_between_steps). - Berechne Häufigkeiten und Dauerstatistiken pro Zone (p50, p95, max). ### Bootstrap-Übersicht Bootstrap-Resampling zur Stabilisierung von Zonenantailschätzungen. **Zielgrößen:** - Anteil Reads vor baseline_recalc_exit - Anteil Reads vor clocksource_id_write ### Resampling-Setup - Case_03-pinned - Case_03-unpinned - Case_04-pinned - Case_04-unpinned **Stichprobeneinheit:** corr_id **Resampling-Schema:** - Bootstrap n=10k Wiederholungen pro Gruppe **Konfidenzintervalle:** - Niveau: 0.95 - Typ: Percentile-Interval - Ableitung: Resampling-Anteile ### Abgeleitete Effektgrößen **Risk Difference (Differenz der Raten):** - Definition: Differenz des Anteils von Reads in Zone 1 zwischen pinned und unpinned Gruppen. - Bootstrap: Bootstrap-Schätzung mit 95%-Konfidenzintervall **Risk Ratio:** - Definition: Quotient der Wahrscheinlichkeiten für Reads in Zone 1 (pinned/unpinned). - Bootstrap: Bootstrap-Resampling von Verhältniswerten ### C-State-Kontrolle **Ziel:** Vermeidung verfälschter Timings durch unterschiedliche C-State-Zustände. **Vorgehen:** - Logge CPU-Frequenz und aktuelle C-State-Transitions während der Runs. - Filtere Runs mit Frequenzabweichungen > ±5% des Sollwerts. ## Input / Output ### Input-Anforderungen **Hardware:** - x86_64-System mit konfigurierbarem CPU-Pinning **Software:** - Linux Kernel mit eBPF-Unterstützung - trace-cmd - Python 3.10+ mit NumPy/Pandas **Konfiguration:** - Zuweisung pinned/unpinned Threads zu festen CPUs - Aktivierte ftrace tracepoints für publish_write-Events ### Erwartete Rohdaten **Felder pro Run:** - corr_id - event_name - ktime_ns - cpu - new_value_hash **Formatbeispiele:** - 1234,base_raw_write,1749827412,2,0x89ad23 **Trace-Daten:** - Format: ftrace / trace-cmd binary - Hinweis: Parsed über trace_agg.py in standardisierte JSON-Struktur ### Analyse-Ausgaben **Pro Gruppe / pro Governor:** - p50 - p95 - max Dauer pro Zone **Vergleichsausgaben:** - Case_03-pinned vs Case_03-unpinned - Δ: ΔZone1_Anteil - CI(Δ): 95%-CI[low,high] - RR: ratio_Zone1_pinned/unpinned - CI(RR): 95%-CI_ratio - Case_04-pinned vs Case_04-unpinned - Δ: ΔZone1_Anteil - CI(Δ): 95%-CI[low,high] - RR: ratio_Zone1_pinned/unpinned - CI(RR): 95%-CI_ratio - C-State-Korrelation: Analyse der Relation zwischen Zone-Dauer und CPU-State - Trace-Muster: Liste typischer Eventreihenfolgen pro corr_id ## Workflow / Nutzung **Analyse-Workflow:** - Run-Setup für pinned und unpinned Gruppen mit identischem Workload. - Trace-Aufzeichnung und Speicherung der Write-/Read-Events. - Parsing über trace_agg.py zu Step-Sequenzen pro corr_id. - Zonenzuordnung und Aggregation der Statistiken. - Bootstrap-Auswertung zur Unsicherheitsabschätzung. - Vergleich der pinned/unpinned Resultate und Berechnung von Effektmaßen. ### Trace-Template-Anforderungen **Ziel:** Reproduzierbare Messung von Publish-Schritt-Sequenzen pro corr_id. **Erforderliche Tags & Metadaten:** - base_raw_write - nsec_base_write - baseline_recalc_enter - baseline_recalc_exit - clocksource_id_write **trace-cmd-Setup:** - trace-cmd record -e base_raw_write -e nsec_base_write -e baseline_recalc_* -e clocksource_id_write **Run-Design für Contributors:** - N=10–20 Runs pro Case, gemischte corr_ids, stabile Workloadbedingungen ## Interpretation & erwartete Ergebnisse **Kernbefunde:** - Reads treten meist zwischen base_raw_write/nsec_base_write und baseline_recalc_exit auf. - baseline_recalc segmentiert den Publish-Zyklus in zwei signifikante Zonen. - CPU-Pinning kann die Zone-1-Länge und relative Read-Anteile verringern. **Implikationen für Experimente:** - Pinning könnte deterministischere Publish-Timelines erzeugen. - Verzögerungen in baseline_recalc wirken sich messbar auf Read-Positionen aus. **Planungsziel:** - Ziel: Quantitative Beurteilung des Einflusses von CPU-Pinning auf Publish-Synchronität. - Vorgehen: - A/B-Vergleich pinned/unpinned - Bootstrapping für robuste Schätzwerte ## Limitationen & Fallstricke **Datenbezogene Limitationen:** - Kleine Stichprobe (N<20) limitiert Aussagekraft. - Fehlerhafte corr_id-Zuordnung kann Reads in falsche Zone klassifizieren. **Bootstrap-spezifische Limitationen:** - Bootstrap-Schätzung kann bei ungleichen Gruppengrößen verzerrt sein. - Resampling ohne Berücksichtigung korrelierter Runs kann Overconfidence erzeugen. **Kausalität & Generalisierbarkeit:** - Ergebnisse gelten nur für die getestete Architektur. - Kausale Interpretation nur eingeschränkt möglich ohne Task-Level-Trace. **Praktische Fallstricke:** - Unscharfe baseline_recalc-Marker führen zu fehlerhafter Zonenzuordnung. - Trace-Overhead durch zusätzliche Events kann selbst Timing beeinflussen. ## Nächste Schritte & Erweiterungen **Geplante Experimente:** - Erweiterung auf größere N pro Case. - Variation der CPU-Affinität innerhalb der pinned Gruppe. **Analyseziele:** - Bewertung zusätzlicher Zwischenzonen (post-clocksource_id_write). - Zeitliche Analyse vor baseline_recalc_enter. **Regression & Modellierung:** - Lineares Modell der Mischfenster-Dauer als Funktion von CPU-Last und Pinning. - Bootstrap-basierte Modellvalidierung. **Community-Beiträge:** - Austausch über Instrumentation von baseline_recalc. - Vergleichbarkeit der Marker über verschiedene Kernel-Versionen.