我如何知道哪个 IRQ 导致 CPU 使用率过高

我如何知道哪个 IRQ 导致 CPU 使用率过高

由于磁盘控制器故障,我已将服务器从一个主板移至另一个主板。

从那时起,我注意到其中一个核心的 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 是你的罪魁祸首。

如果这导致了问题,并且您想更改您看到的行为,请尝试:

  1. 禁用使用该卡的软件,然后查看中断是否减少。

  2. 从系统中删除该卡,然后卸载驱动程序,看看是否有改进。

  3. 将该卡移动到另一个插槽,看看是否有帮助。

  4. 检查软件的更新驱动程序或补丁。

如果这不是问题,而您只是好奇,那么请继续。 :)

答案2

watch -n1 -d cat /proc/interrupts

答案3

BP410P 是带有 4 条 BRI 线路的 ISDN 卡,如果所有 4 条线路都已连接,您应该一次收到 4 个同步数据包,并且在拨打电话时,您可以有 8 个语音通道激活所有发送数据包等

如果您在没有进行任何调用的情况下获得较高的 IRQ 计数,这可能是以下两件坏事的征兆:

  1. 运营商存在同步问题,您的语音质量也应该很差。
  2. IRQ 线路冲突,在这种情况下,您的ata_piix(ide/sata)使用具有 BP410P 卡的同一条线路,驱动程序可能不太喜欢这种情况,在这种情况下,确实有之前的答案建议尝试将卡更改为另一个插槽。

要进行调试,您还可以尝试移除 BRI 电缆,看看是否有影响。

答案4

前段时间我发现自己遇到了这样的情况,我写了一个小irqtop工具来轻松监控正在发生的事情。它基本上与执行 a 相同watch -n 1 cat /proc/interrupts,但输出更好。

源代码可在此处获取:https://gitlab.com/elboulangero/irqtop

相关内容