Add 3_experiment_design/README.md

This commit is contained in:
Mika 2026-01-16 11:19:00 +00:00
parent 68256fc185
commit 2be27e12b2

View file

@ -0,0 +1,235 @@
# 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=1020 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.