Kernel-Log – Was 3.8 bringt (2): Infrastruktur

Anwender ohne Root-Rechte sollen künftig Container einrichten können, in denen Software läuft, die Root-Rechte benötigt. Linux 3.8 belegt in bestimmten Situationen weniger Speicher und bringt Verbesserungen für NUMA-Systeme; die Unterstützung für Intels 386er flog raus.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen
Lesezeit: 31 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Linux 3.8 schließt die größere Umbauarbeiten zur Unterstützung für User Namespaces weitgehend ab, die Eric W. Biederman in den letzten Monaten vorangetrieben hat. Durch diese Änderungen können nun auch unprivilegierte Anwender einen abgeschotteten Bereich aufsetzen, in dem sie Root-Rechte haben; der Anwender darf dort aber nichts tun, was privilegierte Aktionen außerhalb des Namespace erfordern würde.

Die Verbesserungen sind etwa für Container-Virtualisierung interessant, damit Anwender dort auf Software betreiben können, die Root-Rechte benötigen, ohne den Rest des Systems zu gefährden. Durch die Umbauten lässt die Technik jetzt sogar ein Verschachteln zu, sodass Anwender in einem Container einen abgeschotteten Bereich einrichten können – etwa in einem virtuellen Server, den der Web-Hoster mit Container-Techniken bereitstellt. Details zu den User Namespaces und anderen Namespace-Techniken erläutern LWN.net in einer Artikelserie, die bisher vier Teile umfasst (1, 2, 3, 4). Ganz abgeschlossen sind die Umbauarbeiten aber noch nicht, daher lassen sich die User Namespaces bei der Konfiguration von Linux 3.8 nur aktivieren, wenn diverse Dateisysteme (darunter Ceph, CIFS, GFS2, NFS, OCFS2 und XFS) außen vor bleiben.

Der Cgroup-Controller memory hat die Erweiterung kmem enthalten (u. a. 1, 2, Dokumentation). Über sie lässt sich der Speicher begrenzen, den der Kernel intern zur Verwaltung von Prozessen benötigt. Bei passend konfigurierten Limits soll der Kernel dadurch eine Fork-Bombe auch in Containern im Zaum halten können.

Nach langen, teilweise heftigen Streitigkeiten zwischen verschiedenen Kernel-Entwicklern wurden einige unter dem Schlagwort "Balancenuma" entwickelte Funktionen für Linux 3.8 aufgenommen (u. a. 1, 2, 3, 4, 5). Im Idealfall kann der Kernel durch sie automatisch Prozessor und Arbeitsspeicher eines Prozesses zusammenhalten. Solch eine Platzierung ist für optimale Performance auf den heute verbreiteten Multiprozessor-Systemen mit NUMA (Non-Uniform Memory Access) wichtig, denn ein Prozess kann dort auf den Arbeitsspeicher des Prozessors, auf dem er läuft, schneller zugreifen als auf den Speicher anderer Prozessoren. Bei Linux 3.9 und späteren Versionen sollen Verbesserungen für die automatische Platzierung folgen, die auf den jetzt integrierten Grundlagen aufbauen.

Bei Kernels mit Unterstützung für Transparent Huge Pages kann Linux 3.8 eine "Huge Zero Page" vorhalten, die als gemeinsamer, mit COW (Copy-on-Write) genutzter Ausgangspunkt für neue Huge Pages dient (u. a. 1, 2, 3, 4, 5). Das kann den Speicherverbrauch erheblich reduzieren, wenn diese Speicherbereiche nur angefordert, aber gar nicht beschrieben werden.

Mehr Infos

Entwicklungsstand

Anfang Februar hat Linus Torvalds die sechste Vorabversion von Linux 3.8 veröffentlicht. Dabei schärfte er seinen Zuarbeitern ein, sie sollen von nun an nur mehr Korrekturen für Fehler einsenden, die auch von Belang sind. Wie Torvalds erläutert, arbeitet er wie gewohnt darauf hin, dass der siebte RC möglichst der Letzte sei; er erwähnt aber auch, durchaus noch einen RC8 zu veröffentlichen, wenn ein solcher nötig sei.

Da neue Vorabversionen ungefähr im Wochenrhythmus erscheinen, dürfte Linux 3.8 zur Februarmitte oder ungefähr eine Woche später erscheinen, sofern Torvalds nicht noch weitere RCs ansetzt.

Das Kernel 3.8 beiliegende Diagnosewerkzeug Turbostat kann bei neueren Intel-Prozessoren auslesen, wie viel Watt die einzelnen Grafik- und Prozessorkerne und der Prozessor als Ganzes ungefähr verbrauchen.

Der Linux-Kernel erhielt einen Balloon Driver für Hyper-V. Bei Linux-Gästen mit diesem Treiber kann Microsofts Hypervisor zur Laufzeit einen Teil des Gast-Arbeitsspeichers vorübergehend an den Host überstellen und ihn später auch wieder zurückgeben; ein Vergrößern des Arbeitsspeichers oberhalb des beim VM-Starts festgelegten Wertes gelingt weiterhin nicht.

Über das neue UEFI Variable filesystem (efivars) lassen sich nun auch EFI-Variablen lesen und setzen, die größer als 1 KByte sind. Fedora nutzt das typischerweise unter /sys/firmware/efi/efivars/ ([Update 20130212-1245: an dieser Stelle stand zuvor fälschlicherweise /sys/firmware/efi/vars/ [/Update]) eingehängte Dateisystem bereits in Version 18 zum Datenaustausch mit der MOK-Unterstützung des Secure-Boot-Loaders Shim.

Um Wartung und Weiterentwicklung von Linux zu erleichtern, haben die Kernel-Entwickler die Unterstützung für Intels 386er und andere CPUs entfernt, die diese vor über 20 Jahren verbreitete Prozessor-Architektur aufweisen; der 486er und modernere x86-32-Prozessoren werden weiterhin unterstützt. Auf einem 386er hatte Torvalds damals die Linux-Entwicklung begonnen. Er weint dem Code aber keine Träne nach und schrieb: "Ich bin nicht sentimental. Gut, dass wir das los sind."

Der von Sniffer-Werkzeugen wie Tcpdump genutzte Berkeley Packet Filter (BPF) kann nun auch auf VLAN-Tags filtern. Durch die neue Unterstützung für "Hardware-offloaded encapsulation" können Treiber jetzt die Checksummen-Berechnung gekapselter Pakete an den Netzwerk-Chips delegieren, um die CPU zu entlasten. Der Netzwerkpaket-Scheduler QFQ (Quick Fair Queueing) wurde zu QFQ+ ausgebaut und soll jetzt schneller und fairer arbeiten; der Entwickler der Änderung erläutert Details in dem Fachbericht "Reducing the Execution Time of Fair-Queueing Schedulers."

Durch Umbauten am Scheduler fließen in die Lastberechnung nun weitere Aspekte ein, um die Kalkulation der Last eines Prozesses zu verbessern. Ein genauerer Wert kann ist für optimales Load-Balacing wichtig; das Ganze soll zudem die Arbeitsweise einiger Änderungen verbessern, durch die der Kernel viele kleine Prozesse auf einen Prozessorkern zu bündeln versucht, damit andere Kerne schlafen können. Details zu den Umbauten und deren Nutzen liefert ein Artikel bei LWN.net. Dort finden sich auch ein Beitrag zu Umbauten am Code für das Sperren per RCU (Read-Copy-Update), die Jitter und Latenzen beim Scheduling reduzieren sollen.

Einige für die Single Root I/O Virtualization (SR-IOV) wichtige PCI-Parameter lassen sich nun via Sysfs auslesen und setzen (u. a. 1, Dokumentation)

Sofern die Hardware das unterstützt und der Kernel passend konfiguriert wurde, kann man jetzt auch die CPU #0, auf der der Kernel gebootet hat, im laufenden Betrieb austauschen (u. a. 1, 2).

Der Kernel kann anstelle der ACPI-Tabellen der Firmware nun nicht mehr nur fest einkompilierte nutzen, sondern auch Tabellen, die im Initramfs hinterlegt wurden (u. a. 1, Dokumentation). Eine solche Funktion hatten sich einige Linux-Nutzer vor Jahren gewünscht, weil sich damals viele Notebooks nur mit modifizierten Tabellen vernünftig nutzen ließen. Die Funktion blieb aufgrund von Bedenken einiger Kernel-Entwickler außen vor; dieser Tage dürfte das Ganze deutlich weniger Nutzer finden, da der ACPI-Unterstützung bei neuerer Hardware deutlich seltener Probleme bereitetet.

Einen Überblick über die wichtigsten Verbesserungen am Tracing-Code listet der Haupt-Git-Merge für das Perf-Subsystem.

Nicht integriert hat Linus Torvalds die von Kees Cook eingereichten Änderungen, die die Konfigurationsoption "CONFIG_EXPERIMENTAL" unsichtbar machen, weil sie keine Bedeutung mehr habe. Zur Änderung gehörten auch Dutzende von Patches, die Abhängigkeit von dieser Option bei verschiedenen Konfigurationsoptionen entfernen. Mehr als drei Dutzend solcher Patches haben es aber dennoch in den Linux-Kernel 3.8 geschafft, da die Betreuer mancher Subsysteme die von Cooks entwickelten Änderungen aufgegriffen hatten. Einige experimentelle Kernel-Funktionen erkennt man daher von nun an nur mehr an den Hilfetexten oder Angaben wie "(EXPERIMENTAL)" in der Kurzbeschreibung.