Culpert: perfilador de asignación de memoria para Rust

Fuentes: Culpert: a heap allocation profiler for Rust services

Culpert es un perfilador de asignación de memoria por muestreo diseñado para bibliotecas y servicios en Rust. Su objetivo principal es atribuir las asignaciones de memoria a los spans existentes, permitiendo a los desarrolladores identificar regresiones de rendimiento antes del lanzamiento final. La herramienta exporta perfiles compatibles con pprof, lo que garantiza la compatibilidad con el ecosistema de herramientas existente, como Speedscope, Pyroscope y Polar Signals, además de ofrecer un CLI con comandos de comparación para flujos de trabajo CI/CD.

El sistema utiliza muestreo geométrico con corrección de Bernstein para proporcionar estimaciones de asignación sin sesgo, manteniendo un sobrecoste de perfilado bajo. Culpert ofrece tres rutas de integración: a través de Cloudflare Foundations, mediante la librería tracing o mediante una macro propia #[culpert::span_fn]. Esta última opción permite la atribución sin necesidad de un trazador externo, ofreciendo flexibilidad para servicios que no utilizan estos frameworks.

La instalación se realiza mediante cargo, y el perfilador se integra mediante un wrapper #[global_allocator] que registra cada asignación muestreada. Los perfiles generados son archivos .pb.gz que pueden analizarse con el CLI incluido o con herramientas estándar de pprof. El reporte por defecto es jerárquico, mostrando el desglose de bytes por span, mientras que el modo --flat ofrece una tabla ordenada por bytes. Esta herramienta es especialmente útil para equipos que buscan optimizar el uso de memoria en aplicaciones Rust de alto rendimiento, como los servicios de Cloudflare, donde ha detectado fugas de memoria reales en entornos de producción.