Linuxの割り込み応答性能について
![]() 測定方法オシロスコープ校正用の1kHzクロック信号を割り込み信号としてプリンターポートに入力します。この割り込み信号をLinuxデバイスドライバで処理し、応答パルス信号をプリンタポートから出力します。プリンターポートに入力した割り込み信号と出力される応答パルス波をオシロスコープで観察することによってLinuxの応答遅延時間を測定しました。測定では他の割り込み源としてEthernetやハードディスク制御、RS-232C制御などの負荷を同時にかけた上で実施しました。
オシロスコープ校正用の信号はドライブ能力が低く直接プリンタポートに入力すると電圧がドロップしてしまい割り込みがかからなかったのでトランジスタによってバッファリングしました。 ![]() 本測定のために作成したプログラムは以下の通りです デバイスドライバ(割り込み処理関数の部分のみ抜粋) 20μ秒のパルスをデータポートに出力します。 static irqreturn_t tact_interrupt(int irq, void*dev_id) { tact_write_data( (unsigned char)0xff ); udelay(20); tact_write_data( (unsigned char)0 ); return IRQ_HANDLED; } イーサネットおよびHDDの負荷 Web上のリソースを連続してダウンロードします。 #!/bin/bash count=1 while [ $count -le 100 ]; do echo "################# Ethernet Load $count ##################" wget ftp://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.6.tar.bz2 count=`expr $count + 1` done シリアルポートの負荷 シリアルポートに連続して文字を出力します。 #!/bin/bash count=1 while [ $count -le 1000 ]; do echo "################# Serial port Load $count ##################" echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" > /dev/ttyS0 echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" > /dev/ttyS1 count=`expr $count + 1` done 測定環境●Linuxのバージョン
●プラットフォーム この測定で使用したパソコンはFujitu社PRIMERGY C150( Intel Pentium 4 1.8GHz / RAM 256MB )。サーバーとして使用していたタワータイプのIBM PC/AT クローンです。 ●MPU資源割り当て HZ値は250、つまり4ミリ秒。 /procは次のとおりです。 割り込み(IRQ) 0: 964 IO-APIC-edge timer 1: 199 IO-APIC-edge i8042 3: 2 IO-APIC-edge 4: 2 IO-APIC-edge 8: 2 IO-APIC-edge rtc0 9: 0 IO-APIC-fasteoi acpi 12: 65688 IO-APIC-edge i8042 14: 0 IO-APIC-edge ata_piix 15: 143575 IO-APIC-edge ata_piix 16: 1024331 IO-APIC-fasteoi r128@pci:0000:01:00.0 18: 58973 IO-APIC-fasteoi sym53c8xx 19: 0 IO-APIC-fasteoi uhci_hcd:usb1 20: 29448 IO-APIC-fasteoi eth0 23: 0 IO-APIC-fasteoi uhci_hcd:usb2 NMI: 0 Non-maskable interrupts LOC: 235048 Local timer interrupts RES: 0 Rescheduling interrupts CAL: 0 function call interrupts TLB: 0 TLB shootdowns SPU: 0 Spurious interrupts ERR: 0 MIS: 0 I/Oポート 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-0060 : keyboard 0064-0064 : keyboard 0070-0071 : rtc0 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : 0000:00:1f.1 0170-0177 : ata_piix 01f0-01f7 : 0000:00:1f.1 01f0-01f7 : ata_piix 02f8-02ff : serial 0376-0376 : 0000:00:1f.1 0376-0376 : ata_piix 03c0-03df : vga+ 03f6-03f6 : 0000:00:1f.1 03f6-03f6 : ata_piix 03f8-03ff : serial 04d0-04d1 : pnp 00:02 0800-087f : pnp 00:02 0cf8-0cff : PCI conf1 1000-101f : 0000:00:1f.2 1000-101f : uhci_hcd 1400-140f : 0000:00:1f.3 1800-181f : 0000:00:1f.4 1800-181f : uhci_hcd 1c00-1c0f : 0000:00:1f.1 1c00-1c0f : ata_piix 2000-2fff : PCI Bus 0000:01 2000-20ff : 0000:01:00.0 3000-3fff : PCI Bus 0000:02 3000-30ff : 0000:02:07.0 3000-30ff : sym53c8xx 3400-343f : 0000:02:08.0 3400-343f : e100 f000-f07f : 0000:00:1f.0 f000-f07f : pnp 00:02 f000-f003 : ACPI PM1a_EVT_BLK f004-f005 : ACPI PM1a_CNT_BLK f008-f00b : ACPI PM_TMR f010-f015 : ACPI CPU throttle f028-f02b : ACPI GPE0_BLK f02c-f02f : ACPI GPE1_BLK f060-f07f : iTCO_wdt f100-f10f : pnp 00:02 f180-f1bf : 0000:00:1f.0 f180-f1bf : pnp 00:02 f820-f82f : pnp 00:02 fe00-fe00 : pnp 00:02 結果測定の結果割り込み応答時間は10μ秒〜最大約100μ秒であることが判りました。ただし、この100μ秒という値はあくまでも測定回数の範囲内でのワーストケースであり、真のワーストケースは分りません。![]() 立ち上がり部分を拡大 ![]() 実用性についての考察もちろん、通常のLinuxカーネルをハードリアルタイム処理へ応用することはできませんが、この程度の遅延やジッタが許容できるアプリケーションであれば利用できるはずです。例えば、2行x16桁などのキャラクタ液晶表示器の制御するいくつかのデバイスドライバ、LCD4Linux、LCD-Linux、LCDproc などは良い例です。Copyright c 2001-2004 Ogane System Design Office
|