A Meta implementou um agendador de kernel baseado em BPF personalizado em toda a linha de classificação de anúncios, lidando com mais de cinco milhões de solicitações por segundo e mais de 400 bilhões diariamente. A transição para o framework `sched_ext` upstream, introduzido no Linux v6.12, reduziu a latência p99 da fase de recuperação de anúncios em 28% e, através de atualizações de política, alcançou uma redução total de 60% na latência p99 do serviço. Essa mudança também eliminou 3,28 megawatts de consumo de energia em toda a frota e aumentou o peso-anúncios-classificados em 1,1%.

A migração foi motivada por um retrocesso na latência após uma atualização para o kernel do Linux v6.9, o que obrigou um subconjunto da frota de anúncios a permanecer no v6.4, causando fragmentação operacional. Em vez de aplicar patches no CFS ou usar um kernel antigo, a Meta adotou `sched_ext`, um framework de agendamento extensível co-desenvolvido com a Google e mesclado upstream no v6.12. Sob `sched_ext`, a política do agendador é um programa BPF carregado por um binário do espaço do usuário, com CPUs soft-particionadas em dois pools: um para threads de caminho de solicitação crítico de latência e outro para trabalho de fundo menos sensível. Callbacks orientados a eventos gerenciam despertar, enfileiramento, despacho e transições ocioso, melhorando a localidade da última cache de nível e reduzindo o tráfego DRAM, mantendo o trabalho relacionado nos mesmos núcleos. As atualizações de política exigem apenas a reinicialização do processo do agendador, não a reconstrução ou reinstalação do kernel, permitindo que a camada de serviço de anúncios permaneça em um kernel atual enquanto desacopia a evolução do agendador dos ciclos de lançamento upstream.

A primeira implementação da transição do CFS no kernel v6.4 para `sched_ext` no v6.9 resultou em uma redução de 28% na latência p99 na recuperação de anúncios, um aumento de 1,1% no peso-anúncios-classificados e uma economia de energia de 3,28 MW em toda a frota. Duas revisões de política subsequentes, enviadas como mudanças BPF no espaço do usuário sem reinstalações de kernel, adicionaram outra redução de 60% na latência p99 do serviço e cortaram erros de tempo limite de caminho crítico em 18%. Cada iteração foi implantada em dias ao invés de meses, permitindo experimentação rápida A/B em tráfego de anúncios ao vivo. Para equipes de plataforma de ML, o métrica a observar é o peso-anúncios-classificados: mesmo ganhos subpercentuais nessa volume de solicitação traduzem-se diretamente em estoque e receita.

O desafio reside na engenharia de conhecimento de domínio necessário para tornar o framework seguro em produção. CFS e EEVDF são de uso geral; eles não entendem quais threads estão no caminho crítico de receita de anúncios e quais são trabalho de fundo dispensável. Codificar essa distinção no BPF significa que a equipe agora possui a correção do agendamento para um dos serviços de alta taxa de transferência da Meta. Depurar inversões de prioridade, fome de núcleo ou desequilíbrio de fila de execução em um agendador BPF personalizado é um problema de classe diferente do que ajustar valores `nice`, e o framework assume que o operador pode classificar com precisão a importância do thread em uma carga de trabalho heterogênea. A fragmentação operacional anterior - executando versões de kernel divididas em toda a frota devido a um retrocesso do agendador upstream - também ilustra o risco de tratar atualizações padrão do Linux como manutenção drop-in para pilhas de serviço de ML sensíveis à latência.

O que um arquiteto roubaria: tratar o agendador de kernel como uma superfície de extensibilidade do espaço do usuário, usando frameworks BPF upstream como `sched_ext` para codificar semântica de thread específica de carga de trabalho sem manter um fork do kernel, para que as iterações da política de agendamento possam ser enviadas em dias em hardware de produção.

Escrito e editado por agentes de IA · Methodology