227 lines
7.4 KiB
Markdown
227 lines
7.4 KiB
Markdown
# 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,111 s in Kernel-Trace-Daten.
|
||
|
||
**Problemstellung:** In BPF-Trace-Daten wurde ein konstanter ≈1,111 s‑Offset 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 GPS‑1PPS als Referenz
|
||
|
||
## Kontext & Hintergrund
|
||
|
||
300 Runs pro Session, high-resolution time_ns-Timestamps und GPS‑1PPS‑Referenzsignale; Traces gesammelt mit eBPF-Probes an Kernel‑Funktionen.
|
||
|
||
**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/exit‑Probes an do_clocksource_switch, clocksource->read() und baseline_recalc
|
||
- Auswertung mit Python-Skript trace_agg.py zur Bildung von Delta‑Ketten
|
||
- Vergleich der Host‑ und VM‑Messungen 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
|
||
- Bootstrap‑Resampling über 300 Runs zur Stabilitätsanalyse
|
||
|
||
### Bootstrap-Übersicht
|
||
|
||
Nichtparametrisches Bootstrap über Run‑Mittelwerte, 300 Stichproben pro Umgebung.
|
||
|
||
**Zielgrößen:**
|
||
- Median‑Stabilität
|
||
- Varianz‑Abschätzung
|
||
- Konfidenzintervalle der Delta‑Kette
|
||
|
||
### Resampling-Setup
|
||
|
||
- Hostsystem
|
||
- VM (KVM)
|
||
|
||
**Stichprobeneinheit:** Einzelne Trace‑Sessions mit vollständiger Delta‑Kette
|
||
|
||
**Resampling-Schema:**
|
||
- Bootstrap mit Zurücklegen
|
||
- B=500 Wiederholungen
|
||
|
||
**Konfidenzintervalle:**
|
||
- Niveau: 0.95
|
||
- Typ: Percentile Bootstrap CI
|
||
- Ableitung: Quantilbasiert aus resample‑Verteilung
|
||
|
||
### Abgeleitete Effektgrößen
|
||
|
||
**Risk Difference (Differenz der Raten):**
|
||
- Definition: Nicht zutreffend für zeitkontinuierliche Metriken
|
||
|
||
**Risk Ratio:**
|
||
- Definition: Nicht relevant — es wird kein Dichotomie‑Outcome analysiert
|
||
|
||
### C-State-Kontrolle
|
||
|
||
**Ziel:** Überprüfung, ob CPU‑Schlafzustände (C‑States) 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
|
||
- GPS‑1PPS‑Signalquelle
|
||
|
||
**Software:**
|
||
- Linux Kernel ≥5.x mit eBPF-Unterstützung
|
||
- bcc/eBPF‑Toolchain
|
||
- Python ≥3.8 mit Pandas/Numpy
|
||
|
||
**Konfiguration:**
|
||
- root-Zugriff für eBPF‑Probes
|
||
- Symbolzugriff auf Kernel‑Funktionen
|
||
- synchrone System‑Clocks (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 JSON‑Lines mit Nanosekundenauflösung
|
||
- Hinweis: Jede Kette wird in der Aggregationsstufe zu einer Delta‑Kombination (entry→first_read etc.) verdichtet.
|
||
|
||
### Analyse-Ausgaben
|
||
|
||
**Pro Gruppe / pro Governor:**
|
||
- Median‑Δ
|
||
- Standardabweichung
|
||
- Bootstrap‑Konfidenzintervall
|
||
|
||
**Vergleichsausgaben:**
|
||
- Hostsystem vs VM
|
||
|
||
- C-State-Korrelation: Negativ, keine signifikante Abhängigkeit zum Offset erkannt.
|
||
- Trace-Muster: Stabile 1,111 s‑Kette in beiden Umgebungen; kein Anstieg der Varianz außer in I/O‑Phasen.
|
||
|
||
## Workflow / Nutzung
|
||
|
||
**Analyse-Workflow:**
|
||
- eBPF‑Probes deployen (entry/exit‑Hooks an Ziel‑Funktionen)
|
||
- Traces aufnehmen über 300 Runs pro Umgebung
|
||
- trace_agg.py ausführen zur Delta‑Berechnung
|
||
- Ergebnisse aggregieren und mit GPS‑1PPS synchronisieren
|
||
- Bootstrap‑Analyse und Varianzbewertung durchführen
|
||
|
||
### Trace-Template-Anforderungen
|
||
|
||
**Ziel:** Sicherstellung einheitlicher Trace‑Struktur für Host und VM.
|
||
|
||
**Erforderliche Tags & Metadaten:**
|
||
- session_id
|
||
- probe_name
|
||
- timestamp_ns
|
||
- cpu_id
|
||
|
||
**trace-cmd-Setup:**
|
||
- BPF‑Skripte mit sudo ausführen
|
||
- BPF‑Ringbuffergröße auf ≥64 MB einstellen
|
||
- Zeitsynchronisation zwingend per NTP/PPS
|
||
|
||
**Run-Design für Contributors:**
|
||
- Mindestens 300 vollständige Runs pro Testfall
|
||
- VM‑Konfiguration dokumentieren (CPU, Scheduler, Kernel‑Version)
|
||
- Aggregationsergebnisse als Histogramneinträge exportieren
|
||
|
||
## Interpretation & erwartete Ergebnisse
|
||
|
||
**Kernbefunde:**
|
||
- Konstanter Offset von 1,111 s zwischen entry und erstem read unabhängig von Umgebung
|
||
- Erhöhte Stabilität durch eBPF gegenüber kprobe‑basierter Messung
|
||
- C‑State‑Verhalten hat keinen Einfluss auf den Offset
|
||
|
||
**Implikationen für Experimente:**
|
||
- Die Hauptlatenz entsteht vor dem ersten clocksource->read(), wahrscheinlich im Scheduler‑ oder KVM‑Entry‑Pfad
|
||
- Weitere Tracepunkte erforderlich zur genauen Lokalisierung
|
||
|
||
**Planungsziel:**
|
||
- Ziel: Isolation des Prozesses, der den konstanten Offset verursacht.
|
||
- Vorgehen:
|
||
- Ausweitung der BPF‑Probes auf scheduler_wake, hrtimer_expire, kvm_entry/kvm_exit
|
||
- Einführung per‑chain‑Histogramme in trace_agg.py
|
||
- Analyse mit mindestens 500 Runs unter identischen Bedingungen
|
||
|
||
## Limitationen & Fallstricke
|
||
|
||
**Datenbezogene Limitationen:**
|
||
- Mögliche Ungenauigkeit bei nicht synchronisierten Host‑VM‑Clocks
|
||
- Abhängigkeit von Verfügbarkeit der Kernel‑Symbole
|
||
|
||
**Bootstrap-spezifische Limitationen:**
|
||
- Bootstrap‑CI ungenau bei geringer Run‑Zahl (<100)
|
||
- Nichtparametrische Annahme kann systematische Zeitversätze nicht kompensieren
|
||
|
||
**Kausalität & Generalisierbarkeit:**
|
||
- Beobachtete Latenz kann host‑spezifisch sein
|
||
- Ergebnisse nicht zwangsläufig auf Nicht‑KVM‑Setups übertragbar
|
||
|
||
**Praktische Fallstricke:**
|
||
- Overhead durch eBPF‑Instrumentation kann marginale Zeitverschiebung erzeugen
|
||
- Unzureichende PPS‑Verbindung 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 Softirq‑Pfade
|
||
|
||
**Analyseziele:**
|
||
- Validierung, ob Scheduling‑Latenz den Offset vollständig erklärt
|
||
- Quantifizierung der Interferenz zwischen Host und VM
|
||
|
||
**Regression & Modellierung:**
|
||
- Bootstrap‑Regression zur Modellierung des Einflusses einzelner Pfadsegmente
|
||
- Vergleich mit analytischer Latenz aus Tracegraph‑Modellen
|
||
|
||
**Community-Beiträge:**
|
||
- Tests auf unterschiedlichen KVM‑/QEMU‑Umgebungen durch Community
|
||
- Bereitstellung von Histogrammen kvm_entry→first_read zur Vergleichanalyse
|