어떤 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/interrupt 입니다

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

답변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 라인 충돌. 귀하의 (ide/sata)가 BP410P 카드와 동일한 라인을 사용하고 있는 경우 ata_piix드라이버는 이것을 별로 좋아하지 않을 수 있습니다. 이 경우 실제로 카드를 다음으로 변경하려고 제안하는 이전 답변이 있습니다. 또 다른 슬롯.

디버깅하려면 BRI 케이블을 제거하여 영향을 미치는지 확인할 수도 있습니다.

답변4

나는 얼마 전에 이와 같은 상황에 처해 있었고 irqtop무슨 일이 일어나고 있는지 쉽게 모니터링할 수 있는 작은 도구를 작성했습니다. 기본적으로 을 수행하는 것과 동일 watch -n 1 cat /proc/interrupts하지만 출력이 더 좋습니다.

소스 코드는 여기에서 확인할 수 있습니다:https://gitlab.com/elboulangero/irqtop

관련 정보