- Strobelight é o orquestrador de profiling da Meta, que combina várias tecnologias open source para ajudar engenheiros a melhorar desempenho e uso de recursos
- Após a adoção, alcançou um efeito de economia anual de capacidade equivalente a cerca de 15.000 servidores
Como o Strobelight funciona
- Strobelight não é um único profiler, mas um orquestrador que coordena vários profilers
- Ele roda em todos os hosts de produção da Meta e coleta os seguintes indicadores de desempenho
- uso de CPU
- alocação de memória
- outras métricas de desempenho
- Com isso, os engenheiros conseguem identificar gargalos de desempenho e desperdício de recursos, além de otimizar o código
Papel e necessidade dos profilers
- Profilers são ferramentas de análise estatística baseadas em amostragem
- Ex.: em eventos de ciclos de CPU, é possível analisar a pilha de chamadas de funções e o tempo em que as funções executam na CPU
- Eles ajudam a melhorar o desempenho ao permitir uma visão detalhada do estado de execução do código
Os diversos profilers do Strobelight
- O Strobelight inclui um total de 42 profilers
- profiler de memória baseado em
jemalloc
- profiler de contagem de chamadas de função
- profilers baseados em eventos por linguagem, como Python, Java e Erlang
- profiler de AI/GPU
- profiler de rastreamento de tempo off-CPU
- profiler de rastreamento de latência de requisições de serviço
- As ferramentas de profiling podem ser executadas pela linha de comando ou pela interface web
- É possível configurar profiling contínuo e profiling acionado por gatilhos quando condições específicas ocorrem
Suporte a profilers ad-hoc
- Para adicionar um novo profiler, engenheiros precisam modificar e implantar vários trechos de código
- É possível adicionar rapidamente um profiler escrevendo scripts
bpftrace
- Assim, engenheiros conseguem rastrear e analisar rapidamente problemas de desempenho em funções específicas
Prevenção de conflitos entre profilers
- O Strobelight tem embutido um sistema para evitar conflitos de recursos entre profilers
- Aplica regras como proibir o uso de outros contadores PMU durante o rastreamento de ciclos de CPU
- Minimiza conflitos de recursos por meio de um sistema de execução simultânea e gerenciamento de filas
Profiling automático e amostragem dinâmica
- O Strobelight executa profiling automaticamente em todos os serviços da Meta
- Ajusta automaticamente a frequência e a duração da amostragem de acordo com a carga de trabalho de cada serviço
- Corrige automaticamente a probabilidade de amostragem e a frequência de coleta para fornecer dados consistentes
Casos de otimização de desempenho e economia de capacidade
Profiler LBR
- Suporta amostragem de Last Branch Record (LBR), um recurso de hardware da Intel
- É usado em FDO (Feedback Directed Optimization) para melhorar o desempenho de binários
- Nos 200 principais serviços da Meta, reduziu em até 20% o uso de ciclos de CPU
Profiler de eventos
- Executa funções semelhantes à ferramenta
perf do Linux
- Faz amostragem e visualização de eventos de desempenho, como ciclos de CPU e faltas de cache L3
- Permite detectar e corrigir antecipadamente problemas que surgem nos caminhos de código
Stack Schemas e Strobemeta
Stack Schemas
- Adiciona tags à pilha de chamadas de funções para melhorar a visibilidade
- Permite remover funções desnecessárias em filtros e visualizações
Strobemeta
- Adiciona metadados dinâmicos à pilha de chamadas em tempo de execução
- Fornece detalhes relacionados a endpoint de serviço, latência e outros dados
Processamento de symbolization
- Converte endereços virtuais de binários em nomes de funções e informações de código-fonte
- Baseado em tecnologias open source como DWARF, ELF, gsym e blazesym
- O trabalho de symbolization é feito após o profiling para evitar queda de desempenho
Ferramentas de visualização de dados do Strobelight
Scuba
- Ferramenta de consulta e visualização baseada em SQL
- Fornece séries temporais, distribuição, flame graphs e outros recursos para dados de profiling
Tracery
- Ferramenta de visualização temporal de dados compostos de profiling
- Permite visualização integrada de spans de requisições de serviço, ciclos de CPU e dados off-CPU
Caso "Biggest Ampersand"
- Um engenheiro descobriu um problema de cópia em
std::vector usando dados do Strobelight
- Adição de
& após a palavra-chave auto → evita cópias desnecessárias
- Como resultado, houve uma economia equivalente a cerca de 15.000 servidores por ano
Open source
1 comentários
Comentários no Hacker News