Der April war aus Kernel-Sicht eher ruhig. Die letzte Gelegenheit, ein „kurz erläutert“ zum BKL zu bringen, darf ich nicht verstreichen lassen, dafür konnte 2.6.39 nicht mit vielen aufregenden Funktionen aufwarten, über die in diesem Kernelrückblick berichtet werden kann. Dieser ist, neben vielen anderen interessanten Beiträgen, in der aktuellen Ausgabe von freiesMagazin enthalten.
Das Fenster für die Aufnahme von Neuerungen in den Linux Kernel 2.6.39 wurde bereits Ende März mit Erscheinen der ersten Vorabversion [1] geschlossen. Ein alter Bekannter hat uns verlassen: Nachdem der Big Kernel Lock zuletzt nur noch wenigen Treibern vorbehalten und in der Standardkonfiguration abgeschaltet war, verschwindet er mit den Worten „Total BKL removal, finally“ („vollständiges Entfernen des BKL, endlich“; Betreff der E-Mail an die Linux Kernel Mailing List) [2] nun endgültig aus dem Kernel. Damit geht ein fast drei Jahre dauerndes Projekt zu Ende, das Ingo Molnar im Mai 2008 gestartet [3] hatte. Das Ergebnis ist ein Kernel, dessen Bestandteile nun auf Mehrprozessorsystemen besser skalieren als dies bislang der Fall war.
Weiterhin wurde das „Block Device Plugging“ umgestellt, sodass dieses nun auf Threads bezogen ausgeführt wird, nicht wie zuletzt gerätebezogen, wodurch sich Aufrufe effizienter nutzen lassen. Als angenehmer Nebeneffekt wurde der Quellcode dabei aufgeräumt. Plugging und Unplugging bezeichnen das Deaktivieren bzw. Aktivieren des Treibers eines Block-orientierten Gerätes beziehungsweise seiner zugehörigen Warteschlange.
2.6.39-rc2 [4] wurde von Torvalds selbst als „ungewöhnlich ruhig“ bezeichnet, konnte aber dennoch einen neuen Treiber für LGs USB-LTE-Modem VL600 sowie Neuerungen am Wacom-Treiber, der 2-Fingergesten an Multitouch-Tablets ermöglichen soll, vorweisen. Die dritte Vorabversion [5] brachte auf den ersten Blick zwar große Änderungen, diese waren jedoch auf eine automatisierte Rechtschreibkorrektur hauptsächlich der Dokumentation und der Kommentare im Kernel-Code zurückzuführen. In über 2400 Dateien wurden Fehler wie zum Beispiel „Maintainence“ statt „Maintenance“ behoben, was damit über 90% der Dateien betraf. Die Änderungen am Block Layer Plugging sorgten auch für verschiedene Probleme, die mit dem -rc4 [6] teilweise behoben werden konnten. Ein verbliebener Effekt, der einen stetigen Strom von Meldungen über einen - imaginären - Wechsel der CD-ROM erzeugte, wurde mit dem -rc5 [7] beseitigt. Darin enthalten waren dann ebenfalls neue Geräte-IDs für Intels kommende Chipsatz-Generation „Panther Point“, die erstmals USB 3.0 ohne Zusatzchip unterstützen werden.
Kurz erläutert: „Big Kernel Lock (BKL)“Der Big Kernel Lock ist ein Mechanismus, mit dem verhindert wird, dass von mehreren Prozessoren oder Kernen der gleiche Kernel-Code gleichzeitig ausgeführt wird. Dieser Sperr-Mechanismus wurde beim Übergang zu Linux 2.2 1996 eingeführt, um Mehrprozessor-Systeme effektiver nutzen zu können. Er war von Anfang an als zeitweilige Lösung gedacht, bis bessere Mechanismen ein feineres Locking erlauben würden, da der BKL nicht nur Teile, sondern gleich den ganzen Kernel sperrt. Mittlerweile stehen Mechanismen zur Verfügung, die nur kleine Teile des Kernel sperren, wodurch die anderen, nicht gesperrten Bereiche weiterhin zugriffsbereit bleiben und eine wesentlich bessere Nutzung mehrerer vorhandener Prozessoren erreicht wird. Eine weitere negative Auswirkung ist der Punkt, dass eine Sperre mittels BKL eine Unterbrechung des vom BKL geschützten Kernel-Threads verhindert, selbst wenn weitere Threads mit höherer Priorität anstehen.
Da die Nutzung des BKL nicht wieder von alleine zurückging, wurde im Mai 2008 von Ingo Molnar das Projekt „Kill the Big Kernel Lock“ gestartet, das nun nach fast drei Jahren zu Ende geht. Das Ergebnis ist ein Kernel, dessen Bestandteile nun auf Mehrprozessorsystemen besser skalieren, dies gilt sowohl für Treiber als auch Kernbestandteile.
Links
[1] http://lkml.org/lkml/2011/3/29/351
[2] http://lkml.org/lkml/2011/3/16/420
[3] http://lkml.org/lkml/2008/5/14/324
[4] http://lkml.org/lkml/2011/3/29/351
[5] http://lkml.org/lkml/2011/4/11/378
[6] http://lkml.org/lkml/2011/4/19/6
[7] http://lkml.org/lkml/2011/4/27/8
