![我如何知道哪个 IRQ 导致 CPU 使用率过高](https://linux22.com/image/19073/%E6%88%91%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%93%AA%E4%B8%AA%20IRQ%20%E5%AF%BC%E8%87%B4%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E8%BF%87%E9%AB%98.png)
由于磁盘控制器故障,我已将服务器从一个主板移至另一个主板。
从那时起,我注意到其中一个核心的 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/中断
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
如何确定哪个 IRQ 导致 CPU 使用率高?
编辑:
输出来自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
答案1
好吧,既然您具体询问如何知道哪个 IRQ 负责 中的数字mpstat
,您可以假设它不是本地中断计时器 (LOC),因为这些数字相当相等,但mpstat
显示其中一些 cpu 处于 0 %中断。
剩下的就是 IRQ 0(系统定时器,您无法对其进行任何操作)和 IRQ 177(与您的 b4xxp 驱动程序相关)。
我的猜测是 IRQ 177 是你的罪魁祸首。
如果这导致了问题,并且您想更改您看到的行为,请尝试:
禁用使用该卡的软件,然后查看中断是否减少。
从系统中删除该卡,然后卸载驱动程序,看看是否有改进。
将该卡移动到另一个插槽,看看是否有帮助。
检查软件的更新驱动程序或补丁。
如果这不是问题,而您只是好奇,那么请继续。 :)
答案2
watch -n1 -d cat /proc/interrupts
答案3
BP410P 是带有 4 条 BRI 线路的 ISDN 卡,如果所有 4 条线路都已连接,您应该一次收到 4 个同步数据包,并且在拨打电话时,您可以有 8 个语音通道激活所有发送数据包等
如果您在没有进行任何调用的情况下获得较高的 IRQ 计数,这可能是以下两件坏事的征兆:
- 运营商存在同步问题,您的语音质量也应该很差。
- IRQ 线路冲突,在这种情况下,您的
ata_piix
(ide/sata)使用具有 BP410P 卡的同一条线路,驱动程序可能不太喜欢这种情况,在这种情况下,确实有之前的答案建议尝试将卡更改为另一个插槽。
要进行调试,您还可以尝试移除 BRI 电缆,看看是否有影响。
答案4
前段时间我发现自己遇到了这样的情况,我写了一个小irqtop
工具来轻松监控正在发生的事情。它基本上与执行 a 相同watch -n 1 cat /proc/interrupts
,但输出更好。
源代码可在此处获取:https://gitlab.com/elboulangero/irqtop