Kernel-Log – Was 2.6.38 bringt (5): Architektur, Infrastruktur und Virtualisierung | heise online

Kernel-Log – Was 2.6.38 bringt (5): Architektur, Infrastruktur und Virtualisierung

In bestimmten Situationen steigert ein kleiner Patch die Reaktionsgeschwindigkeit von Desktop-Umgebungen spürbar. Die Transparent Huge Pages erleichtern die Speicherverwaltung, was speziell für Virtualisierung oder Server-Software interessant ist.

vorlesen Druckansicht
Lesezeit: 38 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

In der Nacht von Dienstag auf Mittwoch hat Linus Torvalds die siebte Vorabversion von Linux 2.6.38 freigegeben. Er erwähnt dabei unter anderem die Korrektur für einen Fehler an Btrfs, der in gewissen Situationen zu Datenverlust führt – erneut gab Torvalds keine Hinweise auf einen Freigabetermin von 2.6.38.

Die Fertigstellung der nächsten Version des Hauptentwicklungszweigs rückt aber dennoch näher, daher will das Kernel-Log seine Mini-Serie "Was 2.6.38 bringt" langsam zu einem Ende bringen und widmet sich im vorletzten Teil den Neuerungen rund um Architektur-Code, Infrastruktur und Virtualisierung. Teil eins und drei hatten sich mit den Änderungen bei Grafik und Netzwerk gewidmet; Teil zwei und vier drehten sich um Dateisysteme und Storage. Das Ende der Serie wird der in einigen Tagen folgende Artikel zu Treibern für Audio-, USB- und Video-Hardware markieren.

Für verhältnismäßig viel Aufsehen sorgte um den Jahreswechsel eine als "Wunderpatch" oder "Autogroup scheduling feature" bekannt gewordene Änderung, welche die Interaktivität von Desktop-Umgebungen und -Anwendungen in bestimmten Situation verbessert. Das gelingt allerdings nicht durch magisch erzeugte CPU-Ressourcen, sondern durch die automatische Gruppierung aller Prozesse einer Session zu einer Cgroup (Control Group) – das sorgt bei Vollauslastung der CPU für eine andere Verteilung der Prozessorzeit, was zu einem reaktionsschnelleren Desktop führen kann, sofern die CPU-lastigen Prozesse in einer anderen Gruppe stecken als die Desktop-Umgebung.

Details zur Funktionsweise liefert ein älteres Kernel-Log und ein Artikel bei LWN.net. Scheduler-Maintainer Ingo Molnar und Linus Torvalds zeigten sich von dem Patch angetan und loben ihn im Haupt-Git-Pull-Request für den Scheduler-Code und der Ankündigung von 2.6.38-rc1.

Die größte Wirkung zeigt sich allerdings bei Bedingungen, wie sie bei Kernel-Hackern häufig auftreten: Das Benutzen der Desktop-Oberfläche, während im Terminal eine CPU-lastige Aufgabe läuft – etwa das Kompilieren eines Kernels. Keine nennenswerten Einfluss hat die Gruppierung in Situationen, wo zwei Desktop-Anwendungen um die Prozessorzeit wetteifern.

In den Standard-Vorgaben für die Kernel-Konfiguration ist die via "CONFIG_SCHED_AUTOGROUP" einschaltbare Funktion deaktiviert; möglicherweise werden sie auch nicht alle Distributionen einschalten, da die SysV-Init- und Upstart-Alternative Systemd eine ähnliche, allerdings flexiblere Funktion bietet.

Durch die neuen Transparent Huge Pages (THP) handhabt der Kernel große Speicherseiten deutlich flexibler und kann sie in bestimmten Situationen sogar automatisch verwenden (u. a. 1, 2, 3); das sollte langfristig die umständliche und nicht sonderlich flexible Einbindung via HugeTblFs unnötig machen. Speziell bei großen Datenbanken oder der Virtualisierung verbessern große Speicherseiten die Performance, weil sie Kernel und Prozessor die Speicherverwaltung erleichtern und einige Funktionseinheiten moderner CPUs zum Zug kommen, die sonst ungenutzt blieben.

THP wurde maßgeblich vom Red-Hat-Entwickler Andrea Arcangeli vorangetrieben; frühe Versionen des Codes setzt Red Hat bereits beim im vergangen November eingeführte Red Hat Enterprise Linux 6 ein, wo THP als eine der wichtigsten Neuerungen hervorgehoben wurde. Details zur Technik und ihren Vorteilen liefern die zugehörige Dokumentation oder der LWN.net-Artikel "Transparent huge pages in 2.6.38". Einige kurz vor der Aufnahme der THP-Patches von VM-Hacker Mel Gorman durchgeführte Benchmarks vergleichen THP mit dem HugeTblFs und einem Kernel, der keine großen Speicherseiten nutzt. Hintergründe und Vorteile der Technik liefert Arcangeli in den Präsentationsfolien und der Videoaufzeichnung eines Vortrags auf dem KVM Forum 2010.

THP fand über den von Andrew Morton gepflegten MM-Tree den Weg in 2.6.38 und umging den Linux-Next genannten Entwicklerzweig, in dem die Subsystem-Verwalter die Arbeit an der jeweils übernächsten Version koordinieren. Das führte zu Unmut, da einige (recht kurzfristig beseitigte) Fehler so erst nach der Aufnahme in den Hauptentwicklungszweig ans Licht kamen; Morton erklärte daraufhin, er bereite die Integration in den des MM-Kernels in Linux-Next bereits vor, der den früher sehr wichtigen MM-Kernel in vielen Bereichen abgelöst hat.

Nach dem bei 2.6.37 integrierten Xen-Dom0-Support zogen einige Grundlagen für Xen-Backend-Treiber in den Kernel ein – die zum sinnvollen Betrieb einer Linux-Dom0 benötigten Backend-Treiber wurden aber nicht rechtzeitig fertig und folgen vermutlich bei 2.6.39. Über den "Userspace Grant Access Device Driver" können Xen-Gäste nun Speicherseiten mit einem anderen teilen. Der HVM X2APIC Support soll ferner die Interrupt-Verarbeitung beschleunigen.

Die KVM-Entwickler wollten ihren Hypervisor um "Asynchronous Page Faults" bereichern, aber Torvalds gefielen einige Aspekte der Patches nicht, sodass die KVM-Entwickler sie nochmal überarbeitet wollen. Als wesentlichste Neuerung an KVM verbleibt so die Unterstützung für die Transparent Huge Pages und die Flush-By-Asid genannte Virtualisierungserweiterungen von AMDs Prozessoren der Bulldozer-Familie, die Mitte des Jahres erwartet werden.

Die Änderungen am ACPI-Code fasst dessen Betreuer Len Brown in seinem Haupt-Git-Pull-Request zusammen. Das ACPI Platform Error Interface (APEI) gibt nun gewisse Fehlerinformationen über printk aus, sodass die Informationen in den normalen, über dmesg abrufbaren Kernel-Meldungen auftauchen, wie es sich einige Kernel-Hacker wünschen.

Entfernt haben die Entwickler die Procfs-Dateien zum Ein- und Ausschalten von Display-Ausgängen. Das selbe Schicksal ereilte wie angedroht auch den Code zum Bereitstellen der Dateien /proc/acpi/processor/*/throttle, über die man den Throttling-Level von Prozessoren beeinflussen konnte. Throttling hatte lange den Ruf einer Stromsparfunktion – in den allermeisten Fällen (und insbesondere bei modernen Prozessoren) führte das manuelle Aktivieren des Überhitzungsschutzes aber letztendlich zu einer höheren Leistungsaufnahme, da der Prozessor viel länger für die ihm gestellten Aufgaben braucht und nicht in die tiefen Schlafmodi wechseln kann.

Das Crypto-Subsystem bietet ab 2.6.38 ein von Torvalds anfangs kritisch hinterfragtes API, über das sich die Hash- und Skcipher-Funktionen vom Userspace aus nutzen lassen. Der Treiber aesni-intel zur Nutzung von Intels "AES New Instructions (NI)" spielt sein Können nun auch im 32-Bit-Betrieb aus. Einige im Commit-Kommentar angegeben Benchmarks arbeiten dadurch mehr als doppelt so schnell; ganz nebenbei läuft auch die x86-64-Implementation durch diese Anpassungen ein klein wenig flotter. Der Treiber erhielt zudem eine optimierte Implementation für den in RFC4106 spezifizierten AES-GCM-Algorithmus.

Ein für 2.6.38 aufgenommener Patch rüstet die Printk-Format-Auszeichnung %pK und den Sysctl kptr_restrict nach. Über Letzteren lässt sich festlegen, ob der Kernel mit $pK gekennzeichnete Speicheradressen bei der Ausgabe über /proc oder die Kernel-Meldungen verschleiert, wenn nicht privilegierte Anwender diese Informationen abfragen – das soll Angreifern den Einbruch oder die Rechteausweitung erschweren, da diese Informationen einige Rückschlüsse über den Kernel-interna ermöglichen. Neben der Capability CAP_SYS_ADMIN gibt es jetzt auch CAP_SYSLOG, um etwa dem Root-Anwendern in einem Container das Recht zum Leeren des Kernel-Ausgaben ("dmesg -c") zu entziehen (1, 2, 3).

Die "Key Ring Service" genannte Infrastruktur zur Schlüsselverwaltung im Kernel beherrscht nun "Trusted and Encrypted Keys" – erste lassen sich nur mit einem TPM nutzen, das die Keys nur entriegelt, wenn das System als nicht kompromittiert eingestuft wird. Details zu den Möglichkeiten finden sich im den Commit-Kommentaren (1, 2), der zugehörigen Dokumentation und einem vergangenen Herbst publizierten Artikel bei LWN.net.

Auf x86-Systemen wird der 38er-Kernel die No-Execute-Funktionen (NX) moderner Prozessoren nun auch zur Absicherung von Kernel-Daten und -Modulen nutzen; Hintergründe dazu liefert LWN.net. Zudem aktiviert der Kernel den auch als EVP oder XD bekannten Schutz bei Intel-CPUs nun selbst, wenn das BIOS ihn lahm legt – eine Prüfung hatte zuvor ergeben, dass bei fast 10 Prozent der geprüften Ubuntu-Systeme die NX-Funktion brach lagen, weil das BIOS-Setup falsch konfiguriert war

Der Radeon-Treiber und dem für RCU zuständigen Code bieten nun zahlreiche neue Tracepoints für eine genauere Analyse der Vorgänge. An verschiedenen Stellen gab es zudem neue Abfragepunkte oder -Schnittstellen, die für Analyseprogramme wie Powertop interessant sind; Details dazu erläutert die bei 2.6.38 integrierte Dokumentation des Power Events API, die auch einige der älteren, mittlerweile abgekündigten Schnittstellen beschreibt.

Über das neue Makro TRACE_EVENT_FLAGS lassen sich Tracepoints nun speziell kennzeichnen. Durch das Setzen der in dem Rahmen eingeführte Flags TRACE_EVENT_FL_CAP_ANY gestattet der Kernel auch normale Anwendern die Verwendung des Tracepoints; alle Syscall-Tracepoints wurden bei 2.6.38 so gekennzeichnet (1, 2).

  • Der 38er-Kernel bringt eine Library zum Dekomprimieren des aus LZMA hervorgegangenen und für hohe Packdichten bekannten XZ mit. Darauf setzt nicht nur das SquashFS auf, das ab nun auch XZ-Unterstützung bietet, sondern auch Code, durch den der Kernel beim Booten Teile seiner selbst und Initial Ramdisks (Initrds) entpacken kann, die mit Hilfe von XZ komprimiert wurden (1, 2).
  • Die Kernel-Konfigurations-Option CONFIG_EMBEDDED war anfangs dazu gedacht, einige eher für den Embedded-Bereich interessante Einstellmöglichkeiten vor normalen Kernel-Übersetzern zu verstecken. Da sich mittlerweile auch zahlreiche für andere Einsatzgebiete interessante Optionen hinter ihr verbergen, haben die Kernel-Hacker sie nun in CONFIG_EXPERT umbenannt.
  • Die TINY_PREEMPT_RCU genannte Varianten des für RCU (Read Copy Update) zuständigen Codes beherrscht jetzt das für den Realtime-Einsatz interessante Priority Boosting.
  • Sofern Module eine Versions-Angabe enthalten, lässt sich diese nun auch via Sysfs abfragen.
  • Die Datei /proc/consoles verrät ab 2.6.38, welche Konsolen dem System bekannt sind und welche Fähigkeiten sie bieten.
  • Abermals gab es zahlreiche Verbesserungen und Anpassungen an der noch jungen und sich schnell weiterentwickelnden Tracing-Infrastruktur. Das Perf-Subkommando "trace" wurde etwa in "script" umbenannt. Über TRACE_EVENT_CONDITIONAL() lassen sich jetzt einzelne Tracepoints direkt deaktivieren, damit sie während einer Analyse gar nicht erst feuern – das minimiert den Performance-Einfluss und reduziert die Menge der erfassten Daten.
  • Die Blobs der etwa von der PPC-Architektur genutzten Device Trees lassen sich nun ins Kernel-Image linken.
  • Auch bei der Unterstützung für OLPCs mit x86-CPU setzt der Kernel jetzt auf Device Trees .
  • Wie immer stieß Unterstützung für verschiedene Hardware mit ARM-Kern zum Kernel, etwa für das Buffalo Linkstation Live v3 (LS-CHL) NAS, das AM3517/05 CRANE board oder die auch als SAARB bekannte PXA955 Handheld Platform
  • Der PPC-Code bringt nun "etwas Unterstützung" für den POWER7+ mit.
  • Den Oprofile-Code erweiterten die Kernel-Hacker um Unterstützung für einige Funktionen von AMDs Bulldozer.

Die Kernel-Hacker nahmen einige weitere Userland-Tools in das Unterverzeichnis tools/ der Linux-Quellen auf:

  • Das ursprünglich autotest genannte Skript ktest.pl assistiert beim Verteilen und Testen von Kerneln auf verschiedenen Systemen (u. a. 1, 2, 3)
  • Turbostat liefert Informationen zur den von X86-Prozessoren genutzten Frequenzen und Schlafmodi; dabei zeigt es auch an, ob die CPU per Turbo Boost auf die höchsten Taktfrequenzen wechselt.
  • Zum Kernel stieß ferner x86_energy_perf_policy, das neueren Intel-Prozessoren Hinweise liefert, die beim Abwägen zwischen einer Energie-effizienten oder schnellstmöglichen Arbeitsweise helfen.
  • In das Tool-Verzeichnis verschoben haben die Kernel-Hacker das Programm slabinfo, das einige Interna zur Speicherverwaltung des Kernels ausgibt.
  • Über eine Kernel-Erweiterung und zwei Userspace-Programme vhost_test und virtio_test können Entwickler einige Funktion von VirtIO und Vhost testen (1, 2)

Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs mit den "offiziellen" Kernel-Quellen auf Kernel.org. Der über diese Links angezeigten Commit-Kommentar und der darunter ausgegebene Patch liefern zahlreiche weitere Informationen zur jeweiligen Änderungen.

Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" steht für Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.

ACPI

Crypto & Security

MM

PCI

Scheduler

Tracing & Debugging

Virtualization

Various

x86

PPC

Various

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl). (thl)