[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:21405] Linuxの割り込みについて



汐崎 と申します。
LinuxのOS又はKernelのoverheadを調べています。
OSの時間的な振る舞が,user_processに対して,
どの程度影響を及ぼすかを調べてみるというものです。
---
JF: Kernel Documentation: IO-APIC.txtを参照してみますと
以下の様な,cat /proc/interrupts の例があります。
   hell:~> cat /proc/interrupts
              CPU0       CPU1
     0:      90782          0   XT PIC   timer
     1:       4135       2375  IO-APIC   keyboard
     2:          0          0   XT PIC   cascade
     以下省略しています。
-----
MyPC=Linux-2.4.19(Plamo-3.0)での
cat /proc/interrupts の結果は,以下通りです。
           CPU0       
  0:     139583          XT-PIC  timer
  1:       5914          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  8:          1          XT-PIC  rtc
 11:         14          XT-PIC  aic7xxx
 12:       7146          XT-PIC  PS/2 Mouse
 14:       6774          XT-PIC  ide0
 15:          2          XT-PIC  ide1
NMI:          0 
LOC:          0 
ERR:          0
MIS:          0
----------
これから,MyPCでは,
APICは,使われていない(又は有効ではない)ことが分かります。
NMIも発生していない様子。
RTCもブート時に1度だけ発生するだけの様子。
ということが分かります。
-------
テストプログラムは,1msec周期のソフトタイマーを流し,
その周期時間が1msecからの誤差から類推するものです。
そこで,テストプログラムで,測定前に無理やり,
PIC8259(M/S)のマスクレジスタを0xFFFF値でマスクし,
測定後マスクレジスタを元に戻すことをしましたところ。
FreeBSDでは,その間,OSは全く眠った様になり,
測定後,誤差計算をする部分も正常に動作しますので,
OSは問題なくWakeupしているように振舞います。
そして,1msec周期誤差は全く発生していないのです。
ところが,Linuxでは,ほぼ,512msec毎に約52usecの誤差
(遅れ方向)が発生します。(CPUは233MHzのPentium)
#割り込みマスクを,0x0003値(system_timerとKB)とした場合も,
#誤差発生状況は同じ様です。
また,マスク操作を全くしない場合には,推察通り,10msecと,
その整数倍の時間間隔で周期誤差が発生します。
(この場合が,普通の場合の振る舞いでしょう)
----
そこで,Linuxでは,IRQ(0から15),NMI,APIC 以外に
Kernel又はOSが,動作する要因は何があるのでしょうか,
またはカーネルソースのどの当たりを調べたら良いかを
識者の方に,教えほしいのですが。
(普通の割り込みは,/usr/src/linux/arch/i386/kernel/irq.c
でしょうが,上記のように,これは,調査対象外と考えています。)
以上ですが,宜しくお願いします。
- - -
汐崎:H.Shiozaki
E-Mail: sios_hs(at)yahoo.co.jp

Follow-Ups
[plamo:21406] gkrellmが動きません, So

[検索ページ] [メール一覧]
Plamo ML 公開システム