7.2 KiB
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.