割り込み応答性能について
Thomas Netter contributed to the RTLinux Project. ●OSのバージョン
ここで報告するリアルタイムLinuxのバージョンは1.1(Linux 2.0.36ベース)です。

●プラットフォーム
この調査で使用したパソコンはGateway社Solo9100。ノートブックタイプのIBM PC/AT クローンです。

構成部品スペック
MPUIntel Pentium II 266MHz
主記憶128Mbyte
グラフィックチップTrident Cyber 9397 PCI
ネットワーク3COM Fast EtherLink XL PC Card (3C575-TX)
固定ディスク(E-IDE)1台 約6Gbyte(このうちRT-Linuxには約2Gbyteを使用)
CD-ROM(E-IDE)1台
マウスPS/2
キーボード日本語106


●MPU資源割り当て
/procは次のとおりです。
割り込み(IRQ)
	 0:      15780   timer
	 1:        297   keyboard
	 2:          0   cascade
	 3:          0   3c575
	 8:          1 + rtc
	12:       3118   PS/2 Mouse
	13:          1   math error
	14:       3632 + ide0
	15:         29 + 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
	0100-013f : cb_enabler
	0170-0177 : ide1
	01f0-01f7 : ide0
	02f8-02ff : serial(auto)
	0376-0376 : ide1
	03c0-03df : vga+
	03f0-03f5 : floppy
	03f6-03f6 : ide0
	03f7-03f7 : floppy DIR
	03f8-03ff : serial(auto)
	fc90-fc97 : IDE DMA
	fc98-fc9f : IDE DMA

DMA
	 4: cascade

●テストプログラム
調査のために作成したテストプログラムはプリンターポートから入力される割り込み信号に対する応答としてパルス信号をプリンターポートへ出力するというものです。このプログラムは種種のパラメータをWWWブラウザーのGUIから設定できるようにしてあります。


注意:この画面でパラメータを設定しても今お使いのコンピュータには何も影響は与えません。

●結果
シグナルジェネレータを使って矩形波を生成しこれを割り込み信号としプリンターポートに入力しました。プリンターポートに入力した割り込み信号と出力される応答パルス波をオシロスコープで測定することによって結果を得ました。

測定条件
応答パルス幅:4.52μs
割り込みマスク:なし
割り込み要求(IRQ):7
出力ポート:LPT1(0x378)

最速値



1024回測定



測定の結果割り込み応答時間は約5μ秒〜約9μ秒であることが判りました。ただし、9μ秒はあくまでも1024回測定の範囲内でのワーストケースであり、真のワーストケースは分りません。原因は2つ考えられます。
  • タイマー割り込み処理時間(割り込みゲート+割り込みハンドラ+リアルタイム・スケジューラ)
  • 優先度の高い割り込み処理によって動作するLinuxのデバイスドライバー内での割り込みマスク

RT-Linuxの場合、カーネルに割り込みハンドラを要求するとカーネルはその関数のアドレスを
   void (*RTaction[16])(void);    
という配列のIRQの番号に相当する場所に格納します。プリンタ割り込み信号(IRQ7)が発生した場合、割り込みベクターから最初にカーネル内の次の場所(割り込みゲート)に制御が渡されます。この処理の中で更にRTaction[7]、つまりあらかじめ登録しておいた割り込みハンドラをコールします。ここまでの時間が最速でも5μ秒かかるということです。
rt_IRQ7_interrupt:
    push %ds
    push %es
    pushl %eax
    pushl %edx
    pushl %ecx
    movl $0x18,%edx
    mov %dx,%es
    mov %dx,%ds
    movb $0x20,%al
    outb %al,$0x20
    call *(RTaction + 7 * 4)
    popl %ecx
    popl %edx
    popl %eax
    pop %es
    pop %ds
    iret

一方、タイマー割り込みは優先度が高いため、他の割り込み処理を遅らせる効果があります。タイマー割り込みの処理の流れは下のようになっています。この間に他の優先度の低い割り込み処理は待たせられる、つまりこれが9μ秒の原因ではないかと考えられます。更に、もっと悪いことには、通常のLinuxにスケジューリングされた場合そのデバイスドライバが不用意に発する割り込みマスクのためこの割り込み遅延はもっと大きく不確定になる事が予測できます。

タイマー割り込み
IRQ0
割り込みゲート
rt_IRQ0_interrupt
割り込みハンドラ
rt_periodic_timer_irq
リアルタイム・スケジューラ
rtl_schedule

●実用性についての考察
リアルタイムOSとしてみた場合は割り込み遅延のワーストケースが予測できないことは問題です。従って、リアルタイムLinuxをリアルタイム処理へ応用する場合は事前にこの遅延が許容できるかどうかを判断すべきです。

Copyright c 2001-2004 Ogane System Design Office