IRQ 16: nobody cared Problem beim Einsatz von mehreren NVIDIA Grafikkarten beheben

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Beim Einsatz von mehreren NVIDIA Grafikkarten in einem System kann es zum Fehler irq 16: nobody cared kommen wenn der Interrupt einer Grafikkarte aufgrund von Interrupt Sharing auch von einem anderen Subsystem (z.B. USB) genutzt wird. Das Ergänzen des Kernel Parameters acpi=debug kann dieses Problem lösen.

Problem

Der Betrieb von mehreren NVIDIA GTX460 Grafikkarten führt nach ein paar Sekunden bis Minuten zu einem Absturz der Grafikkausabe. Die Symptome sind dabei:

  • Auf dem Bildschirmen bleibt das zuletzt gerenderte Bild stehen.
  • Der Mauszeiger bewegt sich nicht mehr.
  • Ein Umschalten auf die Konsole ist nicht möglich.
  • Die Lüfter der Grafikkarten laufen innerhalb weniger Sekunden auf 100% hoch und bleiben dabei.
  • Über das Netzwerk und SSH ist der Rechner aber noch ansprechbar.

/var/log/messages zeigt die folgende Fehlermeldung:

kernel: [  473.230583] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  260.19.12  Fri Oct  8 11:17:08 PDT 2010
kernel: [ 4861.031152] irq 16: nobody cared (try booting with the "irqpoll" option)
kernel: [ 4861.031155] Pid: 0, comm: swapper Tainted: P           2.6.32-bpo.3-amd64 #1
kernel: [ 4861.031156] Call Trace:
kernel: [ 4861.031157]  <IRQ>  [<ffffffff8106bf33>] ? ktime_get+0x5c/0xb7
kernel: [ 4861.031165]  [<ffffffff81094c99>] ? __report_bad_irq+0x30/0x7d
kernel: [ 4861.031167]  [<ffffffff81094deb>] ? note_interrupt+0x105/0x16e
kernel: [ 4861.031171]  [<ffffffff810170d1>] ? read_tsc+0xa/0x20
kernel: [ 4861.031173]  [<ffffffff81095450>] ? handle_fasteoi_irq+0x93/0xb5
kernel: [ 4861.031174]  [<ffffffff81013957>] ? handle_irq+0x17/0x1d
kernel: [ 4861.031176]  [<ffffffff81012fb1>] ? do_IRQ+0x57/0xb6
kernel: [ 4861.031178]  [<ffffffff810114d3>] ? ret_from_intr+0x0/0x11
kernel: [ 4861.031179]  <EOI>  [<ffffffffa022a4e6>] ? acpi_idle_enter_bm+0x26a/0x29e [processor]
kernel: [ 4861.031189]  [<ffffffffa022a4df>] ? acpi_idle_enter_bm+0x263/0x29e [processor]
kernel: [ 4861.031192]  [<ffffffff8122dadb>] ? cpuidle_idle_call+0x95/0xee
kernel: [ 4861.031195]  [<ffffffff8100fe90>] ? cpu_idle+0xa2/0xda
kernel: [ 4861.031198]  [<ffffffff814d4140>] ? early_idt_handler+0x0/0x71
kernel: [ 4861.031200]  [<ffffffff814d4cd7>] ? start_kernel+0x3d0/0x3dc
kernel: [ 4861.031202]  [<ffffffff814d43b7>] ? x86_64_start_kernel+0xf9/0x106
kernel: [ 4861.031203] handlers:
kernel: [ 4861.031204] [<ffffffffa002473c>] (usb_hcd_irq+0x0/0x7e [usbcore])
kernel: [ 4861.031214] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031333] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031415] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031497] [<ffffffffa083a57a>] (nv_kern_isr+0x0/0x57 [nvidia])
kernel: [ 4861.031579] Disabling IRQ #16
kernel: [ 5335.503711] NVRM: Xid (0002:00): 16, Head 00000001 Count 00000000
kernel: [ 5336.502372] NVRM: Xid (0002:00): 16, Head 00000000 Count 00000006
kernel: [ 5340.497034] NVRM: os_pci_init_handle: invalid context!

Betroffene Hardware und Software

Das Problem wurde auf folgendem System beobachtet, kann potentiell aber auch auf anderen System auftreten:

  • 7046GT Server-Tower mit Supermicro X8DTG-QF Mainboard
  • vier NVIDIA GTX460 Grafikkarten
  • Debian 5.0 mit Kernel 2.6.32-bpo.3-amd64
  • proprietärer nVidia 260.19.12 (64-bit) Grafiktreiber

Lösung

Eine kurzfristige Lösung war zuerst im BIOS das USB-Subsystem auf disabled zu stellen, da sich offenbar die Grafikkarten und USB den IRQ16 teilen.

Bei aktiviertem USB hat das Ergänzen des Kernel Parameters acpi=debug das Problem dauerhaft gelöst.

Ursache

Eine definitive Ursache ist nicht bekannt. Vermutlich haben die Grafikkarten ein Timing-Problem und nehmen das IRQ-Signal nicht schnell genug vom Bus nach dem die ISR (Interrupt Service Routine) abgearbeitet wurde. Dadurch wird ein neuer IRQ ausgelöst, für den sich dann keine Komponente mehr zuständig fühlt. Durch den Parameter acpi=debug werden im Kernel einige wenige CPU-Instruktionen beim Abarbeiten der ISR zusätzlich ausgeführt, was dann ein paar Nanosekunden dauert. Während diesen wenigen Nanosekunden nimmt die Grafikkarte das IRQ-Signal weg vom Bus - somit kommt es zu keinem fehlerhaften Interrupt mehr.

Credit

Wir danken dem FlightGear Projekt für diesen wertvollen Hinweis.


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Apache und OpenSSL für Forward Secrecy konfigurieren
Direct und synchronized I/O unter Linux
Varnish Web Beschleuniger