Mein System ist ein CentOS 6.3
(laufende Kernel-Version 2.6.32-279.el6.x86_64
).
Ich habe ein ladbares Kernel-Modul, das ein Treiber ist, der eine PCIe-Karte verwaltet.
Wenn ich den Treiber manuell mit insmod
einfüge, während das Betriebssystem ausgeführt wird, wird der Treiber erfolgreich geladen und ist betriebsbereit.
Wenn ich jedoch versuche, den Treiber mit rpm zu installieren und dann das System neu zu starten, bleibt das Betriebssystem während des Startvorgangs stecken und spuckt die folgende "soft lockup" -Nachricht für ALLE CPU-Kerne aus, mit Ausnahme eines Kerns, der "weich" ist Lockup "in einem der von meinem Treiber erstellten Threads.
%Vor%Ich habe das Netz ein wenig nach Informationen über diesen Kernel msg / bug durchsucht, und es gibt ziemlich viele Posts darüber, keine darüber, was es verursacht oder wie man debuggt. Jede Hilfe mit den folgenden Fragen würde wirklich geschätzt werden:
Ich kann mich nicht am System anmelden. Ich denke, das liegt daran, dass sich alle Kerne in einem "Soft-Lockup" -Zustand befinden und daher keinen Kernel-Dump von der Shell-Eingabeaufforderung auslösen können. Ich habe SysRq aktiviert und versucht, einen Kernel-Dump mit SysRq-Key-Combo auszulösen, aber kein Glück. Es scheint, dass das System nicht auf die Tastatur reagiert (nicht einmal auf die CapsLock-Taste). Irgendwelche Vorschläge, wie ich in diesem Fall einen Kernel-Dump auslösen kann?
Ich kann mir vorstellen, dass möglicherweise mein Treiber Thread "Soft Lockup" verursacht. Aber wie kann der Thread "Migration" (ein Kernel-Thread) nur wegen meines Treibers in einer "weichen Sperre" sein?
Beim Durchsuchen des Netzes wird der Thread "Migration" verwendet, um Aufgaben von einer CPU in eine andere zu verschieben. Kann mir bitte jemand helfen, zu verstehen, was dieser Thread genau macht? Und wie kann es von anderen Threads beeinflusst werden, wenn überhaupt.
Ich hatte ein sehr ähnliches Problem auf meinem Desktop. Es würde sehr oft eine lockere Verbindung eingehen - etwa einmal am Tag oder so.
Es stellte sich heraus, dass es war, weil ich auf einem Intel Haswell lief. Es scheint, dass die Haswell / Broadwell-Reihe von Intel-Prozessoren einen Fehler aufweist, der Systeminstabilität verursachen kann. Dieser Fehler wurde in einem Microcode-Update behoben.
Prüfen Sie, ob CentOS ein Intel-Microcode-Paket anbietet und installieren Sie es. Stellen Sie sicher, dass Sie grub so konfigurieren, dass es als initiale Ramdisk geladen wird, bevor es initramfs lädt.
Persönlich habe ich meinen Mikrocode aktualisiert, indem ich in Windows gestartet und ein BIOS-Update ausgeführt habe. Sie können überprüfen, ob der Microcode tatsächlich aktualisiert wurde, indem Sie die Ausgabe von grep 'microcode' /proc/cpuinfo
vor und nach dem Update vergleichen.
Tags und Links linux driver linux-kernel kernel-module centos