- Big Kernel Lock
-
Der Big Kernel Lock, kurz BKL, ist eine Technologie, die mit Linux 2.0 im Jahr 1996 eingeführt wurde, um die Ausführung von Kernelcode durch mehrere Prozessoren bzw. Kerne auf Multiprozessorsystemen zu verwalten. Der BKL verhindert, dass mehrere Kernel-(Sub-)Prozesse gleichzeitig (evtl. auf mehreren Kernen/Prozessoren) laufen, und schützt damit den Kernel (bzw. die Hardware) vor konkurrierenden Zugriffen auf Ressourcen wie System-Dateien auf der Festplatte. Im Grunde ist der BKL also ein Spinlock, bei dem ein Prozess eine Sperrvariable auf „gesperrt“ setzt, solange er z. B. auf die Festplatte zugreift. Hier setzt allerdings der Kernel selbst den Lock.
Inhaltsverzeichnis
Geschichte
BKL wurde mit Kernel 2.0 (1996) eingeführt, um die Nutzung von Multiprozessorsystemen zu ermöglichen. Nachdem Leistungseinbußen (s. Probleme) festgestellt wurden, wurde in Kernel 2.2 der separate I/O-Lock für das Input/Output-Subsystem eingeführt. Diese Aufsplittung in kleinere Locks für Subsysteme wurde bis 2.6 (aktuelle Generation) fortgeführt, was zu sehr kleinen Einzellocks (sogenannten fine-grained locks, übersetzt „feinkörnige Locks“) führte, mit denen nur kleine Bereiche „gelockt“ werden können.
In Kernel 2.6.37 wurde der BKL generell und weitgehend abgeschafft[1], wobei bestimmte Dateisystemtreiber wie der UDF-Treiber den BKL noch brauchen, was aber durch Patches in Linux 2.6.38 gelöst wird. Im Kernel-Kompilierungsvorgang gibt es jetzt eine neue Option, mit der das Kompilieren komplett ohne BKL-Unterstützung möglich ist.[2][3] Mit Version 2.6.39 wurde die Unterstützung für BKL endgültig aus dem Kernel entfernt.[4]
Nutzung und Vorkommen
Im Quelltext von Kernel 2.6 existieren trotz der Ausstiegsstrategie immer noch ungefähr 500 BKL-Aufrufe (
lock_kernel()
).Das rührt einerseits daher, dass in den Tiefen des Kernels noch solche Aufrufe behalten werden, beispielsweise für die Aufrufe
reboot()
odersysctl()
. Ebenfalls läuft der frühe Bootprozess mit eingeschaltetem BKL. Intensiv wird BKL auch von älteren Dateisystemtreibern genutzt, dazu gehören u. a. UFS, Coda, HPFS, das oft auf portablen Speichermedien eingesetzte FAT oder das Minix-Dateisystem. Auch gibt es einzelne Prozesse wie denrpciod
-Thread oder die Core Dump-Erstellung, die BKL nutzen.Etwa 10% aller
lock_kernel()
-Aufrufe stehen in alten, geächteten Soundtreibern und -Bestandteilen des Kernels, wohingegen ALSA (Advanced Linux Sound Architecture) bis auf eine Ausnahme keine BKL-Aufrufe nutzt.[5]Problematik
Die Problematik des BKL ist die äußerst mangelhafte Skalierbarkeit – bei Kernel 2.0 und einem System mit 2 Prozessoren sind deutliche Leistungseinbußen zu spüren, und das Laufen auf noch mehr Prozessoren ist problematisch. Aus diesem Grund wurde der BKL in Locks für kleinere Bereiche umgewandelt, siehe Geschichte.
Weblinks
- Meldung „Linux-Kernel 2.6.37 freigegeben“ auf www.pro-linux.de
- Artikel „The Big Kernel Lock lives on“ auf lwn.net
Einzelnachweise
Kategorien:- Betriebssystemtheorie
- Parallelverarbeitung
Wikimedia Foundation.