buildprof: herramienta para analizar tiempos de compilación en Linux

Fuentes: buildprof: an open-source tool for profiling Linux build times

buildprof es una herramienta de trazado de código abierto diseñada para visualizar y optimizar los tiempos de compilación de software en Linux. Su objetivo principal es identificar cuellos de botella en los procesos de construcción, como la falta de paralelismo, tareas repetidas o invocaciones excesivamente largas de compiladores y enlazadores. La herramienta funciona insertando el comando 'buildprof --' antes de cualquier comando de compilación estándar, como 'make', 'cargo build' o 'ninja'.

El desarrollo de buildprof surgió de la necesidad de entender por qué la nueva compilación de Bun en Rust era más de cinco veces más rápida que la anterior en Zig, a pesar de que Zig suele ser más rápido. El autor, Lalit Maganti, notó que la diferencia clave residía en la optimización: la compilación en Zig utilizaba Full LTO, mientras que la de Rust empleaba ThinLTO. Full LTO integra todas las unidades de compilación en una sola tarea de optimización, lo que puede ser extremadamente lento, mientras que ThinLTO permite mayor paralelismo.

buildprof registra el árbol de procesos generado por el comando de compilación, incluyendo subprocesos y sus descendientes. Al visualizar estos procesos en una línea de tiempo, donde el ancho de las barras indica la duración, los desarrolladores pueden ver claramente qué etapas consumen más tiempo. La herramienta es agnóstica al sistema de construcción, ya que opera a nivel de sistema operativo, capturando cualquier proceso lanzado por Make, Cargo, Ninja o scripts personalizados. Además, permite rastrear los archivos leídos y escritos por cada proceso, facilitando la comprensión de las dependencias entre etapas de construcción. En el caso de Bun, buildprof reveló que la invocación del enlazador con Full LTO consumía más de 16 minutos, representando dos tercios del tiempo total de compilación, confirmando que la estrategia de LTO era el principal factor de lentitud.