Add bpf_instrumentation/README.md

This commit is contained in:
Mika 2025-12-21 11:58:07 +00:00
parent 43fe0f484d
commit ab7d46be53

View file

@ -0,0 +1,227 @@
# Dokumentation der eBPF-Instrumentierung zur Analyse des konstanten Offset-Verhaltens in Clocksource-Traces
## Purpose
Dokumentation der eingesetzten eBPF-Instrumentierung zur Analyse und Reproduktion eines konstanten Offsets von 1,111s in Kernel-Trace-Daten.
**Problemstellung:** In BPF-Trace-Daten wurde ein konstanter ≈1,111sOffset beobachtet. Ziel ist, die Quelle dieses Offsets innerhalb des Kernelzeitpfads nachzuweisen.
**Ziele:**
- Erfassung präziser Traces für do_clocksource_switch, read und baseline_recalc
- Identifizierung des Zeitabschnitts, in dem der konstante Offset entsteht
- Validierung durch Vergleich von Host und VM mit GPS1PPS als Referenz
## Kontext & Hintergrund
300 Runs pro Session, high-resolution time_ns-Timestamps und GPS1PPSReferenzsignale; Traces gesammelt mit eBPF-Probes an KernelFunktionen.
**Gruppierung:**
- Hostsystem
- virtuelle Maschine (KVM)
**Trace-Metadaten / zusätzliche Tags:**
- Session-ID
- Probe timestamps
- Delta-Chains (Entry→first_read, first_read→baseline_recalc)
**Domänenkontext:**
- Kernel-Timing
- Clocksource-Mechanismus
- eBPF-Tracing
- Zeitabweichungsdiagnose
**Outlier-Definition:**
- Methode: Standardabweichung der Delta-Kette
- Beschreibung: Runs mit mehr als ±3σ Abweichung vom Median gelten als Ausreißer und werden verworfen.
- Metrik: Δ(do_clocksource_switch_entry → first_read)
**Motivation:**
- Reproduzierbarkeit der Zeitpfade zwischen Host und VM sicherstellen
- Verifikation der Stabilität von eBPF gegenüber kprobe-basierten Messungen
- Eingrenzen, ob Scheduling oder Virtualisierung den Offset verursacht
## Methode / Spezifikation
**Übersicht:**
- Erfassung der Traces mittels eBPF entry/exitProbes an do_clocksource_switch, clocksource->read() und baseline_recalc
- Auswertung mit Python-Skript trace_agg.py zur Bildung von DeltaKetten
- Vergleich der Host und VMMessungen für Stabilität und Offsetverhalten
**Algorithmen / Verfahren:**
- Zeitstempelung aller Probes mit time_ns
- Berechnung von Δ(entry→first_read) und Δ(first_read→baseline_recalc)
- Bestimmung von Median und Varianz pro Session
- BootstrapResampling über 300 Runs zur Stabilitätsanalyse
### Bootstrap-Übersicht
Nichtparametrisches Bootstrap über RunMittelwerte, 300 Stichproben pro Umgebung.
**Zielgrößen:**
- MedianStabilität
- VarianzAbschätzung
- Konfidenzintervalle der DeltaKette
### Resampling-Setup
- Hostsystem
- VM (KVM)
**Stichprobeneinheit:** Einzelne TraceSessions mit vollständiger DeltaKette
**Resampling-Schema:**
- Bootstrap mit Zurücklegen
- B=500 Wiederholungen
**Konfidenzintervalle:**
- Niveau: 0.95
- Typ: Percentile Bootstrap CI
- Ableitung: Quantilbasiert aus resampleVerteilung
### Abgeleitete Effektgrößen
**Risk Difference (Differenz der Raten):**
- Definition: Nicht zutreffend für zeitkontinuierliche Metriken
**Risk Ratio:**
- Definition: Nicht relevant — es wird kein DichotomieOutcome analysiert
### C-State-Kontrolle
**Ziel:** Überprüfung, ob CPUSchlafzustände (CStates) den Offset beeinflussen.
**Vorgehen:**
- Tests mit intel_idle.max_cstate=1 auf Host und VM
- Vergleich der Δ(entry→first_read)Verteilungen
- Bewertung der Varianzänderung bei konstant bleibendem Median
## Input / Output
### Input-Anforderungen
**Hardware:**
- x86_64 Hostsystem mit aktivierbarem KVM
- GPS1PPSSignalquelle
**Software:**
- Linux Kernel ≥5.x mit eBPF-Unterstützung
- bcc/eBPFToolchain
- Python ≥3.8 mit Pandas/Numpy
**Konfiguration:**
- root-Zugriff für eBPFProbes
- Symbolzugriff auf KernelFunktionen
- synchrone SystemClocks (chronyd oder ptp4l)
### Erwartete Rohdaten
**Felder pro Run:**
- timestamp_ns
- probe_name
- session_id
- cpu_id
- delta_chain_id
**Formatbeispiele:**
- 171223.534912180 do_clocksource_switch_entry
- 171224.645912321 first_read
**Trace-Daten:**
- Format: CSV oder JSONLines mit Nanosekundenauflösung
- Hinweis: Jede Kette wird in der Aggregationsstufe zu einer DeltaKombination (entry→first_read etc.) verdichtet.
### Analyse-Ausgaben
**Pro Gruppe / pro Governor:**
- MedianΔ
- Standardabweichung
- BootstrapKonfidenzintervall
**Vergleichsausgaben:**
- Hostsystem vs VM
- C-State-Korrelation: Negativ, keine signifikante Abhängigkeit zum Offset erkannt.
- Trace-Muster: Stabile 1,111sKette in beiden Umgebungen; kein Anstieg der Varianz außer in I/OPhasen.
## Workflow / Nutzung
**Analyse-Workflow:**
- eBPFProbes deployen (entry/exitHooks an ZielFunktionen)
- Traces aufnehmen über 300 Runs pro Umgebung
- trace_agg.py ausführen zur DeltaBerechnung
- Ergebnisse aggregieren und mit GPS1PPS synchronisieren
- BootstrapAnalyse und Varianzbewertung durchführen
### Trace-Template-Anforderungen
**Ziel:** Sicherstellung einheitlicher TraceStruktur für Host und VM.
**Erforderliche Tags & Metadaten:**
- session_id
- probe_name
- timestamp_ns
- cpu_id
**trace-cmd-Setup:**
- BPFSkripte mit sudo ausführen
- BPFRingbuffergröße auf ≥64MB einstellen
- Zeitsynchronisation zwingend per NTP/PPS
**Run-Design für Contributors:**
- Mindestens 300 vollständige Runs pro Testfall
- VMKonfiguration dokumentieren (CPU, Scheduler, KernelVersion)
- Aggregationsergebnisse als Histogramneinträge exportieren
## Interpretation & erwartete Ergebnisse
**Kernbefunde:**
- Konstanter Offset von 1,111s zwischen entry und erstem read unabhängig von Umgebung
- Erhöhte Stabilität durch eBPF gegenüber kprobebasierter Messung
- CStateVerhalten hat keinen Einfluss auf den Offset
**Implikationen für Experimente:**
- Die Hauptlatenz entsteht vor dem ersten clocksource->read(), wahrscheinlich im Scheduler oder KVMEntryPfad
- Weitere Tracepunkte erforderlich zur genauen Lokalisierung
**Planungsziel:**
- Ziel: Isolation des Prozesses, der den konstanten Offset verursacht.
- Vorgehen:
- Ausweitung der BPFProbes auf scheduler_wake, hrtimer_expire, kvm_entry/kvm_exit
- Einführung perchainHistogramme in trace_agg.py
- Analyse mit mindestens 500 Runs unter identischen Bedingungen
## Limitationen & Fallstricke
**Datenbezogene Limitationen:**
- Mögliche Ungenauigkeit bei nicht synchronisierten HostVMClocks
- Abhängigkeit von Verfügbarkeit der KernelSymbole
**Bootstrap-spezifische Limitationen:**
- BootstrapCI ungenau bei geringer RunZahl (<100)
- Nichtparametrische Annahme kann systematische Zeitversätze nicht kompensieren
**Kausalität & Generalisierbarkeit:**
- Beobachtete Latenz kann hostspezifisch sein
- Ergebnisse nicht zwangsläufig auf NichtKVMSetups übertragbar
**Praktische Fallstricke:**
- Overhead durch eBPFInstrumentation kann marginale Zeitverschiebung erzeugen
- Unzureichende PPSVerbindung verfälscht Referenzalignment
## Nächste Schritte & Erweiterungen
**Geplante Experimente:**
- Einführung weiterer Probes für scheduler_wake, hrtimer_expire, kvm_entry, kvm_exit
- Erweiterung um IRQ und SoftirqPfade
**Analyseziele:**
- Validierung, ob SchedulingLatenz den Offset vollständig erklärt
- Quantifizierung der Interferenz zwischen Host und VM
**Regression & Modellierung:**
- BootstrapRegression zur Modellierung des Einflusses einzelner Pfadsegmente
- Vergleich mit analytischer Latenz aus TracegraphModellen
**Community-Beiträge:**
- Tests auf unterschiedlichen KVM/QEMUUmgebungen durch Community
- Bereitstellung von Histogrammen kvm_entry→first_read zur Vergleichanalyse