3 puntos por GN⁺ 2023-12-08 | 1 comentarios | Compartir por WhatsApp

Introducción a las herramientas de tracing

  • Presentación de diversos métodos de tracing basada en la pasión y experiencia del autor con el tracing
  • Incluye 2 herramientas de tracing nuevas e interesantes
  • La esencia del tracing: recopilar datos con marcas de tiempo generados en el sistema y visualizarlos en una UI de línea de tiempo

Visualizar datos fácilmente en una UI de línea de tiempo

  • Visualización de datos de eventos en un formato JSON simple usando Chromium Event JSON Format
  • Revisión de archivos de tracing mediante el visor de Perfetto o Catapult de Google
  • Uso de una utilidad en Python para convertir archivos de trace en enlaces clicables y compartirlos

Formatos avanzados: Fuchsia Trace Format y Perfetto Protobuf

  • Fuchsia Trace Format (FTF): un formato binario simple y compacto para archivos de trace grandes
  • Perfetto Protobuf: formato compacto compatible con más funciones, que puede generarse mediante la biblioteca Protobuf

Diversas herramientas de tracing

  • Presentación de varias herramientas de visualización de traces como Speedscope, pprof y Rerun
  • Mención de visores de profiling como Trace Compass y Firefox Profiler

Métodos de tracing

  • Introducción a métodos de tracing de bajo nivel como hardware breakpoints, perf y scripting con GDB
  • Seguimiento de la ejecución de programas usando Intel Processor Trace
  • magic-trace: herramienta para generar archivos de trace que visualizan llamadas a funciones

Profilers de tracing basados en instrumentación

  • Comparación de profilers de tracing basados en instrumentación como Tracy, Optick y Perfetto
  • Énfasis en la importancia de los datos de eventos que incluyen información adicional

eBPF

  • Introducción al subsistema eBPF para tracing usando el kernel de Linux
  • Presentación de herramientas de tracing con eBPF como BCC, bpftrace y ply

Ejemplo de eBPF: tracing de paquetes y eventos de usuario basado en Perfetto en Anthropic

  • Combinación de BCC y visualización con Perfetto para analizar la latencia de cola en código de networking
  • Tracing de eventos en espacio de usuario con eBPF y optimización del procesamiento de eventos mediante un helper en C

Instrumentación binaria

  • Introducción a métodos de instrumentación binaria usados cuando no es posible acceder al código fuente
  • Explicación de herramientas como bpftime, E9Patch y Frida

Tracing distribuido

  • Mención de soluciones como OpenTelemetry, Zipkin y Odigos para tracing entre servicios

Profilers de muestreo

  • Introducción a profilers que muestrean periódicamente el stack completo de llamadas del programa
  • Uso de UIs con eje temporal como Speedscope y Samply

Instrumentación de QEMU

  • Emulación completa y hooking de QEMU usados cuando todas las demás herramientas de tracing fallan
  • Presentación de herramientas como Cannoli, QEMU TCG Plugins y usercorn

Opinión de GN⁺

Lo más importante de este artículo es que ofrece un amplio catálogo de métodos de tracing que pueden usarse para resolver distintos tipos de problemas. Presenta diversas herramientas y métodos de tracing a un nivel fácil de entender incluso para ingenieros de software principiantes, por lo que resulta muy útil e interesante para quienes tienen interés en el tracing. En particular, el ejemplo que combina tracing con eBPF y visualización con Perfetto a través de un caso real muestra su aplicabilidad práctica y puede aportar nuevos insights a los lectores.

1 comentarios

 
GN⁺ 2023-12-08
Opiniones de Hacker News
  • Opinión del desarrollador de Spall:

    • Spall es uno de los perfiles ligeros mencionados en el artículo.
    • La publicación del autor sobre el "árbol de orden implícito" fue impresionante, y fue bueno ver la perspectiva de otra persona sobre árboles para trazas grandes.
    • Un árbol 4-ario ordenado en eytzinger no tiene problemas para manejar más de 3 mil millones de funciones incluso por encima de 165 fps.
    • Actualmente está trabajando en compresión delta de marcas de tiempo para intentar meter los eventos en un espacio más pequeño.
    • Espera poder manejar 10 mil millones de eventos con 128 GB de RAM en la compilación nativa de Spall.
  • Recomendación de ETW para quienes trabajan con aplicaciones de Windows:

    • Recomienda Event Tracing for Windows (ETW) a quienes trabajan con aplicaciones de Windows.
    • El blog de Bruce Dawson es el mejor punto de partida sobre ETW.
  • Panorama de soluciones de código abierto:

    • Es un panorama bastante bueno de las soluciones de código abierto en este espacio.
    • Falta un área importante del tracing: la depuración con viaje en el tiempo.
    • Hay soluciones interesantes que aprovechan trazas de hardware, instrumentación y reproducción determinista.
    • Sería aún mejor si hubiera una integración de visualización que permitiera volver a un punto específico del programa y reconstruir por completo la memoria para depurar.
  • Forma de contratación en Anthropic:

    • La propuesta final sobre la oportunidad de trabajar con Tristan en Anthropic es muy atractiva.
    • Tristan explica bien en qué estaría trabajando.
    • Parecería bueno que la publicación del blog tuviera más capturas de pantalla de las trazas.
  • Programas en Python y técnicas de correlación de paquetes:

    • Admiración por la técnica de encontrar correlaciones entre eventos en espacio de usuario de un programa en Python y paquetes, rastreando llamadas al sistema con argumentos específicos.
  • Experiencia del equipo que desarrolla un plugin de IDE:

    • Están desarrollando un plugin de IDE que agrega a una app en producción funciones de un depurador tradicional.
    • Permite que los usuarios analicen variables arbitrarias durante la ejecución para entender qué está pasando dentro del código.
    • Este plugin es gratuito.
  • Necesidad de la industria sobre perfilado del costo de ejecución de JavaScript:

    • Se necesita una mejor forma de perfilar de manera determinista el costo de ejecución de JavaScript.
    • Hubo un intento en Chromium usando Linux perf, pero ese cambio fue eliminado.
    • Tiene curiosidad por consejos sobre cómo medir de forma determinista el costo de JavaScript en CI.
  • Mención de dtrace y rant de bcantrill:

    • El autor menciona brevemente dtrace.
    • Recomienda revisar el rant reciente de bcantrill sobre el problema de que bpftrace pierda eventos silenciosamente y por qué dtrace no lo hace.
  • Agradecimiento por herramientas útiles:

    • Expresión de agradecimiento por las herramientas útiles mencionadas en el artículo.