
プロセッサまたはデータフローに時間要件が課せられる場合は、リアルタイムのオペレーティングシステムが必要です。したがって、多くの場合、特殊なデバイスの制御ユニットとして機能します。科学実験、医療画像アプリケーション、産業用制御装置はリアルタイムシステムです。自動車エンジンの燃料噴射機構、家庭用および軍用機器のコントローラーもリアルタイムシステムです。
さらに、イベントが異なれば、必要な時間も異なります。たとえば、アンチロックブレーキシステムの遅延要件は3〜5ミリ秒です。つまり、ホイールがスリップしていることを最初に検出した瞬間から、アンチロックブレーキを制御するシステムは、状況に対応して修正するために3〜5ミリ秒かかります。
リアルタイムカーネル機能は、オープンソースエコシステムで10年以上前から存在しています。リアルタイムカーネルに対するRedHat Enterprise Linux(RHEL)のサポートも同時に利用可能になりました。ただし、多くのシステム管理者は、その基本的な概念と実際の操作動作を誤って解釈しています。この記事では、その主な機能のいくつか、標準カーネルとの違い、およびインストール手順について説明します。
リアルタイムCPUスケジューラ
さまざまなクラスの問題について、ソフトリアルタイムシステムとハードリアルタイムシステムを指定できます。前者は、重要なプロセスがリアルタイムでスケジュールされる正確な時刻を保証するものではありません。それらは、プロセスが重要でないプロセスよりも優先されることを保証するだけです。後者にはより厳しい要件があり、タスクは指定された時間枠内に完了するか、完了していないと見なされます。
イベント遅延とは、イベントが発生してからサービスが提供されるまでの経過時間です。リアルタイムOSのパフォーマンスに影響を与える遅延には2つのタイプがあります。
- CPU . , . , interrupt service routine (ISR).

. 1 . - , , . , . .

. 2 .
リアルタイムオペレーティングシステムの最も重要な機能は、CPUリソースへのアクセスを必要とする重要なプロセスに即座に対応することです。その結果、リアルタイムオペレーティングシステムのスケジューラは、プリエンプティブ割り込みアルゴリズムをサポートする必要があります。これらのアルゴリズムは、重要度に基づいて各プロセスに優先順位を割り当てます。スケジューラがプリエンプションもサポートしている場合、CPU上の現在のプロセスはオンデマンドでプリエンプトされ、優先度の高いプロセスが優先されます。

図:3プランナーの分類。
リアルタイムスケジューラにはいくつかのアルゴリズムがあります。
- Rate-Monotonic Scheduling — . , . .

n, ln2 ≈ 0.693147. - Earliest-deadline-first (EDF) Scheduling . , , . RMS, EDF , . , , .

. 4 EDF.
. 4 T1 T2 , T2. T3 T1, 23. - POSIX real-time-scheduling. POSIX.4 . , .
- SCHED_FIFO — , « — » (FIFO). 32 .
- SCHED_RR — SCHED_FIFO, ( ) . 32 .
- SCHED_OTHER — ; - .
RHELリアルタイムのインストールと使用
まず、Red Hat Enterprise Linux Real Timeリポジトリに接続し、RTパッケージグループをインストールする必要があります。
[root@server ~]# subscription-manager repos --enable rhel-8-for-x86_64-rt-rpms
[root@server ~]# yum groupinstall RT
RTには、次のコンポーネントが含まれています。
- kernel-rt-リアルタイム機能を備えたカーネル。
- rt-setup -Red Hat EnterpriseLinuxリアルタイム環境のインストール。
- rt-tests -RT機能テストユーティリティ。
- rt-eval-特定のシステムでRTを使用する可能性を評価します。
RTをインストールして再起動した後、kernel-rtがロードされていることを確認してください。
[root@server ~]# uname -a
Linux rt-server.example.com 4.18.0-80.rt9.138.el8.x86_64 …
kernel-rtと標準カーネルの違いをいくつか見てみましょう。
- 高負荷では、タスクの優先度がチェックされます(1-99)。
- CPUリソースにアクセスするときは、優先度の高い(99)タスクが優先されます。
- Completely Fair Scheduling(CFS)ポリシーを適用しません。
- SCHED_FIFOまたはSCHED_RRポリシーを使用します。

図:5kernet_rtを標準カーネルと比較します。
グラフは、それぞれRHEL Linux7カーネルとRHELRealTimeカーネルを使用するシステムの100万回の繰り返し応答時間のサンプルを示しています。このグラフの青い点は、標準のRHEL 7カーネルを備えたシステムの応答時間(マイクロ秒単位)を表し、緑の点はRHEL7リアルタイムを表します。グラフから、kernel-rtの機能は分散がはるかに低く、したがって、システムの応答時間の予測可能性が高いことがわかります。
セットアップとテスト
RTをインストールした後、最も一貫したシステム応答時間を達成するために、追加の調整と調整が必要になる場合があります。このような要件は、金融または電気通信セクターの企業によって提示される場合があります。セットアップ自体は反復的なプロセスであり、プロセスの開始時には辛抱強く待つ必要があります。いくつかの変数を微調整して、可能な限り最良の結果が達成されたことを理解することが可能になる可能性はほとんどありません。rt-testsパッケージ
のhwlatdetectユーティリティは、クロックソースをポーリングし、あいまいなギャップを探すことにより、ハードウェアとファームウェアによって引き起こされる遅延を表示します。
[root@server ~]# hwlatdetect --duration=60s
hwlatdetect: test duration 60 seconds
detector: tracer
parameters:
Latency threshold: 10us
Sample window: 1000000us
Sample width: 500000us
Non-sampling period: 500000us
Output File: None
Starting test
test finished
Max Latency: Below threshold
Samples recorded: 0
Samples exceeding threshold: 0
この例では、パラメーターは遅延と検出方法を示します。デフォルトの遅延しきい値は10マイクロ秒(10μs)に設定されました。
RTには、負荷がかかった状態でリアルタイムのシステムパフォーマンスをテストするためのrtevalと呼ばれるユーティリティもあります。プログラムは、SCHED_OTHERスケジューラーを使用してシステムに大きな負荷をかけ、アクティブな各CPUのリアルタイム応答を測定します。目標は、メモリの割り当て/解放、ディスクI / O、計算、メモリのコピーなど、さまざまなタスクを常に実行し続けることです。
各測定スレッドはタイムスタンプを取り、特定の間隔でアイドル状態になり、ウェイクアップ時に別のタイムスタンプを取ります。測定遅延はに等しく
t1 - (t0 + i)、ここで
- t1-実際の測定時間。
- t0-最初のタイムスタンプの理論上のウェイクアップ時間。
- iは待機間隔です。
rtevalユーティリティレポートは次のようになります。
System:
Statistics:
Samples: 1440463955
Mean: 4.40624790712us
Median: 0.0us
Mode: 4us
Range: 54us
Min: 2us
Max: 56us
Mean Absolute Dev: 1.0776661507us
Std.dev: 1.81821060672us
CPU core 0 Priority: 95
Statistics:
Samples: 36011847
Mean: 5.46434910711us
Median: 4us
Mode: 4us
Range: 38us
Min: 2us
Max: 40us
Mean Absolute Dev: 2.13785341159us
Std.dev: 3.50155558554us
使用材料
- Abraham Silberschatz、Peter Baer Galvin、GregGagneオペレーティングシステムコンセプト第9版。
- Red Hat Enterprise Linuxをリアルタイムで実行する利点は何ですか?
- Red Hat EnterpriseLinuxのリアルタイムカーネルの操作
- RHELのレイテンシをリアルタイムで最適化するための高度なチューニング手順
