it-swarm.com.de

Verwendung der Lockdep-Funktion im Linux-Kernel zur Deadlock-Erkennung

Ich habe einen Linux-Kerneltreiber und eine Benutzer-App, die damit interagiert. Der Kerneltreiber hat einen Deadlock. Ich bin auf dieses Feature im Linux-Kernel namens " lockdep " gestoßen. Ich konnte es konfigurieren und meinen Kernel neu kompilieren (und ich sehe die lockdep-Ordner in/proc). Aber ich weiß nicht, wie ich auf die Ausgabe dieses Tools schließen oder wie ich den Treiber mit diesem Tool debuggen soll. Jede Hilfe wird sehr geschätzt. Vielen Dank!

12
brokenfoot

Um die Lockdep-Funktion zu aktivieren, bearbeiten Sie die .config-Datei über menuconfig:

make menuconfig

Und aktivieren Sie Folgendes in den Hacking-Optionen:

 1. [*] Detect Hard and Soft Lockups
 2. [*] Detect Hung Tasks
 3. [*] RT Mutex debugging, deadlock detection
 4. -*- Spinlock and rw-lock debugging: basic checks
 5. -*- Mutex debugging: basic checks
 6. -*- Lock debugging: detect incorrect freeing of live locks
 7. [*] Lock debugging: prove locking correctness
 8. [*] Lock usage statistics

Kompilieren Sie den Kernel neu:

make Arch=i386 -j4 //whatever your Arch is

Booten Sie nun das neue Kernel-Image. Unter/proc sollten Sie die folgenden neuen Ordner sehen:

/proc/lockdep
/proc/lockdep_chains
/proc/lockdep_stat
/proc/locks
/proc/lock_stats

Fügen Sie nun das Modul ein, von dem Sie glauben, dass es den Fehler verursacht, und greifen Sie mit Ihrer Benutzeranwendung darauf zu (oder wie auch immer Sie Ihr Treibermodul ausführen). Wenn die App blockiert (hängt), führen Sie Folgendes aus:

ps -aux | grep <app_name>

wenn für Ihre App ein + D-Status (unterbrechungsfreier Schlaf) angezeigt wird, führen Sie Folgendes aus:

dmesg

Das Protokoll, das gedruckt wird, enthält die Funktion/Datei, die den Deadlock verursacht.

Das ist es!

21
brokenfoot

Es gibt nicht viel zu tun - der Lockdep-Code gibt einfach eine Beschreibung der Situation und eine Stapelrückverfolgung zum Kernelprotokoll aus, wenn er auf eine Sperrsequenz stößt, die möglicherweise Deadlocks verursacht. Sie müssen nur Ihre Kernel-Ausgabe beobachten (über dmesg oder serielle Leitung oder was auch immer Sie verwenden).

Der Lockdep-Code debuggt nur Sperren und kann Sie nicht vor Deadlocks warnen, die von etwas anderem herrühren.

0
Andreas Bombe