3 pontos por GN⁺ 2023-12-08 | 1 comentários | Compartilhar no WhatsApp

Introdução às ferramentas de rastreamento

  • Apresentação de diversos métodos de rastreamento com base em paixão e experiência com tracing
  • Inclui 2 ferramentas de rastreamento novas e interessantes
  • Essência do tracing: coletar dados com timestamp gerados no sistema e visualizá-los em uma UI de linha do tempo

Visualizando dados facilmente em uma UI de linha do tempo

  • Visualização de dados de eventos em um formato JSON simples usando o Chromium Event JSON Format
  • Verificação de arquivos de trace com o visualizador Perfetto ou Catapult, do Google
  • Uso de um utilitário em Python para converter arquivos de trace em links clicáveis e compartilhá-los

Formatos avançados: Fuchsia Trace Format e Perfetto Protobuf

  • Fuchsia Trace Format (FTF): formato binário simples e compacto para arquivos de trace grandes
  • Perfetto Protobuf: formato compacto que oferece mais recursos e pode ser gerado por meio da biblioteca Protobuf

Diversas ferramentas de rastreamento

  • Apresentação de várias ferramentas de visualização de trace, como Speedscope, pprof e Rerun
  • Menção a visualizadores de profiling como Trace Compass e Firefox Profiler

Métodos de rastreamento

  • Apresentação de métodos de rastreamento de baixo nível, como breakpoints de hardware, perf e scripting com GDB
  • Rastreamento da execução de programas com Intel Processor Trace
  • magic-trace: ferramenta que gera arquivos de trace para visualizar chamadas de função

Profilers de rastreamento baseados em instrumentação

  • Comparação entre profilers de rastreamento baseados em instrumentação como Tracy, Optick e Perfetto
  • Ênfase na importância de dados de eventos que incluam informações adicionais

eBPF

  • Apresentação do subsistema eBPF para rastreamento usando o kernel Linux
  • Apresentação de ferramentas de rastreamento com eBPF como BCC, bpftrace e ply

Exemplo de eBPF: rastreamento de pacotes e eventos de usuário baseado em Perfetto na Anthropic

  • Combinação de BCC com visualização no Perfetto para analisar latência de cauda em código de rede
  • Rastreamento de eventos em espaço de usuário com eBPF e otimização do processamento de eventos por meio de um helper em C

Instrumentação binária

  • Apresentação de métodos de instrumentação binária usados quando não há acesso ao código-fonte
  • Explicação de ferramentas como bpftime, E9Patch e Frida

Rastreamento distribuído

  • Menção a soluções como OpenTelemetry, Zipkin e Odigos para rastreamento entre serviços

Profilers por amostragem

  • Apresentação de profilers que amostram periodicamente toda a pilha de chamadas do programa
  • Uso de UIs com eixo temporal, como Speedscope e Samply

Instrumentação com QEMU

  • Uso da emulação completa e de hooks do QEMU quando todas as outras ferramentas de rastreamento falham
  • Apresentação de ferramentas como Cannoli, QEMU TCG Plugins e usercorn

Opinião do GN⁺

O ponto mais importante deste texto é que ele oferece um catálogo amplo de métodos de rastreamento que podem ser usados para resolver diferentes tipos de problemas. Ele apresenta várias ferramentas e técnicas de tracing em um nível fácil de entender até mesmo para engenheiros de software iniciantes, o que torna o conteúdo muito útil e interessante para quem se interessa pelo tema. Em especial, o exemplo que combina tracing com eBPF e visualização no Perfetto por meio de um caso real mostra a aplicabilidade prática no trabalho e pode trazer novos insights aos leitores.

1 comentários

 
GN⁺ 2023-12-08
Comentário no Hacker News
  • Opinião do desenvolvedor do Spall:

    • O Spall é um dos perfiladores leves mencionados no texto.
    • O post do autor sobre a "árvore de ordem implícita" foi impressionante, e foi bom ver a perspectiva de outra pessoa sobre árvores para traces grandes.
    • A árvore quaternária em ordem eytzinger não tem problema para lidar com mais de 3 bilhões de funções mesmo acima de 165 fps.
    • No momento, ele está trabalhando em compressão delta de timestamp para tentar encaixar eventos em um espaço menor.
    • Ele espera que, no build nativo do Spall, seja possível processar 10 bilhões de eventos com 128 GB de RAM.
  • Recomendação de ETW para quem trabalha com aplicações Windows:

    • Recomenda Event Tracing for Windows (ETW) para quem trabalha com aplicações Windows.
    • O blog do Bruce Dawson é o melhor ponto de partida sobre ETW.
  • Visão geral sobre soluções open source:

    • É uma visão geral bastante boa das soluções open source nesse espaço.
    • Está faltando a importante área de tracing de depuração com viagem no tempo.
    • Existem soluções interessantes que aproveitam hardware trace, instrumentação e replay determinístico.
    • Seria ainda melhor se houvesse integração visual para depurar voltando a um ponto específico do programa e reconstruindo a memória como um todo.
  • Forma de contratação na Anthropic:

    • A sugestão final sobre a oportunidade de trabalhar com Tristan na Anthropic é muito atraente.
    • Tristan explica bem no que vai trabalhar.
    • Parece que seria bom ter mais capturas de tela dos traces no post.
  • Técnica de correlação entre programas Python e pacotes:

    • Admiração pela técnica de rastrear chamadas de sistema com argumentos específicos para encontrar correlações entre eventos em user space de programas Python e pacotes.
  • Experiência da equipe de desenvolvimento de plugin de IDE:

    • Está desenvolvendo um plugin de IDE que adiciona, em aplicativos em produção, recursos de um depurador tradicional.
    • Isso permite que o usuário analise variáveis arbitrárias durante a execução para entender o que está acontecendo no código.
    • O plugin é gratuito.
  • Necessidade do setor por profiling do custo de execução de JavaScript:

    • Há necessidade de uma forma melhor de fazer profiling determinístico do custo de execução de JavaScript.
    • Houve uma tentativa no Chromium usando Linux perf, mas essa mudança foi removida.
    • Há curiosidade sobre dicas de como medir de forma determinística o custo de JavaScript em CI.
  • Menção ao dtrace e rant do bcantrill:

    • O autor menciona dtrace brevemente.
    • Recomenda conferir o rant recente do bcantrill sobre o problema de o bpftrace perder eventos silenciosamente e por que o dtrace não faz isso.
  • Agradecimento pelas ferramentas úteis:

    • Expressão de agradecimento pelas ferramentas úteis mencionadas no texto.