Engineering at Meta

Modernizing the Meta Ads Service With an Open-Source Kernel Scheduler

6.9内容质量
Modernizing the Meta Ads Service With an Open-Source Kernel Scheduler

TL;DR · AI 摘要

Modernizing the Meta Ads Service With an Open-Source Kernel Scheduler - Engineering at Meta POSTED ON JULY 13, 2026 TO M...

核心要点

  • 主题聚焦:Modernizing the Meta Ads Service With an Open-So
  • 来源:Engineering at Meta,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#后端#云计算#安全
打开原文

通过开源内核调度器现代化 Meta 广告服务 - Meta 工程实践

POSTED ON

JULY 13, 2026

TO

ML 应用

通过开源内核调度器现代化 Meta 广告服务

.entry-meta

.entry-header

By

Blaise Sanouillet

,

Sunyi Shao

Jeff Song

Gosh Arzumanyan

Shawn Wu

Tejun Heo

Praveen Sampath

GP Musumeci

TL;DR

  • 在 Meta 的规模下,几毫秒的延迟增加可能会对广告性能产生显著的负面影响。
  • 当 Linux 内核升级导致 Meta 广告投放集群的延迟出现退化时,我们转向了 sched_ext —— 这个上游的、基于 BPF 的可扩展调度框架 —— 来构建针对广告投递工作负载的定制化调度策略。
  • 结果:广告检索阶段尾部(99 分位)延迟降低 28%,节省 3.28 兆瓦(MW)电力,广告排序数量增加 1.1%,证明针对工作负载的调度优化可以直接创造商业价值。

为什么广告延迟至关重要

Meta 的广告投放集群在服务端入口点平均每秒处理超过 500 万次请求,按所有商业化表面计算,每天处理超过 4000 亿次请求¹。每减少 1 毫秒的 p99 延迟,都能让广告在我们的平台上更加相关,而更精准的匹配意味着广告主能获得更强的投资回报率。

这为通过工作负载特定的调度优化来降低延迟提供了真实机会。这就是为什么我们的广告团队和 Linux 内核团队一直在合作,使用 sched_ext —— 这个上游的、基于 BPF 的可扩展调度框架 —— 来构建针对广告投递工作负载的定制化调度策略。到目前为止,我们一直在使用 Linux 内核中通常集成的通用调度器(CFS 和 EEVDF),它们在跨 CPU 平衡线程时并不了解工作负载。然而,我们清楚每个线程的目的和重要性。通过 sched_ext,我们可以将这些知识直接编码到调度器中。优先调度能改善 p99 请求延迟的工作,而其他工作则退居其次。

Meta 上的 sched_ext

sched_ext 是一个开源的、基于 BPF 的调度框架,已正式进入内核 v6.12。我们通过与 Google ghOS t 作者合作开发了它,旨在设计一个适合上游 Linux 集成的调度器。它已经在 Meta 的多个服务中部署,显著降低了调度延迟。

在将我们的集群升级到最新稳定版 Linux(内核 v6.9)时,我们发现 Linux 内核 v6.6 中引入的新 Earliest Eligible Virtual Deadline First(EEVDF)调度器导致了延迟退化,减少了响应中的广告排序数量。结果,一部分广告主机被迫停留在较旧的 v6.4 内核上,造成了技术债务和运营碎片化。

鉴于其出色的性能表现,sched_ext 成为了解决这些调度退化的理想选择。

使用 sched_ext 的定制调度

sched_ext 允许调度器开发者将首选的调度策略实现为 BPF 程序。当主机开始运行广告工作负载时,会应用广告优化的策略。从那时起,内核会通过一组事件驱动的回调函数调用 BPF 调度器来处理常见的调度事件,例如:

  • 线程唤醒:当线程变为可运行状态时选择一个 CPU。
  • 入队:将线程放入运行队列。
  • 分发机制:当CPU空闲时选择下一个线程。
  • 空闲状态转换:响应CPU进入或退出空闲状态。

从宏观层面来看,该策略将CPU软分区为两个池,一个用于延迟敏感的请求路径线程,另一个用于延迟不敏感的工作负载。线程分配到哪个池由策略中封装的领域知识决定。每个池的大小通过基于负载的启发式算法动态调整。这种方法能长期保持相关工作负载在相同CPU上运行,提升三级缓存(L3)局部性并减少昂贵的DRAM访问。

该策略以用户空间二进制文件形式封装,用于加载BPF程序。这种设计使实验和性能优化更加高效。要部署变更,只需重启调度器进程即可卸载旧策略并加载新策略,无需重建或重新安装内核。

结果与影响

首次发布旨在将最大广告服务服务器类型从使用CFS调度器的内核6.4升级到使用sched_ext的内核6.9。根据回测实验,此次发布实现了:

  • 加权广告排名(广告检索和排序数量指标)提升1.1%。
  • 全舰队节省3.28兆瓦电力。
  • 广告检索路径2的P99服务延迟降低28%。

复合改进效果。后续两个调度器策略更新以纯用户空间变更形式实现,进一步扩大了收益:

  • 服务P99延迟再降低60%。
  • 关键路径超时错误减少18%。

这是在不依赖内核版本的情况下实现的重要成果。由于调度器策略作为BPF程序存在于用户空间,后续每次迭代只需数天而非数月即可完成。这种迭代速度使sched_ext从"内核升级解除器"转变为广告服务的持续优化平台。

从短期方案到战略资产

最初作为针对特定运营问题的定向解决方案,sched_ext现已证明比我们最初预期的更具战略价值且应用范围更广。对Meta而言,sched_ext带来以下关键优势:

并行且解耦的调度器优化路径。上游Linux调度器会随时间自然演进,有时会出现较大步进(如CFS到EEVDF的过渡),这可能对下游用户造成干扰。sched_ext使Meta能够在此演进过程中持续改进定制调度器。我们运行并优化专为生产工作负载设计的BPF调度逻辑,确保关键服务始终优化,不受上游变化影响。

独立部署与降低开销。调度器改进以BPF程序更新形式部署,周期从数月缩短至数天。这种实验成本的显著降低具有变革意义。过去需要内核补丁和数月验证的想法(如本地缓存感知调度、基于ROI的执行器路由、NUMA感知调度)现在都成为可处理的迭代而非重大项目。

共享行业资产。sched_ext已合并到Linux v6.12,因此Meta在此使用的机制现已向整个Linux生态系统开放。任何有非通用模型工作负载的操作员(超大规模云服务商、云提供商、嵌入式系统团队)都可以在不分支内核的情况下部署特定工作负载的调度策略。

未来计划

sched_ext 已经通过赋予应用对调度器行为的更细粒度控制权,使我们看到了进一步提升广告性能的优化机会。例如,广告服务对服务请求的相对重要性有重要上下文信息,并且在線程开始处理重要请求时,有潜力向调度器发出信号。当调度器接收到此提示时,可以采取适当措施,例如增加该线程的调度时间片或确保其始终位于队列顶部。

致谢

特别感谢 Samuel Nair、Usama Arif、GP Musumeci、Praveen Alevoor、Ye Wang 以及广告容量效率和内核团队的其他成员的贡献与协作。

广告基础设施领导团队:Uladzimir Pashkevich、Varna Puvvada、Prabhakar Goyal、Neeraj Agrawal、Tak Yan、Liz Shepherd、Drew Lackman