Linux はタスク スケジューラを作成するために eBPF を準備します

Linux

私たちは Linux 6.10 の安定版のリリースから数日後、このバージョンには、一連の非常に興味深い変更が含まれるほか、デバイスのサポートや機能などの点で大幅な改善が加えられます。

この記事の理由は、Linux の次期バージョンである「Linux 6.11」に関連しているため、やがてこのリリースについても取り上げることになりますが、そのリリースにはいくつかの変更が発表されており、言及しておきます。十分な時間がありますので、別の投稿で取り上げたいと思います。

さて、記事の要点に移ります。 Linus Torvalds氏の発表への言及 Linux 6.11 カーネルに組み込む意欲については、 メカニズムを実装するパッチ 「sched_ext」(SCX)。

この仕組みまたは、eBPF を使用して Linux カーネル内に CPU スケジューラを作成することを目的としています。 それがどのように機能するかについての概要は次のとおりです。

  • eBPF および CPU プログラマー: eBPF を使用すると、CPU スケジューラを動的にロードして Linux カーネル内で実行できます。ジャストインタイム (JIT) コンパイルは、eBPF バイトコードを実行用のマシン命令に変換します。
  • SCHED_EXT クラス: これは新しいプログラミング クラスであり、そのカーネル呼び出しの優先順位はクラス内にあります。 SCHED_IDLE および SCHED_NORMAL。 BPF ドライバーのリンク先 SCHED_EXT 通常のスケジューラにすでにアタッチされているタスクに影響を与えることなく、リアルタイム実行よりも優先度の低いタスクを処理できます。 SCHED_NORMAL.
  • 操作: BPF ドライバーは、CPU 上で実行を待機しているタスクのキューを分析し、CPU コアが解放されたときに割り当てるタスクを選択します。アクティブな BPF ドライバーが存在しない場合 SCHED_EXT、 タスクはスケジューラを使用して処理されます SCHED_NORMAL。
  • 利点: メカニズム sched_ext さまざまなプログラミング手法や戦略を動的に実験することが容易になります。これにより、プログラマの機能的なプロトタイプを迅速に作成し、運用環境でその場で置き換えることができます。たとえば、アプリケーションの特定の特性に合わせて調整したり、システムのステータスやその他の要因に基づいてスケジューリング戦略を変更したりできます。

言及する価値があります 「sched_ext」は当初、2022 年にカーネル開発者によって検討されるよう提案されました。、その後 6 つのパッチ リビジョンがリリースされました。メインカーネルではサポートされていないにもかかわらず、 Ubuntu、Arch Linux、Fedora、NixOS などのいくつかのディストリビューションでは、追加パッケージを通じて「sched_ext」のインストールが提供されています。。 Canonical は « のコンポーネントを含めることを検討しています。sched_ext» は Ubuntu 24.10 に組み込まれており、Valve は Steam Deck への統合に取り組んでいます。 Meta では、プログラマは « に基づいていますsched_ext» は実稼働インフラストラクチャですでに使用されています。

さらに、現在、約 12 名のプログラマーが、 「sched_ext」それぞれのタスク スケジューリング ロジックはユーザー空間で定義され、BPF プログラムを使用してカーネルにロードされます。

  1. scx_layered: タスクをレイヤーに分割し、それぞれが独自のスケジューリング戦略を持つハイブリッド スケジューラー。保証された CPU リソースを使用して特定のタスクを特定のレイヤーに割り当てたり、個々のアプリケーションの優先順位を高めたりすることができます。 Meta によって開発され、そのユーザー空間ロジックは Rust で書かれています。
  2. scx_rustland: CPU を集中的に使用するタスクよりも対話型タスクを優先するように最適化されています。たとえば、標準の EEVDF スケジューラと比較して、同時カーネル コンパイル中の Terraria ゲームの FPS が向上します。 Canonical の従業員によって開発され、Rust のロジックが組み込まれています。
  3. scx_lavd: LAVD (Latency-criticality Aware Virtual Deadline) アルゴリズムを実装し、遅延の削減とプロセスの進行状況の関連性を考慮して、コンピューター ゲームやインタラクティブ タスクの遅延を削減します。 Igalia と Valve によって開発され、Rust のロジックが組み込まれています。
  4. scx_rusty、scx_rlfifo、scx_mitosis: 負荷に基づいてタスク グループのバランスをとり、シンプルな FIFO スケジューラを実装し、タスク グループを CPU コアにバインドするスケジューラ。すべてRustコンポーネントを使用します。
  5. scx_central、scx_ flatcg、scx_nest、scx_pair、scx_qmap、scx_simple、scx_userland: C コンポーネントを使用したプログラマの例。「sched_ext」のさまざまな機能を示します。

最後に、Google が独自のフレームワーク ghOSt を使用して、BPF プログラムを使用してタスク スケジューラの決定に影響を与える実験を行っており、ghOSt を sched_ext に移行し始めていることを付け加えておきます。さらに、Google は ChromeOS 用の「sched_ext」のポートを開発中です。

出典 https://lkml.org


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。