リアルタイム性能について | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ここで報告するリアルタイムLinuxのバージョンは0.6(Linux 2.0.33ベース)ですが1999年5月現在では次のようになっています。
この調査で使用したパソコンは、現在では陳腐化した感のあるデスクトップタイプのIBM PC/AT クローンです。
●MPU資源割り当て /procは次のとおりです。 割り込み(IRQ) 0: 2025939 timer 1: 3072 keyboard 2: 0 cascade 6: 85 + floppy 8: 1 + rtc 10: 0 3c509 12: 338883 PS/2 Mouse 13: 1 math error 14: 657115 + ide0 15: 441 + ide1 I/Oポート 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-009f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : npu 0170-0177 : ide1 01f0-01f7 : ide0 0210-021f : 3c509 02f8-02ff : serial(auto) 0376-0376 : ide1 0378-037f : lp 03c0-03df : vga+ 03f0-03f5 : floppy 03f6-03f6 : ide0 03f7-03f7 : floppy DIR 03f8-03ff : serial(auto) DMA 2: floppy 4: cascade●テストプログラム 調査のために作成したテストプログラムはリアルタイム処理としてプリンターポートや、RS232Cポートからパルスを出力しそのパルス幅を制御しようというものです。このプログラムは種種のパラメータをWWWブラウザーのGUIから設定できるようにしてあります。 注意:この画面でパラメータを設定しても今お使いのコンピュータには何も影響は与えません。 ●結果 プリンターポートや、RS232Cポートから出力されるパルス波をオシロスコープで測定することによって結果を得ました。
![]() 下のグラフで判るようにパルス周期や負荷の種類に関係なくパルス幅は繰り返し回数に対して直線的に変化します。 ![]() 上のグラフの傾きを計算することによって1回当たりの処理時間を求めました。
繰り返し負荷を与えている部分のアセンブルリストは次のとおりです。
NOP命令の処理時間 = アイドリング処理時間 + 3.3ナノ秒になることが予測できます。また、先の測定結果もこれによく一致しています。従って、出力するパルス幅を制御することは可能であると言えます。 1μ秒の遅延はI/Oポート(0x80)への書き込みによって実現していますが何と700ナノ秒も余分に時間がかかっています。この原因は不明ですが、次の事が疑われます。
制御への応用を考えた場合、制御則演算のための浮動少数演算能力を把握しておく必要があります。今、通常のLinuxを動作させつつ1ミリ秒周期の制御をする事を想定すると、今回の環境では浮動少数積算が15000回程度実行できる事が判りました。この回数の処理するのに700μ秒であり30%の余裕を持っています。この余裕は次の理由によって必要です。 リアルタイムLinuxはクロックを割り込み源としてユーザタスクをスケジュールします。通常のLinuxはユーザタスクといっしょに最も低い優先度でスケジューリングされますのであまりユーザタスクの負荷が重いと通常のLinuxがスケジューリングされず、ユーザータスクだけが実行されている状態になります。つまり、この状態では通常のLinuxOSそのものとそのアプリケーションプログラムは動作が停止してしまいます。これではLinuxは単なるローダーに過ぎずLinuxの長所を生かせないのでLinuxを使う意味が薄れてしまいます。 注意を要するのはLinuxの割り込みマスクによるリアルタイム処理が遅延される事です。パルス周期100μ秒でパルス幅を制御しようとした時、±10μ秒程度のスキューが観測されました。クロック割り込みは最も高い割り込み優先度を持つので割り込みマスクを掛けられること以外にリアルタイム処理のスケジューリング間隔が乱されることは考えられません。リアルタイム処理がない時間に通常のLinuxがスケジューリングされ、Linuxのカーネルもしくはドライバが動作するときに長い時間(今回の場合数10μ秒以上)割り込みマスクを掛けてしまう事が最も考えられる事です。実際に、fsckコマンドを発行して固定ディスクをアクセスしたり、マウスを移動させたときにこの現象が観測されました。従って、リアルタイムLinuxをリアルタイム処理へ応用する場合は事前にこの遅延が許容できるかどうかを判断すべきです。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright c 2001-2004 Ogane System Design Office
|