我怎么知道哪个 IRQ 导致 CPU 使用率高

epr*_*tos 22 cpu kernel centos

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

从那时起,我注意到其中一个核心的 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
Run Code Online (Sandbox Code Playgroud)

这是 /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
Run Code Online (Sandbox Code Playgroud)

如何识别导致 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
Run Code Online (Sandbox Code Playgroud)

Tim*_*edy 23

好吧,由于您特别询问如何知道哪个 IRQ 负责 中的数字mpstat,您可以假设它不是本地中断计时器 (LOC),因为这些数字相当相等,但仍mpstat显示其中一些 CPU 为 0 %伊拉克

这留下了 IRQ 0,它是系统计时器,您对此无能为力,而 IRQ 177 则与您的 b4xxp 驱动程序相关联。

我的猜测是 IRQ 177 将是你的罪魁祸首。

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

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

  2. 从系统中取出该卡,并卸载驱动程序,看看是否有改进。

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

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

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


sja*_*jas 6

watch -n1 -d cat /proc/interrupts
Run Code Online (Sandbox Code Playgroud)


led*_*d42 5

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

如果您在没有拨打任何电话的情况下获得高 IRQ 计数,这可能是 2 件坏事的征兆:

  1. 运营商存在同步问题,您的语音质量也应该很差。
  2. IRQ 线路冲突,在这种情况下,您的ata_piix(ide/sata) 使用与 BP410P 卡相同的线路,驱动程序可能不太喜欢那样,在这种情况下,建议尝试将卡更换到另一个插槽.

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