Wie kann ich herausfinden, welcher IRQ für eine hohe CPU-Auslastung verantwortlich ist?

20

Ich habe einen Server aufgrund eines Festplattencontroller-Fehlers von einem Mainboard auf ein anderes verschoben.

Seitdem ist mir aufgefallen, dass ständig 25% eines der Cores an den IRQ gehen, aber ich habe es nicht geschafft zu wissen, welcher IRQ dafür verantwortlich ist.

Der Kernel ist ein Linux 2.6.18-194.3.1.el5 (CentOS). mpstat -P ALLzeigt an:

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

Dies ist der / 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

Wie kann ich feststellen, welcher IRQ die hohe CPU-Auslastung verursacht?

Bearbeiten:

Ausgabe von 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
eproyectos
quelle
1
ist das ein asterisk server was dmesg | grep -i b4xxpzeigt
Tim Kennedy
@ TimKennedy: ja das ist es. Ich habe meine Frage bearbeitet, um zu zeigen, was dmesg anzeigt.
Eproyectos

Antworten:

21

Nun, da Sie speziell fragen, wie Sie herausfinden können, welcher IRQ für die Nummer verantwortlich ist mpstat, können Sie davon ausgehen, dass es sich nicht um den lokalen Interrupt-Timer (LOC) handelt, da diese Nummern ziemlich gleich sind und dennoch mpstateinige dieser CPU-Werte bei 0% angezeigt werden. irq.

Damit bleiben IRQ 0, der Systemtimer, an dem Sie nichts ändern können, und IRQ 177, der an Ihren b4xxp-Treiber gebunden ist.

Ich vermute, dass IRQ 177 Ihr Schuldiger wäre.

Wenn dies ein Problem verursacht und Sie das Verhalten ändern möchten, versuchen Sie Folgendes:

  1. Deaktivieren Sie die Software, die diese Karte verwendet, und prüfen Sie, ob die Interrupts abnehmen.

  2. Entfernen Sie die Karte aus dem System und entladen Sie den Treiber.

  3. Verschieben Sie die Karte in einen anderen Steckplatz und prüfen Sie, ob dies hilfreich ist.

  4. Suchen Sie nach aktualisierten Treibern oder Patches für die Software.

Wenn es kein Problem ist und Sie nur neugierig waren, fahren Sie fort. :)

Tim Kennedy
quelle
Das Problem trat nach dem Ändern des MB auf. Vielleicht lohnt es sich, die Karte in einen anderen PCI-Steckplatz zu stecken.
Eproyectos
Überprüfen Sie diese Seite: voip-info.org/wiki/view/Asterisk+PCI+bus+Troubleshooter Gute Informationen zum Erkennen von Problemen, einschließlich IRQ-Problemen.
Tim Kennedy
4
watch -n1 -d cat /proc/interrupts
sjas
quelle
Dies beantwortet nicht die eigentliche Frage, die OP stellt.
Heemayl
Auf diese Weise sehen Sie die meisten Interrupt-Änderungen. Ich weiß, dass es mir bei der Fehlerbehebung genau des im Thema beschriebenen Problems geholfen hat .
So
4

BP410P ist eine ISDN - Karte mit 4 BRI - Leitungen. Wenn alle vier Leitungen verbunden sind, sollten Sie vier Synchronisierungspakete gleichzeitig erhalten, und wenn Anrufe getätigt werden, können 8 Sprachkanäle aktiv sein, auf denen alle Pakete usw. gesendet werden

Wenn Sie eine hohe IRQ-Anzahl erhalten, ohne dass Anrufe getätigt werden, kann dies ein Symptom für zwei schlechte Dinge sein:

  1. Es liegt ein Synchronisierungsproblem mit dem Operator vor. Außerdem sollte die Sprachqualität schlecht sein.
  2. IRQ-Leitungen stehen in Konflikt. In diesem Fall verwendet Ihr ata_piix(ide / sata) dieselbe Leitung wie die BP410P-Karte. Die Treiber mögen dies möglicherweise nicht sehr. In diesem Fall schlägt die vorherige Antwort vor, die Karte in einen anderen Steckplatz zu ändern .

Zum Debuggen können Sie auch versuchen, die BRI-Kabel zu entfernen und festzustellen, ob dies einen Unterschied macht.

led42
quelle
+1Ich werde Ihre Ratschläge überprüfen. Vielen Dank
eproyectos
1
Wow, schockierend. Das letzte Mal, dass ich Card-Jockey spielen musste, war Mitte der Neunziger. Ich habe den Begriff "Card-Jockey" seitdem nicht mehr verwendet. Ich dachte, das alles liege weit hinter uns, was mit APICs, MSI usw. zu tun hat
Alexios
2

Ich befand mich vor einiger Zeit in einer solchen Situation und schrieb ein kleines irqtopTool , mit dem ich einfach überwachen konnte, was los war. Es ist im Grunde dasselbe wie a watch -n 1 cat /proc/interrupts, mit einer schöneren Ausgabe.

Der Quellcode ist hier verfügbar: https://gitlab.com/elboulangero/irqtop

Elboulangero
quelle