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 分析暂不可用,本条为保底评分与摘要。
通过开源内核调度器现代化 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