- Strobelight est l’orchestrateur de profiling de Meta ; il combine plusieurs technologies open source pour aider les ingénieurs à améliorer les performances et l’utilisation des ressources
- Après son déploiement, il a permis d’économiser l’équivalent d’environ 15 000 serveurs de capacité par an
Fonctionnement de Strobelight
- Strobelight n’est pas un profiler unique, mais un orchestrateur qui coordonne plusieurs profilers
- Il s’exécute sur tous les hôtes de production de Meta et collecte les indicateurs de performance suivants
- Utilisation CPU
- Allocations mémoire
- Autres métriques de performance
- Les ingénieurs peuvent ainsi identifier les goulets d’étranglement de performance et le gaspillage de ressources, puis optimiser le code
Rôle et nécessité des profilers
- Un profiler est un outil d’analyse statistique basé sur l’échantillonnage
- Exemple : il peut analyser la pile d’appels de fonctions lors des événements de cycles CPU et le temps d’exécution des fonctions sur le CPU
- Il permet de comprendre en détail l’état d’exécution du code et contribue à l’amélioration des performances
Les différents profilers de Strobelight
- Strobelight inclut au total 42 profilers
- Profiler mémoire basé sur
jemalloc
- Profiler du nombre d’appels de fonctions
- Profilers événementiels par langage pour Python, Java, Erlang, etc.
- Profilers IA/GPU
- Profiler de suivi du temps off-CPU
- Profiler de suivi de la latence des requêtes de service
- Les outils de profiling peuvent être exécutés depuis un outil en ligne de commande ou une interface web
- Il est possible de configurer un profiling continu ainsi qu’un profiling déclenché lorsque certaines conditions surviennent
Prise en charge des profilers ad hoc
- Pour qu’un ingénieur ajoute un nouveau profiler, plusieurs modifications de code et déploiements sont normalement nécessaires
- Il est possible d’ajouter rapidement un profiler en écrivant un script
bpftrace
- Les ingénieurs peuvent ainsi suivre et analyser rapidement les problèmes de performance d’une fonction donnée
Prévention des conflits entre profilers
- Strobelight intègre un système empêchant les conflits de ressources entre profilers
- Il applique des règles, par exemple l’interdiction d’utiliser d’autres compteurs PMU pendant le suivi des cycles CPU
- Un système d’exécution simultanée et de gestion de file d’attente permet de minimiser les conflits de ressources
Profiling automatique et échantillonnage dynamique
- Strobelight exécute automatiquement le profiling sur tous les services de Meta
- La fréquence et la durée d’échantillonnage sont automatiquement ajustées selon la charge de travail de chaque service
- La probabilité d’échantillonnage et la fréquence de collecte sont automatiquement recalibrées afin de fournir des données cohérentes
Exemples d’optimisation des performances et de réduction de capacité
Profiler LBR
- Prend en charge l’échantillonnage Last Branch Record (LBR), une fonctionnalité matérielle d’Intel
- Utilisé dans la FDO (Feedback Directed Optimization) pour améliorer les performances des binaires
- A permis de réduire jusqu’à 20 % l’utilisation des cycles CPU sur les 200 principaux services de Meta
Profiler d’événements
- Offre des fonctionnalités similaires à l’outil Linux
perf
- Échantillonne et visualise des événements de performance (cycles CPU, défauts de cache L3, etc.)
- Permet de détecter et corriger en amont les problèmes qui surviennent sur les chemins de code
Stack Schemas et Strobemeta
Stack Schemas
- Améliorent la visibilité en ajoutant des tags aux piles d’appels de fonctions
- Permettent de retirer les fonctions inutiles lors du filtrage et de la visualisation
Strobemeta
- Ajoute des métadonnées dynamiques à la pile d’appels au moment de l’exécution
- Fournit des détails liés aux endpoints de service, à la latence, etc.
Symbolisation
- Convertit les adresses virtuelles des binaires en noms de fonctions et informations de code source
- Repose sur des technologies open source comme DWARF, ELF, gsym et blazesym
- La symbolisation est effectuée après le profiling afin d’éviter toute dégradation des performances
Outils de visualisation des données Strobelight
Scuba
- Outil de requête et de visualisation basé sur SQL
- Propose des séries temporelles, des distributions, des flame graphs, etc. pour les données de profiling
Tracery
- Outil de visualisation de données de profiling composites basées sur le temps
- Permet de visualiser de manière intégrée les spans de requêtes de service, les cycles CPU et les données off-CPU
Cas du « Biggest Ampersand »
- Des ingénieurs ont découvert grâce aux données de Strobelight un problème de copie avec
std::vector
- Ajout de
& après le mot-clé auto → évite des copies inutiles
- Résultat : une économie équivalente à environ 15 000 serveurs par an
Open source
1 commentaires
Avis sur Hacker News