8 points par GN⁺ 2025-03-11 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2025-03-11
Avis sur Hacker News
  • Recommande Pyroscope de Grafana pour le profiling continu ; utilisé en Go et cela fonctionne bien
    • Prend en charge plusieurs langages et repose sur eBPF
  • Le code C++ de Meta/FB est plus facile à lire que celui d'autres anciennes grandes entreprises technologiques
  • Strobelight est une bouée de sauvetage, surtout pour les services à fort qps, car il permet de voir facilement ce qui mérite d'être optimisé
  • Meta inclut des frame pointers dans ses binaires en espace utilisateur, ce qui permet de parcourir la pile
    • Sinon, il aurait fallu utiliser des méthodes complexes et inefficaces
  • Affirme qu'il existe un profileur d'événements pour les langages non natifs (par ex. Python)
    • On ne voit pas clairement comment l'état de Python est lu
  • Le dépôt GitHub de Strobelight est encore assez basique ; on se demande quand il sera mis à jour
  • Le nom semble faire référence à l'usage d'un stroboscope pour examiner un mouvement périodique rapide
  • J'aimerais que des projets open source soient intégrés de cette façon
    • L'interface utilisateur interne de Facebook a l'air correcte
  • La modélisation du coût de calcul est difficile
    • Ce serait amusant d'appliquer la mécanique des fluides aux besoins de calcul
  • Pense que les principaux concurrents d'AWS/Azure/GCP sont en difficulté à cause du manque de ce type d'outils
    • Chez Microsoft, quelqu'un a créé un outil pour suivre le trafic réseau, et c'était très utile pour le débogage
    • J'aborde tout ce qui vient de Meta avec scepticisme
  • Il s'agit de profiling de performance
    • En voyant le titre et le domaine, j'ai cru qu'il s'agissait de profilage des utilisateurs
  • Des efforts sont en cours pour rendre Strobelight accessible à tous via Parca et Polar Signals
    • Une partie existe déjà, et davantage arrivera cette année