bpf_offset_analysis/bpf_instrumentation/README.md

7.4 KiB
Raw Blame History

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