Add 3_experiment_design/README.md
This commit is contained in:
parent
68256fc185
commit
2be27e12b2
1 changed files with 235 additions and 0 deletions
235
3_experiment_design/README.md
Normal file
235
3_experiment_design/README.md
Normal 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=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.
|
||||
Loading…
Reference in a new issue