3 puntos por GN⁺ 2024-03-18 | 1 comentarios | Compartir por WhatsApp

El sitio de Brendan: introducción

  • La página principal del blog de Brendan Gregg cubre diversos temas sobre rendimiento de sistemas, herramientas BPF, rendimiento en Linux y más.
  • Entre las publicaciones recientes se incluyen el regreso de los frame pointers, un documental sobre eBPF y por qué las herramientas de observabilidad con eBPF no son herramientas de seguridad.
  • Además del contenido técnico, el blog también comparte varias conferencias y presentaciones en las que Brendan ha participado.

El regreso de los frame pointers

  • En sistemas sin frame pointers, el rastreo de pila se detiene en la capa de libc, por lo que faltan los frames de la aplicación.
  • Fedora y Ubuntu resolvieron este problema al lanzar versiones compiladas de libc que incluyen frame pointers por defecto.
  • Los frame pointers son usados por perfiles y depuradores externos, y se visualizan mediante flame graphs.

¿Qué es un frame pointer?

  • Según la documentación ABI de x86-64, el registro de CPU %rbp puede usarse como el "base pointer" de un stack frame.
  • Esta técnica se usa ampliamente para el rastreo de pila, y la utilizan Linux perf y eBPF, entre otros.

2004: eliminación de los frame pointers

  • En 2004, el desarrollador de gcc Roger Sayle impulsó un cambio para dejar de generar frame pointers.
  • Este cambio mejoró el rendimiento, pero con la llegada de eBPF hoy algunos depuradores/profilers tienen problemas por esa razón.

2005-2023: el invierno de los profilers rotos

  • El cambio para eliminar frame pointers también se aplicó a x86-64, pero esta arquitectura tiene más registros, así que el beneficio no fue grande.
  • Como resultado, muchos depuradores/profilers dejaron de funcionar correctamente.

2014: Java in Flames

  • Al unirse a Netflix, descubrió que la falta de soporte de frame pointers en Java rompía todas las pilas de las aplicaciones.
  • Para resolverlo, desarrolló una corrección para el compilador c2 de la JVM.

2015-2020: sobrecarga

  • La sobrecarga de rendimiento de agregar frame pointers a todo suele ser menor al 1%.
  • En ciertos microbenchmarks, la sobrecarga puede llegar al 10%.

2022: intento upstream

  • Se da a entender que grandes empresas como Google, Meta y Netflix ya habían habilitado frame pointers en todo.
  • Hay varias dificultades para convertir este cambio en el valor predeterminado de forma que beneficie a todos.

2023, 2024: frame pointers en Fedora y Ubuntu

  • Fedora aceptó una propuesta para volver a habilitar los frame pointers.
  • Ubuntu también habilitó frame pointers por defecto en la versión 24.04 LTS.

Después de 2034: más allá de los frame pointers

  • Hay varias formas de rastrear stacks, incluyendo LBR, BTS, AET, DWARF, eBPF stack walking, ORC, SFrames y shadow stacks.
  • En el futuro, SFrames o shadow stacks podrían usarse para todo el rastreo de pila.

Conclusión

  • El regreso de los frame pointers hace que los flame graphs de CPU sean más significativos, permite que los flame graphs Off-CPU funcionen por primera vez y abre otras posibilidades nuevas.
  • También es una victoria para los profilers continuos, ya que ya no necesitan convencer a los clientes de cambiar el OS para que el profiler funcione por completo.

Opinión de GN⁺

  • El regreso de los frame pointers parece que será de gran ayuda para el análisis de rendimiento del sistema y la depuración. En particular, es una herramienta esencial para diagnosticar problemas y optimizar el rendimiento en sistemas de software complejos.
  • Este cambio muestra la importancia de la colaboración y las contribuciones de la comunidad de código abierto. Las decisiones de Fedora y Ubuntu podrían influir en otras distribuciones, lo que traería un cambio positivo a todo el ecosistema Linux.
  • Reintroducir los frame pointers es una cuestión de equilibrar la pérdida de rendimiento con la facilidad de depuración. Esta decisión puede entenderse mejor mediante pruebas y análisis de rendimiento en entornos reales de operación.
  • Para los usuarios con formación técnica, este cambio puede resultar interesante, y ofrece información útil para desarrolladores o administradores de sistemas interesados en mejorar el rendimiento del sistema.
  • Si existen otras tecnologías o herramientas que ofrezcan funciones similares a los frame pointers, se pueden usar profilers basados en hardware como Intel VTune Profiler o AMD uProf, por ejemplo. Estas herramientas permiten el análisis de rendimiento incluso sin frame pointers.

1 comentarios

 
GN⁺ 2024-03-18
Comentarios de Hacker News
  • Experiencia de cuando la omisión del puntero de marco de pila comenzó a popularizarse a principios de los 2000
    • El autor estaba estudiando ciencias de la computación en ese entonces, y la computadora que usaba era vieja y de bajo rendimiento.
    • Como la depuración se volvió más difícil, empezó a usar Python para evitar esos problemas de depuración.
  • Esfuerzos en la distribución Fedora para mantener los punteros de marco de pila
    • Existía la creencia errónea de que los punteros de marco de pila implicaban una gran sobrecarga, pero en realidad el costo es menor al 1%.
  • El hecho de que Apple siempre haya mantenido trazas de pila significativas en la arquitectura ARM
    • Algunas funciones pueden no generar registros de marco, pero las trazas de pila siguen siendo útiles incluso sin información de depuración.
  • Experiencia en Google y 20 años de debate con la comunidad
    • Comparte su experiencia creando y manteniendo parches para aplicar libunwind a gperftools.
  • Casos en el pasado donde se experimentó una mejora de rendimiento con la opción -fomit-frame-pointer
    • Compilar MySQL y PHP en procesadores de 32 bits permitió reducir costos de hardware.
  • Cómo el lenguaje de programación Virgil maneja los marcos de pila
    • Cuando no hay asignación dinámica de pila, el tamaño del marco puede encontrarse con una simple búsqueda en una tabla.
    • Explicación del código que implementa la decodificación de metadatos.
  • La idea de gestionar dos pilas usando RBP y RSP en lugar de “recorrer” la pila
    • La pila de llamadas se convierte simplemente en un arreglo de direcciones de retorno, reduciendo la necesidad de recorrer la pila.
  • Apoyo a los punteros de marco y experiencias e ideas relacionadas
    • Activar los punteros de marco debe decidirse caso por caso, y hacer benchmarks es importante.
    • La importancia de que el sistema de compilación ofrezca una función para cambiar esto de forma global.
    • Expectativas sobre SFrame y su potencial para resolver los problemas actuales.
  • La opinión de que el profiling ha sido un problema durante 20 años y apenas ahora se resolvió
    • La ausencia de punteros de marco fue dolorosa para mucha gente, y ahora que Linux la está revirtiendo, sienten que su esfuerzo por fin está siendo reconocido.
  • La queja sobre el rendimiento de los mecanismos que hacen posible el profiling del sistema es paradójica
    • Quejarse del rendimiento del sistema que permite identificar problemas de rendimiento es la máxima expresión de la optimización prematura.