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

Slides:



Advertisements
Similar presentations
二つの時間概念 ハードウェア時刻 –RTC (Real Time Clock) – コンピュータの電源が入っていないときでも、 バッテリーを用いて計測 システム時刻 –Software Clock とも – 起動時に RTC を参照して現在時刻を設定 以後は、タイマ割り込み時にインクリメント.
Advertisements

ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
【講座3】 MP T-Kernel入門 (株)日立超LSIシステムズ 豊山 祐一
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
クラスタの構成技術と クラスタによる並列処理
Chapter11-4(前半) 加藤健.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
全体ミーティング (4/25) 村田雅之.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
オペレーティングシステム (OSの機能と構造)
組込みシステムとは コンピュータ制御システム?
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
Linux リアルタイム・プリエンプションとULDDへの影響 - 進捗報告 -
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
オペレーティングシステム (割り込み処理)
Linuxカーネルについて 2014/01.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
割り込み.
CC/7700,CC32を用いた データ収集システム 筑波大学 木村 博美 小松原 哲郎 (c)2007 木村博美 筑波大学.
割り込み.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネストした仮想化を用いた VMの安全な帯域外リモート管理
オープンソフトウェア利用促進事業 第3回OSSモデルカリキュラム導入実証
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
ネットワーク性能に合わせた 分散遺伝的アルゴリズムにおける 最適な移住についての検討
アスペクト指向プログラミングを用いたIDSオフロード
1章 並列OS概論.
タイムスタンプ付ストリームI/Oによる音の実時間処理
Occam言語による マルチプリエンプティブシステムの 実装と検証
型付きアセンブリ言語を用いた安全なカーネル拡張
オペレーティングシステムJ/K (実時間処理システム)
RT-Linuxを用いた 多入力パルス波高分析システムの開発
仮想マシン間にまたがる プロセススケジューリング
独立大学法人・電気通信大学 大学院情報システム学研究科 情報ネットワーク学専攻・並列処理学講座
オペレーティングシステム イントロダクション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Linux Device Driver 輪講 7. 時の流れ
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
オペレーティングシステムJ/K 2004年11月18日
オペレーティングシステムJ/K 2004年11月15日2時限目
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
ウェブアプリケーションサーバの Degradation Schemeの 制御に向けて
B演習(言語処理系演習)第2回 田浦.
組込みシステムとは コンピュータ制御システム?
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
オペレーティングシステム (OSの機能と構造)
オペレーティングシステム (プロセススケジューリング)
実装について 前田俊行.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
オペレーティングシステムJ/K 2004年10月4日
タイムスタンプ付ストリームI/Oによる音の実時間処理
オペレーティングシステムJ/K (システムプログラミング)
6.5 セマフォ セマフォ(semaphore): 複数のタスク(もしくはスレッド)が「同期」または「相互排除」の制御のために取得(acquire)・リリース(release)できるカーネルオブジェクトの総称.
ネットワーク・プログラミング デバイスドライバと環境変数.
オペレーティングシステム (プロセススケジューリング)
強制パススルー機構を用いた VMの安全な帯域外リモート管理
SMP/マルチコアに対応した 型付きアセンブリ言語
オペレーティングシステム (OSの機能と構造)
C言語プログラミング・課題 ファイルを読み込んで、その内容を表示するプログラムを作成せよ。
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネットワーク・プログラミング マルチタスク.
ネットワーク・プログラミング プロセスとファイルシステム管理.
プログラミング 2 静的変数.
Presentation transcript:

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

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

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

優先度逆転 時刻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が実行される.

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

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

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と呼ぶ) に置換

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

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

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

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

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

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

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

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

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

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

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

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

新しいシステムコール 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) 実行を中断する.

サンプルプログラム #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, 500000 / 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();

サンプルプログラム #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;

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

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

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

プロセス間通信を用いる例 通常のプログラミングでは, 共有データ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();

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