Native POSIX Thread Library
Die Native POSIX Thread Library (NPTL) ist eine moderne Implementation einer Threading-Bibliothek für Linux. Sie wird in Verbindung mit der GNU C Library (glibc) verwendet und erlaubt Linux-Programmen die Verwendung von POSIX-Threads.
Geschichte
Seit der Kernel-Version 2.0 existierte für Linux die Threading-Biliothek linuxthreads, deren grundlegende Design-Prinzipien unter Einfluss der 1996 vorhandenen Beschränkungen des Linux-Kernels und der libc5 zustande gekommen waren. Diese Bibliothek war zwar kontinuierlich verbessert worden, aber schon lange nicht mehr zeitgemäß, und konzeptionell bedingt auch nicht reparierbar. Mittel der Wahl war daher eine komplette Neuimplementierung der Threading-Bibliothek.
Folgende Probleme wurden mit der existierenden linuxthreads-Implementation identifiziert:
- Sie benötigt einen Manager-Thread im Prozess, der weitere Threads erzeugt, wieder aufräumt und die Signalbehandlung kanalisiert
- Sie ist nicht POSIX-konform, da es zum Beispiel nicht möglich ist, ein Signal an den ganzen Prozess zu senden, bzw. der Kernel dafür sorgen muss, dass Signale wie SIGSTOP und SIGCONT an alle Threads im Prozess durchgereicht werden
- Unter Last wird die Performance schlecht, da das Signalsystem zum Zwecke der Synchronisierung missbraucht wird. Dies ist auch schlecht für die Stabilität
- Jeder Thread führt fälschlicherweise eine eigene Prozess-ID
- Auf der wichtigen IA-32-Architektur waren nur maximal 8192 Threads möglich
Neben der Behebung obiger Probleme wurden folgende Anforderungen an die neue Threading-Bibliothek gestellt:
- POSIX-Konformität, um Userspace-Quellcode wieder besser portierbar zu machen
- Effektive Benutzung von SMP und gute Skalierbarkeit, um auf Mehrprozessorsystemen die Performance zu steigern
- Darauf aufbauend NUMA-Unterstützung
- Niedrige Erzeugungskosten pro Thread
- Kompatibilität mit linuxthreads, das heißt alte Programme sollten ohne Neukompilierung mit der NPTL laufen
Unter diesen Voraussetzungen begann Mitte 2002 die Arbeit an der neuen Native POSIX Thread Library. Federführend geschah die Entwicklung bei der Firma Red Hat, da dort die maßgeblich involvierten Kernel- und glibc-Hacker Ingo Molnar und Ulrich Drepper beschäftigt waren. Im August/September 2002 wurde der 2.5er Linux-Kernel für die NPTL fit gemacht. Dazu war es notwendig, einige neue Syscalls einzuführen und vorhandene zu optimieren. In ersten Benchmarks konnten nun auf einem IA-32-System 100.000 parallele Threads aufgemacht werden, die in 2 Sekunden erzeugt werden konnten. Trotz dieser bemerkenswerten Last blieb das System während dieser Tests annähernd mit normaler Geschwindigkeit benutzbar.
Red Hat 9.0 war die erste Linux-Distribution, in der die NPTL verwendet wurde (und deren Benutzer dadurch bisweilen zu unfreiwilligen Betatestern wurden). Inzwischen benutzen praktisch alle modernen Distributionen die NPTL, wenn ein Kernel Version 2.5 oder höher verwendet wird. Gepatchte 2.4er Kernel bleiben eine Seltenheit.