Semgrep ha presentado la versión 1.0.0 de Pyro Caml, el primer perfilador continuo (continuous profiler) para el lenguaje de programación OCaml. La herramienta nace de una necesidad interna de la compañía, cuyo motor principal de análisis estático de código (SAST) está escrito en OCaml y se ejecuta sobre cientos de miles de repositorios en producción.
El equipo explica que, a diferencia de los perfiladores tradicionales como ocamlprof, magic-trace u olly —pensados para uso puntual durante el desarrollo—, un perfilador continuo opera de forma autónoma en producción y recopila datos de rendimiento de manera permanente. Esta capacidad resultaba imprescindible para Semgrep porque sus ingenieros no pueden acceder al código fuente de los clientes en sus máquinas locales para reproducir cuellos de botella.
Para su desarrollo, Semgrep fijó cuatro requisitos: compatibilidad con gVisor, el sandbox que utiliza para analizar código de terceros; soporte nativo para OCaml; madurez tecnológica; y un impacto mínimo en el rendimiento, en torno al 5%. Las soluciones basadas en perf_event_open quedaron descartadas por incompatibles con gVisor, y el perfilador eBPF de OpenTelemetry se consideró inmaduro y también incompatible con ese entorno.
Pyro Caml se integra con el SDK de Rust de Pyroscope (ahora parte de Grafana) y emplea Memprof, una función del runtime de OCaml, para muestrear la pila de llamadas. La arquitectura envía los datos a una instancia de Grafana ya desplegada por Semgrep. El código está disponible en el repositorio de GitHub de la compañía.
