bpf_offset_analysis/bpf_instrumentation/README.md

227 lines
7.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_entryfirst_read zur Vergleichanalyse