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 請求延遲的工作會被優先排程,其餘工作則退居其次。
sched_ext 在 Meta 的應用
sched_ext 是一個開源、基於 BPF 的排程框架,已正式進入核心 v6.12。我們與 Google ghOSt 的作者合作開發,設計出適合上游 Linux 整合的排程器。它已在 Meta 的多個服務中部署,並帶來排程延遲的顯著降低。
在將機群升級至最新穩定版 Linux(核心 v6.9)的過程中,我們觀察到 Earliest Eligible Virtual Deadline First (EEVDF) 排程器(於 Linux 核心 v6.6 引入)造成了延遲倒退,進而降低回應中的廣告排名數量。因此,部分廣告主機被迫停留在較舊的 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 百萬瓦。
- 服務 p99 延遲降低 28%(廣告擷取路徑2)。
複合改善。後續兩次純使用者空間變更的排程政策更新,進一步擴大了效益:
- 服務 p99 延遲額外降低 60%。
- 關鍵路徑的逾時錯誤減少 18%。
這是一個非同小可的成果,且完全不依賴核心版本發行。由於排程政策以 BPF 程式形式存在於使用者空間,每次後續迭代都能以數天而非數月的速度完成。這正是 sched_ext 從「核心升級阻礙解除工具」轉變為廣告服務持續最佳化平台的關鍵。

從短期修復轉為策略性資產
最初只是針對特定營運問題的回應,後來卻發現 sched_ext 的策略性與廣泛適用性遠超原先預期。sched_ext 為 Meta 帶來幾項關鍵效益:
平行且解耦的排程最佳化路徑。上游 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
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.