Cómo depurar una regresión de rendimiento en Open MPI con Guix

Fuentes: Debugging performance regressions

El gestor de paquetes Guix, empleado en clústeres de computación de altas prestaciones (HPC), distribuye Open MPI adaptado a múltiples redes de alta velocidad como InfiniBand, Omni-Path, Slingshot y ROCE. Recientemente, el soporte para la interconnect Slingshot de Cray/HPE, basado en las bibliotecas libcxi y libfabric, sufrió una regresión de rendimiento que pasó inadvertida al no existir pruebas automatizadas para ese hardware.

El síntoma fue claro: al ejecutar el benchmark IMB-MPI1 PingPong sobre un nodo con Slingshot, el ancho de banda cayó a unos 2,3 GB/s frente a los aproximadamente 25 GB/s esperados. Activando los registros detallados de Open MPI, libfabric y libcxi, los administradores detectaron errores repetidos de tipo "Failed to allocate CP" en el proveedor cxi de libfabric, lo que provocaba la caída al transporte TCP/IP sobre Ethernet.

Para localizar la causa, los desarrolladores recurrieron a dos funcionalidades clave de Guix. Primero, mediante guix time-machine realizaron una bisección sobre el historial de commits del propio Guix, ya que cada commit identifica de forma reproducible toda la pila MPI. La regresión se atribuyó a una actualización aparentemente inocua de libcxi. A continuación, usando la opción --with-commit, repitieron la bisección a nivel de los commits internos de libcxi, reconstruyendo la pila dependiente en cada paso. En pocas horas identificaron el commit culpable y abrieron un informe detallado a los mantenedores上游.

El caso ilustra el valor de la reproducibilidad y la transparencia de Guix para diagnosticar regresiones en software científico complejo sin necesidad de ser experto en cada biblioteca implicada.