Montag, Januar 03, 2011

Uhhuh. NMI received for unknown reason a1 on CPU 0

Ubuntu neigte dazu, mit folgender Fehlermeldung im "kern.log" unter /var/log einzufrieren.

Uhhuh. NMI received for unknown reason a1 on CPU 0.

Manchmal auch:
Uhhuh. NMI received for unknown reason a0 on CPU 0.

Ich verwende ein Thinkpad T60, mit Radeon X1400 Grafikkarte unter Ubuntu 10.10.

Für mich war das ein riesen Problem, da ich das Notebook nicht zum Spielen oder Surfen verwende, sondern auch, um damit Präsentationen zu halten. Um die Fehler überhaupt debuggen zu können, musste ich den Kernel Log Daemon installieren, der dann alle Kernel Meldungen beim Absturz und Start in die Datei "/var/log/kern.log" protokolliert.

Installiert wird er mit
sudo apt-get install klogd

Ich wurde auf den folgenden Launchpad-Artikel aufmerksam, der das NMI-Problem auf anderen Systemen beschreibt.


Es scheint, dass es mit der Energiesparfunktion der neuen Kernel-Generationen zu tun hat, die hier beschrieben wird:


D.h. es liegt an Geräten, die in den Energiesparmodus wechseln.
Ich konnte auf meinem Thinkpad T60 das Problem hinauszögern, indem ich meine interne WLAN-Karte über das BIOS vesteckt hatte. Allerdings stürtze er dann immer noch gelegentlich ab. Ich installierte auch das ACPI Werkzeug "TLP" für Thinkpad Laptops und konfigurierte es entsprechend meiner Vermutungen.
Ich erkannte, dass es an anderen Geräten (z.B. externen Festplatten) lag, die auch die ACPI Funktionen nutzten.

Ich habe zur Lösung des Problems folgenden Workaround getestet:

1. Step
Wechseln zu root

sudo su -

2. Step
Verzeichnis erzeugen und Skript

mkdir scripts
nano scripts/usb-control.sh

3. Step
Inhalt des Skripts

#!/bin/bash
for i in /sys/bus/usb/devices/*/power/control; do echo on > $i; done
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo -1 > $i; done
for i in /sys/bus/pci/devices/*/power/
control; do echo on > $i; done

4. Step
Das Skript ausführbar machen

chmod +x scripts/usb-control.sh

5. Step
Crontab editieren, damit das Skript unter dem Konto "root" alle 5 Minuten ausgeführt wird.

crontab -e

6. Step
Folgenden Eintrag unten in der Crontab hinzufügen. (Zwischen den Werten einen Tabulator (Tab-Taste) verwenden)

*/5 * * * * /root/scripts/usb-control.sh

(Also so: */5tab*tab*tab*tab*tab/root/scripts/usb-control.sh)

7. Step
Damit werden jetzt bei allen USB-Geräten, auch den neu gesteckten die ACPI Suspend Funktion deaktiviert.

Wer noch andere Fehlermeldungen in seinem "kern.log" hat, bitte noch folgenden Eintrag im Blog beachten.


Wem diese Beschreibung geholfen hat, bitte einen kurzen Kommentar hinterlassen, damit ich weiß, dass ich das hier nicht umsonst mache. Hoffe, es hilft euch wie mir. Ich will auf keinen Fall mehr zu Windows zurück wechseln müssen.

4 Kommentare:

Unknown hat gesagt…

"und konfigurierte es entsprechend meiner Vermutungen?"
Das bedeutet? tlp wifi off?

Selbes Problem mit t60 und ubuntu 10.10 hier.

Passiert aber auch ohne externe Geräte.
Tastatur und Maus mal ausgenommen...

:(

4nc4p hat gesagt…

Wifi habe ich schon über das BIOS deaktiviert. Derzeit nutze ich eine PCMCIA-Wlan-Karte. USB-Stick würde auch gehen, wenn man mein Skript entsprechend benutzt.

TLP ist kein Thema mehr, denn es geht um die POWER-Einstellungen der Geräte, d.h. USB und alles auf dem PCI-Bus.

Ich habe mein Script um eine Zeile ergänzt, die universell helfen sollte. Ich habe es bisher nicht getestet/gebraucht, da ja meine interne WLAN-Karte erst mal aus ist. (HIDDEN im BIOS)

Sollte damit aber laufen. Wenn nicht, auch mal die Karte im BIOS deaktivieren.

Du kannst auch mal folgende Zeilen ausführen und Dir ansehen, welche Geräte noch "auto" sind.

for i in /sys/bus/pci/devices/*/power/control; do echo $i && cat $i; done

guntbert hat gesagt…

DANKE - bin gerade über dasselbe Problem gestolpert (erst seit ein/zwei Wochen?).
Mein System: T60 (2007), mit Radeon X1300, Ubuntu 10.10.
alle pci-Geräte waren auf "on", Hauptverdächtiger: der fingerprint-reader, bei dem hab ich (weil er manchmal heiss wird), die powercontrol bewusst auf "auto" gestellt.

4nc4p hat gesagt…

Update:
Es ist damals seltener aufgetreten.
Was letztlich geholfen hatte, war die fglrx Pakete zu deinstallieren und stattdessen xserver-xorg-video-radeon
zu benutzen.
Außerdem lasse ich "vboxdrv" nicht mehr per default starten.
Hatte schon lange keinen Freeze mehr.