Login
Newsletter
Werbung

Sa, 3. Juni 2006, 10:50

Software::Kernel

Code zum Validieren von Kernel-Locks

Ingo Molnar hat einen umfangreichen Patch vorgestellt, mit dem sich die korrekte Verwendung von Locks (Sperren) im Linux-Kernel prüfen läßt.

Der Patch, der in nicht weniger als 61 Teilen kommt, fand bereits Anklang bei den Kernel-Entwicklern und wird intensiv diskutiert und weiterentwickelt. Andrew Morton hat ihn für weitere Tests in seinen Kernel ab Version 2.6.17-rc5-mm1 aufgenommen.

Sperren sind ein essentieller Teil des Kernels, da sie die inkonsistente Änderung von Datenstrukturen verhindern, wenn zwei oder mehr Prozesse die gleiche Datenstruktur ändern wollen. Erreicht wird dies, indem Code-Abschnitte, die diese kritischen Datenstrukturen ändern, als »kritischer Abschnitt« behandelt werden. Sperren sorgen dafür, dass nur ein Prozess oder Thread gleichzeitig diesen Code-Abschnitt ausführen kann.

Sperren haben jedoch die unangenehme Eigenschaft, die Leistung des Systems zumindest potentiell zu vermindern, denn wenn zwei Prozesse die gleichen Daten ändern wollen, muss einer davon warten. Aus diesem Grund haben die Kernelentwickler außerordentlich viel Arbeit in die Entwicklung verschiedener Sperren für spezielle Zwecke und die Optimierung der Implementation gesteckt. Das führt dazu, dass die Regeln, die ein Kernel- bzw. Treiberentwickler beachten muss, um korrekten Code zu schreiben, sehr komplex sind. Fehler, die zu Deadlocks oder korrupten Datenstrukturen führen können, sind daher schwer zu vermeiden.

Molnars Patch arbeitet im Wesentlichen durch Lernen der Lock-Situationen im Kernel. Er führt also keine statische Code-Analyse durch, sondern beobachtet die Locks zur Laufzeit. Dies ist mit einigem Aufwand verbunden, so dass ein Kernel, der das Feature aktiviert hat, trotz Hashing und anderer Beschleunigungsmaßnahmen deutlich langsamer läuft. Um falsche Fehlermeldungen zu vermeiden, muss der Prüfcode selbst ein erhebliches Wissen über die verschiedenen Typen von Sperren im Kernel sowie deren korrekte Verwendung besitzen. Die vielen Spezialfälle, die behandelt werden müssen, tragen zur Größe des Patches bei.

Der Patch hat bereits zu einigen Meldungen geführt, von denen etwa die Hälfte Fehlalarme waren. So hat Arjan de Ven einen möglichen Deadlock in epoll diagnostiziert. David Miller hat nach eigenen Angaben bereits einige Fehler im Netzwerk-Code behoben, die schon während der Entwicklung von Molnars Patch entdeckt wurden. Auch im Soundtreiber emu10k und an anderen Stellen besteht der Verdacht auf inkorrekte Verwendung von Locks.

Ingo Molnars Patch ist nur ein kleiner Teil der Anstrengungen, die unternommen werden, um die Qualität des Kernel-Codes weiter zu verbessern. So wurde vor kurzem ein Patch vorgestellt, der Speicherlecks im Kernel finden soll. Auch dieser wird ständig weiterentwickelt. Systematische Tests führt das Linux Test Project (LTP) durch. Dieses Projekt verfügt lau Ingo Molnar über mehr als 7000 Test-Skripte, die teilweise mehr als einen Testfall behandeln. Diese Skripte werden automatisiert ausgeführt und von den Entwicklern ausgewertet. Andere Projekte testen die Reaktion des Kernels auf Aufrufe mit fehlerhaften Eingabedaten.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung