お問い合わせ

info@serverion.com

お電話ください

+1 (302) 380 3902

PREEMPT_RT の説明: リアルタイムカーネル機能

PREEMPT_RT の説明: リアルタイムカーネル機能

PREEMPT_RTはLinuxカーネルをリアルタイムオペレーティングシステムに変換し、重要なタスクの正確なタイミングを保証します。Linux 6.12(2024年9月20日リリース)に完全に統合されており、x86、ARM64、RISC-Vなどのアーキテクチャでリアルタイム機能を実現します。知っておくべきことは以下の通りです。

  • 主な特徴:
    • 従来のスピンロックをプリエンプティブ スリープ ロックに置き換えます。.
    • 割り込みハンドラーをスレッドに変換し、スケジュール可能かつプリエンプト可能にします。.
    • 優先度の逆転の問題に対処するために優先度の継承を実装します。.
    • RCU (読み取り、コピー、更新) 操作を完全にプリエンプティブにします。.
  • アプリケーション:
    • 正確なタイミングが重要な自動車、ロボット工学、通信、医療機器などの業界で使用されます。.
    • 産業オートメーションツール、飛行制御、ホスティング環境などのシステムに必要な電力を供給します。 低遅延仮想プライベートサーバー.
  • 設定:
    • 有効にする CONFIG_PREEMPT_RT カーネル構成で。.
    • 次のような設定を微調整します CONFIG_NO_HZ_FULL そして CONFIG_RCU_BOOST 最適なパフォーマンスを実現します。.
    • 次のようなツールを使用する サイクリックテスト レイテンシを測定し、パフォーマンスを検証します。.

PREEMPT_RTはスループットよりもタイミングを優先するため、Linuxは期限が厳守されるアプリケーションに最適です。これは、確定的なパフォーマンスが求められる業界にとって、画期的な技術です。.

PREEMPT_RT コア機能: Linux がリアルタイムパフォーマンスを実現する方法

PREEMPT_RT コア機能: Linux がリアルタイムパフォーマンスを実現する方法

PREEMPT_RT の説明: リアルタイム性と超低レイテンシを実現する Linux カーネルの構築と最適化

PREEMPT_RT コア機能

PREEMPT_RTは、プリエンプティブでないコードを削減し、タスクスケジューリングの制御を向上させるために設計された4つの主要機能に重点を置いています。それぞれについて詳しく見ていきましょう。.

完全なカーネルプリエンプション

最も大きなアップデートの一つは、標準スピンロックの変換です(スピンロックt)とリーダーライターロック(rwlock_t) の中へ ミューテックスベースのスリープスピンロック. 従来のスピンロックはプリエンプションを無効にし、タスクをビジーウェイト状態に強制するため、遅延が発生する可能性があります。PREEMPT_RTは、タスクがリソースを保持している場合でもスリープ状態になり、プリエンプトされるロックを導入することで、この問題を解決します。.

これは、高優先度タスクが低優先度タスクに割り込むことができることを意味します。たとえ低優先度タスクがロックを保持している場合でもです。ただし、スケジューラやハードウェアエントリポイントなどの特定の重要な操作では、PREEMPT_RTは raw_spinlock_t, これは、従来の非プリエンプティブロックと同様に動作します。著名なエンジニアであるポール・マッケニー氏は次のように述べています。

"「PREEMPT_RT パッチの重要なポイントは、プリエンプティブでないカーネル コードの量を最小限にすると同時に、この追加されたプリエンプティブ性を提供するために変更する必要があるコードの量も最小限に抑えることです。」"

次に、このアプローチによって割り込み処理にどのような利点がもたらされるかを見てみましょう。.

スレッド割り込み

PREEMPT_RTは、ほとんどのハードウェア割り込みハンドラを「ハードIRQ」コンテキストから カーネルスレッド プロセスコンテキストで実行されています。この調整により、割り込みハンドラを優先したり、プリエンプトしたり、ブロックしたりすることが可能になります。.

標準的なLinuxカーネルでは、長時間実行される割り込みハンドラは他のすべての実行を停止させるため、無制限のレイテンシを引き起こす可能性があります。この問題は、スレッド化された割り込みによって解決されます。デフォルトでは、これらの割り込みスレッドは スケジューリングFIFO 優先度は50ですが、管理者は次のようなツールを使用して優先度を調整できます。 チャート. 例えば、産業用制御用のネットワークカードの割り込みを優先し、ディスクI/Oの優先度を下げるといったことが可能です。これらのスレッドは、rawスピンロックではなくスリープスピンロックを使用するため、ロック保持中にハードウェア割り込みを無効にする必要がありません。.

ここで、PREEMPT_RT が優先度関連の課題をどのように処理するかを見てみましょう。.

優先度継承とRtmutex

優先順位の逆転 これは、高優先度タスクが低優先度タスクが確保しているリソースを待機してスタックし、一方で中優先度タスク(リソースを必要としない)が低優先度タスクをプリエンプトしてしまうという大きな問題です。PREEMPT_RTは、この問題を次のように解決します。 優先継承, 一時的に、低優先度タスクの優先度を、リソースを待機している最高優先度タスクと一致するように上げます。.

rtmutex primitive はこれを可能にするツールです。これにより、競合が発生した場合、低優先度タスクは中優先度タスクの干渉を受けずにクリティカルセクションを完了できるようになります。優先度が引き上げられたタスクが別のロックでブロックされた場合、優先度の引き上げは依存関係の連鎖を連鎖的に下っていきます。Linux カーネルのドキュメントでは次のように説明されています。

"「優先度の継承により、適切に設計されたアプリケーションは、決定論を失うことなく、優先度の高いスレッドの重要な部分でユーザー空間ロックを使用できます。」"

これを達成するために、, rtmutex フラグと優先順位付きツリーを使用して待機中のタスクを管理し、サポートされているアーキテクチャでのオーバーヘッドを低く抑えます。.

最後に、PREEMPT_RT が RCU 操作をどのように改善するかを見てみましょう。.

プリエンプティブ RCU (読み取り・コピー・更新)

RCU

Read-Copy-Update (RCU) は、Linux カーネルで広く使用されている同期技術です。標準カーネルでは、RCU の読み取りセクションはプリエンプト不可能であり、予測できない遅延が発生する可能性があります。PREEMPT_RT は、RCU の読み取りセクションをプリエンプト不可能にすることで、この問題を解決します。 完全にプリエンプティブ, リアルタイムタスクの期限が損なわれないようにします。この調整は、リアルタイムシステムに求められる予測可能な動作を実現するための基礎となります。.

PREEMPT_RT の設定と使用方法

PREEMPT_RTはメインラインLinuxカーネルに完全に統合されているため、外部パッチは不要です。ただし、アーキテクチャサポートの向上とグラフィック性能の向上のためには、最新のパッチキューを適用することをお勧めします。カーネルの準備が整ったら、その機能を最大限に活用するために設定を調整する必要があります。.

カーネル構成設定

完全にプリエンプティブなカーネルを有効にするには、 CONFIG_PREEMPT_RT. 新しいカーネルでは、この設定は「一般設定」の下にありますが、有効にする必要があるかもしれません。 コンフィギュレーションエキスパート まず設定メニューに表示されるようにします。.

生産用 専用サーバー その他の高パフォーマンス環境では、追加オプションによりパフォーマンスをさらに最適化できます。

  • CONFIG_NO_HZ_FULL: ビジー状態の CPU 上のスケジュール クロック割り込みを削減し、ジッターを最小限に抑えます。.
  • CONFIG_RCU_BOOST: プリエンプトされた RCU リーダーが猶予期間を遅らせることを防ぎます。.
  • CONFIG_RCU_NOCB_CPU: RCU コールバック処理を特定の CPU にオフロードし、リアルタイム タスクへの干渉を軽減します。.

遅延を増大させる可能性のあるデバッグオプションを無効にすることも重要です。以下の設定をオフにしてください。 CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS、 そして CONFIG_SLUB_DEBUG. これらのツールは開発には便利ですが、レイテンシ目標に重大な影響を与える可能性があります。kernelconfig.ioでは次のように説明されています。

"このオプションは、さまざまなロック プリミティブ (スピンロック、rwlock など) をプリエンプティブな優先度継承対応バリアントに置き換えることで、カーネルをリアルタイム カーネルに変換します。"

カーネルがビルドされ起動したら、次のコマンドを実行してPREEMPT_RTがアクティブであることを確認します。 cat /sys/kernel/realtime. 戻り値は 1 成功を示します。また、出力に「PREEMPT_RT」があるかどうかを確認することもできます。 uname -a.

デバッグとパフォーマンスの最適化

リアルタイムワークロードで最適なパフォーマンスを実現するには、カーネルの微調整が不可欠です。対処すべき重要な領域の一つは、 リアルタイムスロットリングメカニズム, は、デフォルトで非リアルタイムタスク用に毎秒50ミリ秒を予約します。ワークロードが純粋にリアルタイムである場合は、次のように記述することでこのメカニズムを無効にすることができます。 -1/proc/sys/kernel/sched_rt_runtime_us. OSADLのシニアオープンソースコンサルタントであるJan Altenberg氏は次のように指摘しています。

"「暴走したリアルタイムタスクはシステムを飢餓状態に陥らせる可能性があります。保護メカニズムとして、/proc/sys/kernel/sched_rt_runtime_us にマイクロ秒単位で値を設定することで、リアルタイムタスクの実行時間を制限できます。」‘

決定論性を高めるには、次のようなパラメータを使用して特定のCPUコアを分離します。 isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, 、設定 irqアフィニティ=0. これにより、これらのコアがリアルタイム タスク専用に予約されます。.

割り込みスレッドを管理するには、 チャート ツールです。これらのスレッドは通常、デフォルトの スケジューリングFIFO 優先度は50ですが、アプリケーションとの競合を避けるために調整できます。例えば、ネットワークカードのIRQスレッドの優先度を98に設定するには、次のコマンドを使用します。 chrt -p -f 98.

設定が完了したら、レイテンシパフォーマンスをテストして検証することが重要です。次のようなツールが役立ちます。 サイクリックテスト レイテンシを測定できる(例:, サイクリックテスト -S -m -p98 -i250)、 その間 rtla (リアルタイムLinux分析)は、レイテンシの急上昇を特定・分析するのに役立ちます。これらのツールは、リアルタイムアプリケーションの要求を満たす環境の構築を可能にします。.

PREEMPT_RT アプリケーションと利点

リアルタイムアプリケーションのユースケース

PREEMPT_RTはタイミング精度が重要となるシステムで威力を発揮します。 航空宇宙, これにより、安全を脅かす可能性のあるマイクロ秒単位の遅延なく、ナビゲーションと飛行制御が確実に実行されるようになります。. 通信 企業は、データ ルーティングをリアルタイムで管理し、ジッターや遅延の急増を排除してスムーズな音声通話やビデオ通話を実現するためにこれを活用しています。.

の中で 自動車産業, コンチネンタル・オートモーティブのような大手企業がその採用を支持しており、車両制御システムの基礎となっています。 産業オートメーション, PREEMPT_RT は、プログラマブル ロジック コントローラー (PLC) および SCADA システムを駆動し、多くの場合、EtherCAT などのプロトコルと連携して、工場現場の安全性と効率性を維持します。. ロボット工学 また、ロボットが環境の変化に即座に対応できるようにするために、正確なアクチュエータ制御と即時のセンサーフィードバックのためにこの技術に大きく依存しています。.

おそらく最も重要なアプリケーションは 医療機器, 精度が最優先される分野です。患者モニターから手術ロボットまで、PREEMPT_RTは生命維持に不可欠なシステムの完璧な動作に必要な、決定論的なパフォーマンスを提供します。.

ホスティング環境のメリット

PREEMPT_RTの利点は、リアルタイム応答性が同様に重要となるホスティング環境にも及びます。 VPSと専用サーバー, スケジューラが優先度の高いタスクを重要度の低いタスクよりも優先させることで、レイテンシを最小限に抑えます。これにより、一貫した応答時間が確保され、ユーザーエクスペリエンスとサービスの信頼性に直接影響します。.

スレッド化された割り込みモデルは、大量のI/O操作中にシステムが「割り込みストーム」に襲われるのを防ぎます。 rt_mutex, 優先度の継承により、低優先度のバックグラウンドタスクが重要なホスティングサービスをブロックすることがなくなります。高解像度のタイマーによりマイクロ秒単位のスケジューリング精度が実現され、仮想化環境におけるジッターが低減されます。 Serverion, は、PREEMPT_RTを使用したカスタムカーネルビルドを提供しており、管理者は特定のワークロードに合わせて構成を微調整する柔軟性が得られます。 isolcpus そして irqaffinity, プロバイダーは、日常的なシステム操作を分離したまま、CPU コアをパフォーマンスが重要なタスク専用にすることができます。.

結論

このガイドでは、 先取りRT スケジューラにほぼ完全な制御を与えることで、Linuxをリアルタイムオペレーティングシステムへと変革します。Linux 6.12(2024年9月)以降のメインラインカーネルに組み込まれて以来、x86、ARM64、RISC-Vなどのアーキテクチャ間で外部パッチを適用する必要がなくなりました。.

コンセプトは単純明快です。プリエンプト不可能なコードを可能な限り削減することです。スピンロックをスリープロックに変換し、割り込みハンドラをスレッドとして実行することで、高優先度タスクはほぼすべてのカーネルアクティビティをプリエンプトできます。優先度継承などの機能は、低優先度タスクによる重要な操作の遅延を防ぎ、プリエンプト可能なRCUは、読み取り側のクリティカルセクションであっても大きな遅延が発生しないことを保証します。 セバスチャン・シエヴィオール, PREEMPT_RT のメンテナーは、次のように述べています。

"「すべての制御はスケジューラに委ねられます。」"

この技術的飛躍は実用的な利点をもたらします。例えば、, Serverion カスタム PREEMPT_RT カーネル ビルドを使用して CPU 分離を微調整し、リアルタイム ワークロードを最適化して、厳しい I/O 圧力下でも安定した応答時間を確保します。.

リアルタイムシステムを際立たせているのは、速度だけではありません。予測可能性も重要です。PREEMPT_RTはジッターを最小限に抑え、タスクが必要な時に正確に実行されることを保証します。これは、産業オートメーション、通信、パフォーマンスが重視されるホスティングサービスなどのアプリケーションにとって極めて重要です。PREEMPT_RTは、標準カーネルでは到底実現できないような決定論的な動作を実現します。.

メインラインカーネルへの統合と、次のようなエンタープライズディストリビューションからの支援により、 Ubuntuプロ (2023年2月以降)PREEMPT_RTは、ホスティングプロバイダーやシステム管理者にとってより利用しやすくなりました。今日の最も要求が厳しく、時間に敏感な環境に求められる、信頼性が高く低レイテンシのパフォーマンスを提供します。.

よくある質問

PREEMPT_RT は必要ですか、それとも標準の Linux で十分ですか?

標準のLinuxカーネルは、 PREEMPT_RT パッチ, リアルタイム機能が追加されました。これにより、低レイテンシと安定した応答時間が重要なアプリケーションに最適な選択肢となります。しかし、メインラインのLinuxカーネルだけでは、厳しいリアルタイム要求を満たすことができない可能性があります。.

PREEMPT_RT により、システム全体のスループットは低下しますか?

リアルタイムパフォーマンスを実現するために、, 先取りRT 非プリエンプティブカーネルコードの削減に重点を置き、システムの応答性を向上させます。このアプローチは全体的なスループットをわずかに低下させる可能性がありますが、一貫性と予測可能な動作を保証します。これは時間的制約のあるアプリケーションにとって非常に重要です。このトレードオフは意図的なものであり、リアルタイムシステムの要求を満たす上で中心的な役割を果たします。.

PREEMPT_RT で現実的なレイテンシ目標はどれですか?

先取りRT, デスクトップシステムと組み込みシステムの両方において、ミリ秒単位のレイテンシを実現することは現実的な目標です。しかし、実際のパフォーマンスは、システムが特定の要件を満たすように適切に構成・調整されているかどうかに大きく依存します。適切な設定は、望ましいレベルの応答性を確保する鍵となります。.

関連ブログ投稿

ja