ディスクコントローラーの障害のため、サーバーをメインボードから別のメインボードに移動しました。
それ以来、常にコアの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
まあ、具体的にはどのIRQがmpstat
の数値の原因であるかを知る方法を尋ねているので、これらの数値はかなり等しいのでローカル割り込みタイマー(LOC)ではないと想定できますが、mpstat
は、0%irqでそれらのCPUの一部を表示します。
これにより、システムタイマーで何も実行できないIRQ 0と、b4xxpドライバーに関連付けられているIRQ 177が残ります。
私の推測では、IRQ 177があなたの犯人だと思います。
これが問題の原因であり、表示される動作を変更したい場合は、以下を試してください。
そのカードを使用するソフトウェアを無効にし、割り込みが減少するかどうかを確認します。
そのカードをシステムから取り外し、ドライバーをアンロードして、改善があるかどうかを確認します。
そのカードを別のスロットに移動し、それが役立つかどうかを確認します。
ソフトウェアの更新されたドライバまたはパッチを確認します。
それが問題ではなく、興味があるだけなら、続けてください。 :)
watch -n1 -d cat /proc/interrupts
BP410Pは4つのBRI回線を備えたISDNカードです。4つの回線すべてが接続されている場合、一度に4つの同期パケットを取得し、通話が行われているときに、送信するすべてのパケットなど、8つの音声チャネルをアクティブにすることができます。
呼び出しを行わずに高いIRQカウントを取得した場合、これは2つの悪いことの症状である可能性があります。
ata_piix
(ide/sata)はBP410Pカードと同じラインを使用していますが、ドライバーはそれほど気に入らない可能性があります。この場合、前の回答でカードを別のスロットに変更してみてください。デバッグするには、BRIケーブルを取り外して、違いがあるかどうかを確認することもできます。
私は少し前にそのような状況に気づき、何が起こっているのかを簡単に監視するための小さなirqtop
ツールを書きました。これは基本的にwatch -n 1 cat /proc/interrupts
を実行するのと同じことですが、より優れた出力が得られます。
ここで入手可能なソースコード: https://gitlab.com/elboulangero/irqtop