Kernel

我如何知道哪個 IRQ 導致 CPU 使用率高

  • April 16, 2019

由於磁碟控制器故障,我已將伺服器從一個主機板移動到另一個主機板。

從那時起,我注意到其中一個核心的 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其中一些 cpu 顯示為 0 %中斷。

剩下的就是 IRQ 0,它是系統計時器,你不能對它做任何事情,而 IRQ 177,它與你的 b4xxp 驅動程序相關聯。

我的猜測是 IRQ 177 將是你的罪魁禍首。

如果這導致了問題,並且您想更改您看到的行為,請嘗試:

  1. 禁用使用該卡的軟體,並查看中斷是否減少。
  2. 從系統中刪除該卡,並解除安裝驅動程序,看看是否有改進。
  3. 將該卡移動到另一個插槽,看看是否有幫助。
  4. 檢查軟體的更新驅動程序或更新檔。

如果這不是問題,而您只是好奇,那麼繼續。:)

引用自:https://unix.stackexchange.com/questions/25203