web-dev-qa-db-ja.com

CPU使用率が高い原因となっているIRQを知るにはどうすればよいですか

ディスクコントローラーの障害のため、サーバーをメインボードから別のメインボードに移動しました。

それ以来、常にコアの25%が常にIRQに送られることに気づきましたが、その原因となっているIRQがどれであるかを自分で管理できませんでした。

カーネルはLinux 2.6.18-194.3.1.el5(CentOS)です。 mpstat -P ALL番組:

18:20:33     CPU   %user   %Nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
18:20:33     all    0,23    0,00    0,08    0,11    6,41    0,02    0,00   93,16   2149,29
18:20:33       0    0,25    0,00    0,12    0,07    0,01    0,05    0,00   99,49    127,08
18:20:33       1    0,14    0,00    0,03    0,04    0,00    0,00    0,00   99,78      0,00
18:20:33       2    0,23    0,00    0,02    0,03    0,00    0,00    0,00   99,72      0,02
18:20:33       3    0,28    0,00    0,15    0,28   25,63    0,03    0,00   73,64   2022,19

これは/ proc/interruptsです

cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       
  0:        245          0          0    7134094    IO-APIC-Edge  timer
  8:          0          0         49          0    IO-APIC-Edge  rtc
  9:          0          0          0          0   IO-APIC-level  acpi
 66:         67          0          0          0   IO-APIC-level  ehci_hcd:usb2
 74:     902214          0          0          0         PCI-MSI  eth0
169:          0          0         79          0   IO-APIC-level  ehci_hcd:usb1
177:          0          0          0    7170885   IO-APIC-level  ata_piix, b4xxp
185:          0          0          0      59375   IO-APIC-level  ata_piix
NMI:          0          0          0          0 
LOC:    7104234    7104239    7104243    7104218 
ERR:          0
MIS:          0

CPU使用率が高い原因となっているIRQを特定するにはどうすればよいですか?

編集:

dmesg | grep -i b4xxpからの出力

wcb4xxp 0000:30:00.0: probe called for b4xx...
wcb4xxp 0000:30:00.0: Identified Wildcard B410P (controller rev 1) at 00012000, IRQ 177
wcb4xxp 0000:30:00.0: VPM 0/1 init: chip ver 33
wcb4xxp 0000:30:00.0: VPM 1/1 init: chip ver 33
wcb4xxp 0000:30:00.0: Hardware echo cancellation enabled.
wcb4xxp 0000:30:00.0: Port 1: TE mode
wcb4xxp 0000:30:00.0: Port 2: TE mode
wcb4xxp 0000:30:00.0: Port 3: TE mode
wcb4xxp 0000:30:00.0: Port 4: TE mode
wcb4xxp 0000:30:00.0: Did not do the highestorder stuff
wcb4xxp 0000:30:00.0: new card sync source: port 3
21
eproyectos

まあ、具体的にはどのIRQがmpstatの数値の原因であるかを知る方法を尋ねているので、これらの数値はかなり等しいのでローカル割り込みタイマー(LOC)ではないと想定できますが、mpstatは、0%irqでそれらのCPUの一部を表示します。

これにより、システムタイマーで何も実行できないIRQ 0と、b4xxpドライバーに関連付けられているIRQ 177が残ります。

私の推測では、IRQ 177があなたの犯人だと思います。

これが問題の原因であり、表示される動作を変更したい場合は、以下を試してください。

  1. そのカードを使用するソフトウェアを無効にし、割り込みが減少するかどうかを確認します。

  2. そのカードをシステムから取り外し、ドライバーをアンロードして、改善があるかどうかを確認します。

  3. そのカードを別のスロットに移動し、それが役立つかどうかを確認します。

  4. ソフトウェアの更新されたドライバまたはパッチを確認します。

それが問題ではなく、興味があるだけなら、続けてください。 :)

22
Tim Kennedy
watch -n1 -d cat /proc/interrupts
5
sjas

BP410Pは4つのBRI回線を備えたISDNカードです。4つの回線すべてが接続されている場合、一度に4つの同期パケットを取得し、通話が行われているときに、送信するすべてのパケットなど、8つの音声チャネルをアクティブにすることができます。

呼び出しを行わずに高いIRQカウントを取得した場合、これは2つの悪いことの症状である可能性があります。

  1. オペレーターとの同期に問題があります。音声品質も悪いはずです。
  2. IRQ行が競合しています。この場合、ata_piix(ide/sata)はBP410Pカードと同じラインを使用していますが、ドライバーはそれほど気に入らない可能性があります。この場合、前の回答でカードを別のスロットに変更してみてください。

デバッグするには、BRIケーブルを取り外して、違いがあるかどうかを確認することもできます。

4
led42

私は少し前にそのような状況に気づき、何が起こっているのかを簡単に監視するための小さなirqtopツールを書きました。これは基本的にwatch -n 1 cat /proc/interruptsを実行するのと同じことですが、より優れた出力が得られます。

ここで入手可能なソースコード: https://gitlab.com/elboulangero/irqtop

2
elboulangero