TL; DR
- Metaの規模では、数ミリ秒の遅延悪化が広告パフォーマンスに大きな悪影響を及ぼす可能性があります。
- LinuxカーネルのアップグレードがMetaの広告配信フリート全体の遅延を悪化させるリスクがあったため、sched_ext(アップストリームのBPFベースの拡張可能スケジューリングフレームワーク)を利用し、広告配信ワークロードに最適化されたスケジューリングポリシーを構築しました。
- その結果、広告取得ステージのテール(99パーセンタイル)レイテンシが28%削減、3.28メガワット(MW)の電力削減、ランキングされた広告数が1.1%増加し、ワークロード固有のスケジューリング最適化がビジネス価値を直接向上させることを実証しました。
広告レイテンシが重要な理由
Metaの広告配信フリートは、サービングプラットフォームのエントリーポイントで平均毎秒500万件を超えるリクエストを処理しており、全収益化サーフェス全体では1日あたり4000億件を超えます1。 p99レイテンシを1ミリ秒削減するたびに、プラットフォーム上の人々にとって広告の関連性が高まり、広告主にとってより良いROIを実現できます。

これにより、ワークロード固有のスケジューリングを通じてレイテンシを削減する実質的な機会が得られます。そのため、広告チームとLinuxカーネルチームは、sched_ext(アップストリームのBPFベースの拡張可能スケジューリングフレームワーク)を利用して、広告配信ワークロードに最適化されたスケジューリングポリシーを構築する取り組みを進めています。これまでは、Linuxカーネルに標準搭載されている汎用スケジューラ(CFSおよびEEVDF)を使用しており、ワークロードを理解せずにスレッドをCPU間で分散させていました。しかし、ここでは各スレッドの目的と重要性を把握しています。sched_extにより、この知識をスケジューラに直接組み込むことができます。p99リクエストレイテンシを改善する作業が最初にスケジュールされ、その他の作業は後回しになります。
Metaにおけるsched_ext
sched_extは、Linuxカーネルv6.12に正式に統合された、BPFベースのオープンソーススケジューラフレームワークです。GoogleのghOStの作者と提携して設計を行い、アップストリームのLinux統合に適したスケジューラを開発しました。すでにMetaの複数のサービスで導入されており、スケジューリングレイテンシの大幅な削減を実現しています。
フリートを最新の安定版Linux(kernel v6.9)にアップグレードする過程で、Linux kernel v6.6で導入された新しいEarliest Eligible Virtual Deadline First (EEVDF)スケジューラがレイテンシの回帰を引き起こし、レスポンスでランキングされる広告数が減少していることが判明しました。その結果、一部の広告ホストは古いv6.4カーネルを使い続けざるを得ず、技術的負債と運用上の断片化が生じていました。
すでに高いパフォーマンスを発揮していたsched_extは、これらのスケジューリング回帰に対処する有力な候補となりました。
sched_extによるカスタムスケジューリング
Sched_extは、スケジューラ開発者が好みのスケジューリングポリシーをBPFプログラムとして実装できるようにします。ホストが広告ワークロードの実行を開始すると、広告に最適化されたポリシーが適用されます。以降、カーネルは一連のイベント駆動コールバックを通じてBPFスケジューラを呼び出し、スレッドのウェイクアップ、エンキュー、ディスパッチ、アイドル遷移などの一般的なスケジューリングイベントを処理します。
- スレッドのウェイクアップ: スレッドが実行可能になったときにCPUを選択します。
- エンキュー: スレッドを実行キューに配置します。
- ディスパッチ: CPUがアイドルになったときに次のスレッドを選択します。
- アイドル遷移: CPUのアイドル状態の出入りに対応します。
大まかには、ポリシーはCPUを2つのプールにソフトパーティションし、1つはレイテンシクリティカルなリクエストパス上のスレッド用、もう1つはレイテンシの影響が少ない作業用とします。どのスレッドがどのプールに入るかは、ポリシー内にエンコードされたドメイン固有の知識の一部です。各プールのサイズは、負荷ベースのヒューリスティクスを使用して動的に調整されます。このアプローチにより、関連する作業が時間の経過とともに同じCPU上に留まりやすくし、ラストレベルキャッシュ(L3)ローカリティを向上させ、高コストなDRAMアクセスを削減します。
ポリシーはBPFプログラムをロードするユーザー空間バイナリとしてパッケージ化されています。この設計により、実験とパフォーマンス最適化が大幅に高速化されます。変更をロールアウトするには、スケジューラプロセスを再起動して古いポリシーをアンロードし、新しいポリシーをロードするだけで済み、カーネルを再構築または再インストールする必要はありません。
結果と影響
初回リリースは、最大規模の広告配信サーバータイプで、CFSスケジューラを使用するkernel 6.4からsched_extを使用するkernel 6.9への移行を目的として実施されました。バックテスト実験に基づき、リリースにより以下の成果が得られました:
- weighted-ads-rankedで+1.1%(取得・ランキングされた広告数の指標)。
- フリート全体で3.28メガワットの電力削減。
- 広告取得パスのサービスp99レイテンシを28%削減2。
複合的な改善。ユーザー空間の変更のみで提供された2回の後続スケジューラポリシー更新により、さらなる成果が得られました:
- サービスp99レイテンシを追加で60%削減。
- クリティカルパス上のタイムアウトエラーを18%削減。
これは、カーネルリリースに依存せずに達成された大きな成果です。上記の各後続イテレーションは、BPFプログラムとしてユーザー空間に存在するスケジューラポリシーにより、数ヶ月ではなく数日でリリースされました。このペースにより、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、および広告キャパシティ効率チームとカーネルチームの皆様のご貢献と協力に特別な感謝を申し上げます。
Ads Infra Leadership Team: 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.