- Strobelight es el orquestador de profiling de Meta, que combina varias tecnologías de código abierto para ayudar a los ingenieros a mejorar el rendimiento y el uso de recursos
- Tras su adopción, logró un efecto de ahorro anual de capacidad equivalente a 15,000 servidores
Cómo funciona Strobelight
- Strobelight no es un profiler único, sino un orquestador que coordina varios profilers
- Se ejecuta en todos los hosts de producción de Meta y recopila las siguientes métricas de rendimiento
- Uso de CPU
- Asignación de memoria
- Otras métricas de rendimiento
- Con esto, los ingenieros pueden identificar cuellos de botella de rendimiento y desperdicio de recursos, y optimizar el código
Rol y necesidad de los profilers
- Un profiler es una herramienta de análisis estadístico basada en muestreo
- Ejemplo: en eventos de ciclos de CPU, puede analizar la pila de llamadas de funciones y el tiempo que una función se ejecuta en la CPU
- Ayuda a mejorar el rendimiento al permitir entender en detalle el estado de ejecución del código
Los distintos profilers de Strobelight
- Strobelight incluye un total de 42 profilers
- Profiler de memoria basado en
jemalloc
- Profiler de número de llamadas a funciones
- Profilers basados en eventos por lenguaje, como Python, Java y Erlang
- Profilers de AI/GPU
- Profiler de seguimiento de tiempo off-CPU
- Profiler de seguimiento de latencia de solicitudes de servicio
- Las herramientas de profiling pueden ejecutarse desde la línea de comandos o desde una web UI
- Es posible configurar profiling continuo y profiling activado por disparadores cuando ocurren condiciones específicas
Soporte para profilers ad hoc
- Para que un ingeniero agregue un nuevo profiler, normalmente se requieren varias modificaciones de código y despliegues
- Se puede agregar rápidamente un profiler escribiendo un script de
bpftrace
- Esto permite a los ingenieros rastrear y analizar rápidamente problemas de rendimiento en funciones específicas
Prevención de conflictos entre profilers
- Strobelight incorpora un sistema para evitar conflictos de recursos entre profilers
- Aplica reglas como prohibir el uso de otros contadores PMU mientras se rastrean ciclos de CPU
- Minimiza los conflictos de recursos mediante un sistema de ejecución concurrente y administración de colas de espera
Profiling automático y muestreo dinámico
- Strobelight ejecuta profiling automáticamente en todos los servicios de Meta
- Ajusta automáticamente la frecuencia y la duración del muestreo según la carga de trabajo de cada servicio
- Corrige automáticamente la probabilidad de muestreo y la frecuencia de recolección para ofrecer datos consistentes
Casos de optimización de rendimiento y ahorro de capacidad
Profiler LBR
- Soporta muestreo de Last Branch Record (LBR), una función de hardware de Intel
- Se usa en FDO (Feedback Directed Optimization) para mejorar el rendimiento de los binarios
- En los 200 principales servicios de Meta, logró una reducción de hasta 20% en el uso de ciclos de CPU
Profiler de eventos
- Ofrece funciones similares a la herramienta
perf de Linux
- Realiza muestreo y visualización de eventos de rendimiento (ciclos de CPU, fallos de caché L3, etc.)
- Permite detectar y corregir de antemano problemas que ocurren en rutas de código
Stack Schemas y Strobemeta
Stack Schemas
- Mejora la visibilidad añadiendo etiquetas a la pila de llamadas de funciones
- Permite eliminar funciones innecesarias en el filtrado y la visualización
Strobemeta
- Agrega metadatos dinámicos a la pila de llamadas en tiempo de ejecución
- Proporciona detalles relacionados con endpoints de servicio, latencia y más
Procesamiento de simbolización (Symbolization)
- Convierte las direcciones virtuales de un binario en nombres de funciones e información del código fuente
- Está basado en tecnologías de código abierto como DWARF, ELF, gsym y blazesym
- La simbolización se realiza después del profiling para evitar degradación del rendimiento
Herramientas de visualización de datos de Strobelight
Scuba
- Herramienta de consultas y visualización basada en SQL
- Ofrece series temporales, distribuciones, flame graphs y más sobre los datos de profiling
Tracery
- Herramienta de visualización de datos de profiling compuestos basados en tiempo
- Permite visualizar de forma integrada spans de solicitudes de servicio, ciclos de CPU y datos off-CPU
Caso de "Biggest Ampersand"
- Un ingeniero descubrió, mediante datos de Strobelight, un problema de copia en
std::vector
- Agregar
& después de la palabra clave auto → evita copias innecesarias
- Como resultado, se logró un ahorro equivalente a aproximadamente 15,000 servidores al año
Código abierto
1 comentarios
Opiniones de Hacker News