Encontrando zombis en nuestros sistemas: una historia real sobre cuellos de botella de CPU

Fuentes: Finding zombies in our systems: A real-world story of CPU bottlenecks

A comienzos de 2025, el equipo de la plataforma Kubernetes de Pinterest (PinCompute) recibió un aviso del equipo de ML: los trabajos de entrenamiento basados en Ray, que durante horas consumen costosas GPUs, sufrían caídas intermitentes provocadas por pérdida de conectividad de red. Lo que empezó como una consulta sencilla —por qué ocurría y cómo detenerlo— desencadenó una investigación de más de tres meses que ilustra un caso real de cuello de botella de CPU en sistemas distribuidos.

Pinterest ejecuta más de la mitad de su carga de ML offline sobre Ray, aprovisionando decenas de miles de clústeres al mes. Ray opera como un sistema altamente "activo en red", con un plano de control (health checks, planificación de tareas) y un plano de datos (transferencias masivas en el Object Store). Las microcortes de red degradan estos planos y provocaban errores como ObjectFetchTimedOutError, ActorDiedError o caídas de nodos, reduciendo la tasa de éxito de algunos entrenamientos por encima del 25%.

Los ingenieros observaron dos síntomas clave. Primero, las caídas se correlacionaban con resets del driver de red ENA de AWS en instancias EC2, un mecanismo de autocuración que se dispara cuando los hilos de transmisión quedan en pausa más de 5 segundos, generalmente por inanición de CPU. Segundo, las máquinas afectadas mostraban un uso elevado de CPU del sistema, lo que apuntó a una posible saturación por paginación o asignadores de memoria ineficientes.

Probaron Transparent Huge Pages, jemalloc, afinidad de CPU con taskset e interrupción fijada para los drivers ENA. Aunque la paginación disminuyó ligeramente, los resets de red persistían sin patrón claro. Esa es la puerta de entrada a la siguiente fase de la historia: la búsqueda de los "zombis" que consumían CPU sin motivo aparente.