Presentation is loading. Please wait.

Presentation is loading. Please wait.

ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能

Similar presentations


Presentation on theme: "ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能"— Presentation transcript:

0 ARTLinux, ハードリアルタイム処理機能を拡張した Linuxカーネル

1 ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能
実時間タスクをユーザプロセスとして実行 多段階の優先度継承機能 ハードウェア割込を周期的にポーリング アプリケーションのバイナリ互換 Linuxの全システムコールを実時間処理に利用可能 デバイスドライバのソース互換 再コンパイルによって実時間処理に利用可能なバイナリを生成

2 ハードリアルタイムOS 実時間処理の定義 ハードリアルタイムスケジューリングの理論
得られた値だけでなく, 値を得た時刻にも依存して計算結果の正しさが決まる処理 ハードリアルタイムスケジューリングの理論 複数のタスクがあり, 開始時刻, 最悪実行時間, デッドラインが与えられているとき, デッドラインまでに処理の終了を保証する理論 プリエンプティブマルチタスク機能 固定優先度によるタスクスケジューリング機能 ハードリアルタイムOS 十分に短い割込応答性能

3 優先度逆転 時刻T1まで 最も高い優先度の処理1が実行される. 時刻T1 処理1が処理3の結果待ちになる.
処理2 処理3 T1 T2 T3 時刻T1まで 最も高い優先度の処理1が実行される. 時刻T1 処理1が処理3の結果待ちになる. 時刻T1からT2まで 中間の優先度の処理2が実行される. 時刻T2 処理2が終了. 時刻T2から時刻T3まで 処理3が実行される. 時刻T3から 処理1が実行される.

4 優先度継承 時刻T1まで 最も高い優先度の処理1が実行される. 時刻T1 処理1が処理3の結果待ちになる.
処理2 処理3 T1 T2 時刻T1まで 最も高い優先度の処理1が実行される. 時刻T1 処理1が処理3の結果待ちになる. 処理1の優先度が処理3に継承される. 時刻T1からT2まで 処理3が実行される. 時刻T2 処理3が終了. 時刻T2から 処理1が実行される.

5 Linux実時間拡張の分類 “A comparison of real-time Linux approaches”
URL: によると, non-CONFIG_PREEMPT CONFIG_PREEMPT CONFIG_PREEMPT_RT Nested OS Dual-OS/Dual-Core Migration Between OSes Migration Within OS ARTLinux

6 Linux実時間拡張の手法 non-CONFIG_PREEMPT CONFIG_PREEMPT CONFIG_PREEMPT_RT
ハードウェアの速度向上により, 応用によっては十分な実時間性能 CONFIG_PREEMPT クリティカルセクション以外ではプリエンプティブ クリティカルセクション脱出時にプロセススケジューリング CONFIG_PREEMPT_RT クリティカルセクション内にプリエンプトポイントを追加 spin lockを優先度継承機能 (ただし一段階と思われる) を持つsuspended lockに置換 ARTLinux 割込ハンドラを実時間タスク (プロセス) 内で実行 spin lockを多段階優先度継承機能を持つsuspended lock (real-time lockと呼ぶ) に置換

7 LinuxカーネルのSMP対応と実時間処理
UNIX 非プリエンプティブ Linux 2.0 非効率なSMP 複数のCPUが カーネルコードを 同時に実行できない 非リアルタイム Linux 2.2 Linux 2.4 Linux 2.6 効率的なSMP 同時に実行可能 プリエンプティブ ソフトリアルタイム SMPの効率化 ロックの細分化

8 割込応答時間の短縮 割込 割込応答時間 赤で示した期間は, 他のプロセスを実行している.
禁止期間 ハンドラ プリエンプト 延期期間 プロセス スイッチ ブロック 期間 アプリ ケーション 割込応答時間 赤で示した期間は, 他のプロセスを実行している. 割込応答時間を短縮するためには, 赤で示した期間を短縮する必要がある.

9 割込禁止期間の短縮 割込ハンドラとプロセス, 割込ハンドラ間の排他制御 ハードウェア割込マスク中 1. と同様
local_irq_disable()からlocal_irq_enable()までの間 割込ハンドラの実行中 最長時間はLinuxカーネルコードに依存 1. と同様 real-time schedulerやreal-time lock処理中の一部 割込ハンドラがプロセス内で実行されるため, プロセス間の排他制御に置換 最長時間はLinuxカーネルコードに非依存

10 プリエンプト延期期間 タイマ割込まで クリティカルセクション終了まで プリエンプトポイントまで 常に延期されない
タイマ割込周期によって短縮可能 クリティカルセクション終了まで ユーザコード実行中や, クリティカルセクション以外のカーネルコード実行中は, 延期されない. 最長時間はLinuxカーネルコードに依存 プリエンプトポイントまで クリティカルセクションがプリエンプトポイントで分割されるため, 1.より短縮される. 最長時間は修正されたLinuxカーネルコードに依存 常に延期されない

11 ブロック期間の短縮 クリティカルセクション中, つまりあるspin lockがロック中にプリエンプトして, そのspin lockにブロックされる場合 クリティカルセクション中はプリエンプトしないので, ブロックされない. 1. と同様 ロックが解除されるまで 優先度継承機能によって短縮される. 多段階にブロックされていた場合, 優先度逆転によって長時間になる. 多段階にブロックされていた場合でも, 多段階優先度継承機能によって短縮される.

12 ARTLinuxにおける割込時間短縮の手法
spin lockを suspended lockに置換 優先度 逆転が発生 多段階 ブロックが発生 Linuxカーネル コードに依存 Linuxカーネル コードに非依存 優先度 逆転を抑制 ブロック 期間が伸長 クリティカル セクションが伸長 多段階優先度 継承機能 割込禁止 期間の短縮 ブロック 期間の短縮 プリエンプト延期 期間の短縮 割込ハンドラを プロセス内で実行 割込応答 時間の短縮

13 割込ハンドラへの優先度継承 割込ハンドラの優先度設定 割込ハンドラ > 実時間タスク > 非実時間プロセス
割込ハンドラによって, クリティカルタスクの実行が阻害される. 実時間タスク > 割込ハンドラ > 非実時間プロセス 実時間タスクが割込ハンドラの実行待になった場合, 優先度逆転が発生する. どちらにも問題があり, アプリケーションに依存して決まる. 静的な設定方法 システムコールで割込ハンドラの優先度を設定する. 動的な設定方法 実時間タスクの優先度を割込ハンドラに継承する. ARTLinuxではwait_queueに優先度継承機能を持たせて, 割込ハンドラの優先度を動的に設定している.

14 割込ハンドラの周期実行 タイマ割込に基づいて実時間タスクの正確な周期実行を実現する.
タイマ以外のハードウェア割込を実時間タスク上で周期的にポーリングする. 割込応答時間が長くなる. 実時間処理に適当なのか? 実時間処理と割り込み処理は矛盾. 周期実行は割り込み処理のモデル化の一つ. デバイスを制御できるのか? 周辺ICの高機能化により素早い割り込みレスポンスは不要.

15 性能測定 指定周波数 (1000, 500, 200, 100, 50, 20, 10, 9, 8, 7μ秒) で実時間タスクを周期実行する. プロセッサ内蔵されているTime Stamp Counterで周期を計測する. 100,000回計測して, 誤差の絶対値を得る. プロセッサはIntel Pentium 4の2.40GHz

16 測定結果 (バックグラウンド無し)

17 測定結果 (バックグラウンドでDhrystone)

18 測定結果 (バックグラウンドでコピー)

19 新しいシステムコール int art_enter(art_prio_t prio, art_flags_t flags, int usec)
実時間タスクに変換する. int art_wait(void) 次の周期を待つ. int art_exit(void) 実時間実行を終了する. int art_wait_phase(unsigned long usec, art_prio_t prio) 指定した時刻を待つ. int art_yield(void) 実行を中断する.

20 サンプルプログラム #include <stdio.h> #include <stdlib.h>
#include <sys/io.h> #include <linux/art_task.h> #define TRUE 1 #define KBD_PORT 0x61 #define SPK_BIT 0x02 main(int argc, char *argv[]) { int temp, hz, i; hz = atoi(argv[1]); ioperm(KBD_PORT, 1, TRUE); art_enter(ART_PRIO_MAX, ART_TASK_PERIODIC, / hz); for (i = 0; i < hz * 5; ++i) { art_wait(); temp = inb(KBD_PORT); temp = (i & 1) ? temp | SPK_BIT : temp & ~SPK_BIT; outb(temp, KBD_PORT); } art_exit();

21 サンプルプログラム #include <stdio.h> #include <stdlib.h>
#include <unistd.h> #include <linux/art_task.h> int main(int argc, char *argv[]) { art_prio_t prio; if (argc < 3 || (prio = atoi(argv[1])) < ART_PRIO_MIN || prio > ART_PRIO_MAX) { fprintf(stderr, "usage: %s prio file arg ...\n", argv[0]); return -1; } if (art_enter(prio, ART_TASK_RR, 0) == -1) { perror("art_enter"); if (execvp(argv[2], &argv[2]) == -1) { perror("execvp"); return 0;

22 周期処理による実時間プログラミング 周期実行の誤差が十分に小さい. ハードウェア割込の応答時間が長い.
ARTLinuxでは周期処理に基づく実時間処理を推奨. ただし, イベント処理も可能. イベント処理 周辺デバイスが独自の「メトロノーム」によって動くシステム. 「メトロノーム」間の同期に割込が必要. プログラミングを複雑化しているのではないか? 周期処理 プロセッサが「指揮者」となって全体を動かすシステム. プロセス間通信でも時刻による同期でプログラミングが可能. 応用範囲は意外と広いのではないか?

23 システムコールを用いない例 本質的に周期的な処理であれば実装できる. モータサーボ 音声・動画の再生・キャプチャ art_enter();
for (;;) { art_wait(); /* * 処理 */ if (/* condition to finish */) break; } art_exit(); 本質的に周期的な処理であれば実装できる. モータサーボ 音声・動画の再生・キャプチャ

24 システムコールを用いる例 アプリケーションの実行周期が, 割込ハンドラの実行周期の整数倍なら実装できる.
int fd; fd = open(); art_enter(); for (;;) { art_wait(); write(fd); if (/* condition to finish */) break; } art_exit(); アプリケーションの実行周期が, 割込ハンドラの実行周期の整数倍なら実装できる. openしたデバイスの割込ハンドラだけに優先度が継承されるので, 設定する必要はない.

25 プロセス間通信を用いる例 通常のプログラミングでは, 共有データbufへのアクセス中はロックをかける必要がある.
char buf[]; write_thread() { art_enter(/* high priority */); for (;;) { art_wait(); for (int i) buf[i] = f(); if (/* condition to finish */) break; } art_exit(); 通常のプログラミングでは, 共有データbufへのアクセス中はロックをかける必要がある. しかし, read_thread()の実行開始前に, write_thread()の終了が保証されるので, ロックをかける必要はなくなる. read_thread() { art_enter(/* low priority */); for (;;) { art_wait(); for (int i) g(buf[i]); if (/* condition to finish */) break; } art_exit();

26 まとめ ARTLinuxはハードリアルタイム処理機能を持つOSカーネルである. ARTLinuxはLinuxカーネルである.
タスクの周期実行の誤差が十分に小さい. ARTLinuxはLinuxカーネルである. アプリケーションのバイナリ互換性, デバイスドライバのソース互換性がある. 周期実行基づくリアルタイムプログラミングは有効か? URL: で公開中.


Download ppt "ARTLinuxの特徴 ARTLinux: ハードリアルタイム処理機能を拡張したLinuxカーネル 固定優先度に基づくスケジューリング機能"

Similar presentations


Ads by Google