Kernel-Log – Was 3.5 bringt (3): Architektur-Code

Durch Uprobes können Performance-Monitoring-Werkzeuge nun auch Userspace-Software beobachten. Die weiter vorangetriebenen Umbauten am ARM-Code zeigen greifbare Erfolge.

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

Nach Jahren der Entwicklung und Dutzenden von Anläufen und größeren Umbauten stieß der Code für Uprobes (Userspace Probes) zum Kernel (u. a. 1, 2, 3, 4, 5). Durch ihn kann der Kernel zur Laufzeit Breakpoints in den Code von Userspace-Software einzufügen. Diese Funktion lässt sich bislang nur über das Perf-Events-Subsystem des Kernels nutzen; darauf zurückgreifende Tracing-Software wie das dem Kernel beiliegende Perf oder die Version 1.8 von Systemtap sind dadurch in der Lage, Tracepoints in Userspace-Software einzufügen und können so das Laufzeitverhalten von Kernel und Programmen in einem Zug zu beobachten.

Bislang konnte Perf nur die Vorgänge im Kernel beobachten; Systemtap brauchte zur Beobachtung von Userspace-Software Utrace, das es nie in den offiziellen Kernel geschafft hat. Hinweise zum Praxis-Einsatz des vor langer Zeit aus Utrace hervorgegangene Uprobes liefert der Uprobes-Merge-Commit. Weitere Hintergründe liefert LWN.net in einem Artikel, der auch erläutert, wieso der Kernel trotz der neuen Analysemöglichkeiten weiterhin längst nicht den Funktionsumfang für eine Tracing-Lösung bietet, die mit Dtrace von Solaris vergleichbar ist. Dazu wären einige Erweiterungen in und rund um Uprobes nötig, die teilweise angedacht, aber noch nicht in Entwicklung sind.

Mehr Infos

Entwicklungsstand

Samstag Nacht hat Linus Torvalds die sechste Vorabversion von Linux 3.5 freigegeben. In der Freigabe-Mail schreibt er, der RC6 habe weniger Änderungen erhalten als die vorherige Vorabversion und die Freigabe von Linux 3.5 rücke näher.

Zum Tools-Verzeichnis des Kernels stießen einige Dateien des Ftrace-Tools "trace-cmd". Sie legen die Grundlage für eine "libtracevents" genannten Library, die eine gemeinsame Basis für Tracing-Werkzeuge bilden soll; darunter das dem Kernel beiliegende Werkzeug "perf", das diese Bibliothek bei Linux 3.5 bereits nutzt. Auch andere Userland-Programme wie powertop (lesen Sie dazu auch den Bericht Powertop 2.0 – Strom sparen unter Linux) sollen die Bibliothek nutzen können, wie Ingo Molnar in dem Haupt-Git-Pull-Request für das Perf-Subsystem schreibt. Dort erwähnt er auch einige andere Neuerungen dieses Bereichs; etwa die verbesserte Anzeige bei der Assembler-Untersuchung mit perf report oder die Unterstützung für "Precise event sampling", das die Funktionseinheiten für Instruction-Based Sampling (IBS) in AMDs modernen Prozessorkernen zum Performance Monitoring mitbringen.

Die seit über einem Jahr vorangetriebene Grundrenovierung des ARM-Codes ging auch bei 3.5 weiter; einige der wichtigsten Änderungen erwähnen die beiden Haupt-Git-Pull-Request-Threads für Linux 3.5 (1, 2). Olof Johansson schreibt dort stolz, der Code für weitere ARM-Plattformen werde angepasst, sodass diese die zum Booten benötigten Hardware-Informationen aus Device Trees beziehen können. Device Trees sind standardisierte Datenstrukturen aus Schlüssel-Wert-Paaren, die die Hardwarekomponenten eines ARM-Boards beschreiben. Weitere Hintergründe liefert ein Artikel auf lwn.net.

Diese Arbeiten zahlten sich langsam aus, schreibt Johansson, denn einige ARM-Plattformen würden Linux-Unterstützung dieser Tage durch simples Hinzufügen von Device-Tree-Dateien erhalten, die komplett unabhängig von den Kernel-Quellen seien. Einige Hintergründe zum Status der ARM-Renovierung und den Bestrebungen, ein Kernel-Binary zu schaffen, das auf vielen verschiedenen ARM-Plattformen bootet, erläutert der vor einigen Wochen publizierte LWN.net-Artikel "LinuxCon Japan: One zImage to rule them all".

  • Eine Patch-Sammlung führt einige Aufräumarbeiten am x86-Code durch und sorgt für eine Sortierung der Exception Table bereits beim Bau des Kernels, was das Booten ein klein wenig beschleunigen kann (1, 2, 3).
  • Unter den größten Änderungen für KVM ist ein neues API zum Injizieren einer Message Signaled Interrupt (MSI) Message in Gastsysteme
  • Zu den wichtigsten Änderungen am Xen-Code zählt die Unterstützung für "perf".
  • Umbauten am Prozess-Scheduler sollen sein Verhalten auf NUMA-Systemen verbessern. In dem Zug flogen einige altbackene Funktionen zum stromsparenden Prozess-Scheduling raus, die zuletzt mehr schlecht als recht arbeiteten.
  • Zum Kernel gestoßene Dokumentation erläutert den Einsatz des "EFI Boot Stub", durch den EFI-Firmware den Kernel direkt starten kann; die Funktion war bei Linux 3.3 zum Kernel gestoßen und wird von dem kürzlich veröffentlichten Boot-Loader Gummiboot genutzt.
  • Durch größere Umbauten am Code für Error Detection And Correction (EDAC) zeigt der Kernel in Zukunft bei modernen Prozessoren akkurater an, wo genau ein Speicherfehler aufgetreten ist.
  • Über den neuen Kernel-Parameter "skew_tick" können Anwender ein Detail beim Ticken des Zeitgebers beeinflussen, was zur Jitter-Reduktion bei HPC- oder RT-Workloads interessant sein kann, aber die Leistungsaufnahme erhöht.
  • Entfernt wurde die Unterstützung die Micro Channel Architecture (MCA), die schon seit mehr als einem Jahrzehnt Oldtimer-Status hat. Auch die Unterstützung für ARMv3 sowie die Plattformen ixp23xx und ixp2000 (Intel XScale) flog raus.