- Strobelight ist Metas Profiling-Orchestrator, der mehrere Open-Source-Technologien kombiniert, um Ingenieurinnen und Ingenieuren dabei zu helfen, Performance und Ressourcennutzung zu verbessern
- Nach der Einführung wurde eine jährliche Kapazitätseinsparung im Umfang von etwa 15.000 Servern erreicht
Funktionsweise von Strobelight
- Strobelight ist kein einzelner Profiler, sondern ein Orchestrator, der mehrere Profiler koordiniert
- Es läuft auf allen Produktions-Hosts von Meta und sammelt die folgenden Performance-Metriken
- CPU-Auslastung
- Speicherallokation
- weitere Performance-Metriken
- Damit können Ingenieurinnen und Ingenieure Performance-Engpässe und Ressourcenverschwendung identifizieren und den Code optimieren
Rolle und Notwendigkeit von Profilern
- Profiler sind statistische Analysewerkzeuge auf Sampling-Basis
- Beispiel: Bei CPU-Cycle-Events lassen sich Funktionsaufruf-Stacks und die Zeit analysieren, in der Funktionen auf der CPU ausgeführt werden
- Sie ermöglichen ein detailliertes Verständnis des Laufzeitverhaltens von Code und tragen so zur Performance-Verbesserung bei
Die verschiedenen Profiler in Strobelight
- Strobelight umfasst insgesamt 42 Profiler
jemalloc-basierter Speicher-Profiler
- Profiler für die Anzahl von Funktionsaufrufen
- ereignisbasierte Profiler für einzelne Sprachen wie Python, Java und Erlang
- AI/GPU-Profiler
- Profiler zur Verfolgung von Off-CPU-Zeit
- Profiler zur Verfolgung der Latenz von Service-Anfragen
- Die Profiling-Tools können über Kommandozeilen-Tools oder eine Web-UI ausgeführt werden
- Es lassen sich Continuous Profiling sowie triggerbasiertes Profiling für das Auftreten bestimmter Bedingungen einrichten
Unterstützung für Ad-hoc-Profiler
- Wenn Ingenieurinnen und Ingenieure neue Profiler hinzufügen wollen, sind normalerweise mehrere Code-Änderungen und Deployments nötig
- Durch das Schreiben von
bpftrace-Skripten können Profiler schnell hinzugefügt werden
- So lassen sich Performance-Probleme bestimmter Funktionen zügig nachverfolgen und analysieren
Vermeidung von Konflikten zwischen Profilern
- Strobelight enthält ein eingebautes System zur Vermeidung von Ressourcenkonflikten zwischen Profilern
- Es gelten Regeln wie etwa, dass während der Verfolgung von CPU-Cycles keine anderen PMU-Counter verwendet werden dürfen
- Durch gleichzeitige Ausführung und ein Queue-Management-System werden Ressourcenkonflikte minimiert
Automatisches Profiling und dynamisches Sampling
- Strobelight führt Profiling automatisch für alle Meta-Dienste aus
- Sampling-Frequenz und -Dauer werden je nach Workload des jeweiligen Dienstes automatisch angepasst
- Sampling-Wahrscheinlichkeit und Erfassungsfrequenz werden automatisch kalibriert, um konsistente Daten bereitzustellen
Performance-Optimierung und Beispiele für Kapazitätseinsparungen
LBR-Profiler
- Unterstützt Sampling mit der Intel-Hardwarefunktion Last Branch Record (LBR)
- Wird in FDO (Feedback Directed Optimization) verwendet, um die Performance von Binärdateien zu verbessern
- Bei Metas 200 wichtigsten Diensten wurde die CPU-Cycle-Nutzung um bis zu 20 % reduziert
Event-Profiler
- Bietet ähnliche Funktionen wie das Linux-Tool
perf
- Sampelt und visualisiert Performance-Events wie CPU-Cycles oder L3-Cache-Misses
- Probleme in Code-Pfaden können frühzeitig erkannt und behoben werden
Stack Schemas und Strobemeta
Stack Schemas
- Erhöhen die Sichtbarkeit, indem sie Funktionsaufruf-Stacks mit Tags versehen
- In Filterung und Visualisierung lassen sich unnötige Funktionen ausblenden
Strobemeta
- Fügt zur Laufzeit dynamische Metadaten zu Aufruf-Stacks hinzu
- Liefert Detailinformationen zu Service-Endpunkten, Latenzzeiten und mehr
Symbolisierung
- Wandelt virtuelle Adressen in Binärdateien in Funktionsnamen und Quellcode-Informationen um
- Basiert auf Open-Source-Technologien wie DWARF, ELF, gsym und blazesym
- Die Symbolisierung erfolgt nach dem Profiling, um Performance-Einbußen zu vermeiden
Tools zur Visualisierung von Strobelight-Daten
Scuba
- SQL-basiertes Tool für Abfragen und Visualisierung
- Bietet für Profiling-Daten Zeitreihen, Verteilungen, Flame Graphs und mehr
Tracery
- Visualisierungstool für komplexe, zeitbasierte Profiling-Daten
- Kann Service-Request-Spans, CPU-Cycles und Off-CPU-Daten integriert visualisieren
Der Fall „Biggest Ampersand“
- Ingenieurinnen und Ingenieure entdeckten mithilfe von Strobelight-Daten ein Kopierproblem bei
std::vector
& hinter dem Schlüsselwort auto hinzufügen → unnötige Kopien vermeiden
- Das führte letztlich zu einer Einsparung im Umfang von rund 15.000 Servern pro Jahr
Open Source
1 Kommentare
Hacker-News-Kommentare