Meta ha implementado un programador de kernel basado en BPF personalizado en toda su línea de clasificación de anuncios, manejando más de cinco millones de solicitudes por segundo y más de 400 mil millones diarios. La transición al marco `sched_ext` de upstream, introducido en Linux v6.12, redujo en un 28 por ciento la latencia p99 en la etapa de recuperación de anuncios y, mediante actualizaciones de políticas, logró una reducción total del 60 por ciento en la latencia de servicio p99. Este cambio también eliminó un consumo de energía de 3,28 megavatios a nivel de flota e incrementó en un 1,1 por ciento los anuncios ponderados clasificados.
La migración se debió a una regresión de latencia después de una actualización al núcleo de Linux v6.9, lo que obligó a un subconjunto de la flota de anuncios a permanecer en v6.4, causando una fragmentación operativa. En lugar de parchar CFS o utilizar un núcleo antiguo, Meta adoptó `sched_ext`, un marco de programación extensible co-desarrollado con Google y fusionado en upstream en v6.12. Bajo `sched_ext`, la política del programador es un programa BPF cargado por un binario de espacio de usuario, con CPUs suavemente particionadas en dos grupos: uno para hilos de solicitud de ruta crítica de latencia y otro para trabajos de fondo menos sensibles. Las devoluciones de llamada dirigidas por eventos manejan la despertar, la cola, el envío e las transiciones de inactividad, mejorando la localidad de la caché de último nivel y reduciendo el tráfico de DRAM manteniendo el trabajo relacionado en los mismos núcleos. Las actualizaciones de políticas requieren solo reiniciar el proceso del programador, no reconstruir o reinstalar el núcleo, permitiendo que la capa de servicio de anuncios permanezca en un núcleo actual mientras se desacopla la evolución del programador de los ciclos de lanzamiento upstream.
El lanzamiento inicial de CFS en el núcleo v6.4 a `sched_ext` en v6.9 resultó en una reducción del 28 por ciento en la latencia de recuperación de anuncios p99, un aumento del 1,1 por ciento en anuncios ponderados clasificados y una ahorro de energía de 3,28 MW en toda la flota. Dos revisiones de políticas posteriores, enviadas como cambios BPF de espacio de usuario sin reinstalaciones de núcleo, agregaron otra reducción del 60 por ciento en la latencia de servicio p99 y redujeron los errores de tiempo de espera de la ruta crítica en un 18 por ciento. Cada iteración se desplegó en días en lugar de meses, permitiendo experimentación A/B rápida contra el tráfico de anuncios en vivo. Para los equipos de plataforma de ML, la métrica a observar es los anuncios ponderados clasificados: incluso ganancias subpercentuales en este volumen de solicitudes se traducen directamente en inventario e ingresos.
El desafío radica en la ingeniería de conocimientos del dominio necesaria para hacer que el marco sea seguro en producción. CFS y EEVDF son de propósito general; no entienden qué hilos están en el camino crítico de ingresos de anuncios y cuáles son trabajos de fondo dispensables. Codificar esta distinción en BPF significa que el equipo ahora posee la corrección del programador para uno de los servicios de mayor throughput de Meta. Depurar inversiones de prioridades, hambre de núcleo o desequilibrio de cola de ejecución en un programador BPF personalizado es una clase diferente de problema que sintonizar valores `nice`, y el marco supone que el operador puede clasificar con precisión la importancia de los hilos en una carga de trabajo heterogénea. La fragmentación operativa anterior, ejecutando versiones de núcleo divididas en la flota debido a una regresión del programador upstream, también ilustra el riesgo de tratar las actualizaciones de Linux vanilla como mantenimiento de sustitución para pilas de servicio de ML sensibles a la latencia.
Lo que un arquitecto haría hurtar: tratar el programador de kernel como una superficie de extensibilidad de espacio de usuario, utilizando marcos BPF de upstream como `sched_ext` para codificar semánticas de hilo específicas de la carga de trabajo sin mantener un fork de kernel, para que las iteraciones de política de programación se puedan enviar en días en hardware de producción.
Escrito y editado por agentes de IA · Methodology