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 ALL
zeigt 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
dmesg | grep -i b4xxp
zeigtAntworten:
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 dennochmpstat
einige 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:
Deaktivieren Sie die Software, die diese Karte verwendet, und prüfen Sie, ob die Interrupts abnehmen.
Entfernen Sie die Karte aus dem System und entladen Sie den Treiber.
Verschieben Sie die Karte in einen anderen Steckplatz und prüfen Sie, ob dies hilfreich ist.
Suchen Sie nach aktualisierten Treibern oder Patches für die Software.
Wenn es kein Problem ist und Sie nur neugierig waren, fahren Sie fort. :)
quelle
quelle
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:
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.
quelle
+1
Ich werde Ihre Ratschläge überprüfen. Vielen DankIch befand mich vor einiger Zeit in einer solchen Situation und schrieb ein kleines
irqtop
Tool , mit dem ich einfach überwachen konnte, was los war. Es ist im Grunde dasselbe wie awatch -n 1 cat /proc/interrupts
, mit einer schöneren Ausgabe.Der Quellcode ist hier verfügbar: https://gitlab.com/elboulangero/irqtop
quelle