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.
- Thorsten Leemhuis
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.
Tracing
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.
ARM
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".
Verschiedenes
- 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.
Die kleinen Perlen
Die kleinen Perlen
Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutenden Änderungen:
x86
- [
N] keyboard: Use BIOS Keyboard variable to set Numlock - [
N1] syscalls, x86: add __NR_kcmp syscall - [
C] x86-32: Introduce CONFIG_X86_DEV_DMA_OPS - [
] x86/apic: Implement EIO micro-optimization - [
] x86, efi; Add EFI boot stub console support - [
C N] X86: integrate CMA with DMA-mapping subsystem - [
C] x86: Introduce CONFIG_X86_DMA_REMAP - [
C N1] x86, platform: Initial support for sta2x11 I/O hub - [
] x86: print e820 physical addresses consistently with other parts of kernel - [
1] x86: print physical addresses consistently with other parts of kernel - [
N] x86, realmode: realmode.bin infrastructure - [
C] x86: use generic strncpy_from_user routine - [
C] x86: use the new generic strnlen_user() function - [
C] x86: use the new generic strnlen_user() function - [
] xen/apic: implement io apic read with hypercall
ARM
- [
C] ARM: 7374/1: add TRACEHOOK support - [
D] ARM: 7376/1: clkdev: Implement managed clk_get() - [
C 1] ARM: 7389/2: plat-versatile: modernize FPGA IRQ controller - [
DN] ARM: architected timers: add DT support - [
N] ARM: at91: add at91sam9263 DT support - [
N] arm: at91: add Calao TNY-A9260 and TNY-A9G20 board support - [
N] ARM: at91: Add DT description files for AT91SAM9N12-EK - [
N] ARM: at91: add kizbox board dt support. - [
C N1] ARM: at91: Add machine files for AT91SAM9N12 SoC - [
C] ARM: at91: add SOC_AT91SAM9 kconfig option to factorise select - [
N] ARM: at91: DT: add Calao USB A9263 board support - [
C N1] ARM: AT91: IIO: Add AT91 ADC driver. - [
C] ARM: davinci: implement DEBUG_LL port choice - [
C N2] ARM: dma-mapping: add support for IOMMU mapper - [
D] ARM: DT: Add binding for GIC virtualization extentions (VGIC) - [
DN] ARM: dts: Add basic support for imx6q-sabresd - [
N] arm/dts: twl4030: Add DTS file for twl4030 PM + Audio IC - [
N] arm/dts: twl6030: Add DTS file for twl6030 PMIC - [
DN] ARM: EXYNOS: Add device tree support for interrupt combiner - [
C] ARM: EXYNOS: Add DRM core device support for Universal C210 board - [
C] ARM: EXYNOS: Add DRM core support for NURI board - [
C] ARM: EXYNOS: Add DRM device to Origen - [
C] ARM: EXYNOS: Add DRM device to SMDKV310 - [
C] ARM: EXYNOS: Add FIMC device to SMDK4X12 - [
C] ARM: EXYNOS: Add MFC device to SMDK4X12 - [
C N] ARM: EXYNOS: add platform device for core DRM subsystem - [
C] ARM: EXYNOS: Add s3c-hsotg device support for GONI board - [
C] ARM: EXYNOS: Add s3c-hsotg device support for NURI board - [
C] ARM: EXYNOS: Add s3c-hsotg device support for Universal C210 board - [
C] ARM: EXYNOS: Support DMA for EXYNOS5250 SoC - [
C] ARM: EXYNOS: Support suspend and resume for EXYNOS5250 - [
C 1] ARM: imx: eukrea-cpuimx51: remove board - [
C] ARM: imx: eukrea_mbimxsd25: add spi controler and spidev support - [
C] ARM: imx: eukrea_mbimxsd35: add spi controler and spidev support - [
C] ARM: imx: eukrea_mbimxsd: add audio support - [
D 1] ARM: imx: rename uart and fec device tree nodes - [
C DN2] ARM: integrate CMA with DMA-mapping subsystem - [
C N] ARM: kirkwood: Add support for RaidSonic IB-NAS6210/6220 using devicetree - [
C N1] ARM: kirkwood: Basic support for DNS-320 and DNS-325 - [
C N] ARM: local timers: Add A15 architected timer support - [
C DN2] ARM: LPC32xx: Device tree support - [
C N] ARM: mach-shmobile: add armadillo800eva board support. - [
C N] ARM: mach-shmobile: add KZM-A9-GT board support - [
C N] ARM: mach-shmobile: Use DT_MACHINE for armadillo 800 eva - [
C N] ARM: mach-shmobile: Use DT_MACHINE for KZM9G - [
C N1] ARM: mmp: add usb device support for PXA910 - [
N] ARM: mmp: support mmp2 with device tree - [
C] ARM: mx31_3ds: Add sound support - [
C DN] ARM: mxs: add initial device tree support for imx23-evk board - [
C DN1] ARM: mxs: add initial device tree support for imx28-evk board - [
1] ARM: Orion: Eth: Add clk/clkdev support. - [
1] ARM: Orion: SPI: Add clk/clkdev support. - [
3] ARM: PCI: provide a default bus scan implementation - [
] ARM: pxa: hx4700: Add PCMCIA/CF support - [
C 4] ARM: Remove support for ARMv3 ARM610 and ARM710 CPUs - [
C] ARM: SAMSUNG: merge plat-s5p into plat-samsung - [
C DN5] ARM: SPEAr3xx: Add device-tree support to SPEAr3xx architecture - [
C DN] ARM: tegra20: Add Tegra Memory Controller(MC) driver - [
C] ARM: tegra20: Make MC optional in Kconfig - [
C DN1] ARM: tegra30: Add Tegra Memory Controller(MC) driver - [
C] ARM: tegra30: Make MC optional in Kconfig - [
C DN1] ARM: tegra: Add Tegra AHB driver - [
D] ARM: tegra: add USB ULPI PHY reset GPIO to device tree - [
9] ARM: tegra: Remove pre-pinctrl pinmux driver - [
8] ARM: tegra: Switch to new pinctrl driver - [
C] ARM: tegra: uncompress.h: Implement TEGRA_DEBUG_UART_AUTO_ODMDATA - [
C 9] ARM: ux500: delete U5500 support - [
C 1] ARN: at91: introduce SOC_AT91xxx define to allow to compile SoC core support - [
N] Ethernut 5 board support - [
C N] kirkwood: Add iconnect support - [
N] mach-shmobile: Emma Mobile EV2 DT support V3 - [
C] mach-shmobile: Emma Mobile EV2 GPIO support V3 - [
C N1] mach-shmobile: Emma Mobile EV2 SoC base support V3 - [
C N] mach-shmobile: KZM9D board support V3 - [
C N] mach-shmobile: Use DT_MACHINE for KZM9D V3 - [
C] mx31moboard: Add sound support - [
D] OMAPDSS: Provide an interface for audio support - [
D] OMAPDSS: VENC: allow switching venc output type at runtime - [
C] SPEAr13xx: Add compilation support - [
N2] SPEAr13xx: Add dts and dtsi files - [
CI N2] SPEAr13xx: Add source files - [
C] SPEAr3xx: Add pinctrl support for boards - [
DN] SPEAr: Add DT bindings for SPEAr's timer - [
N3] SPEAr: Add PL080 DMA support for 3xx and 6xx - [
D] SPEAr: Update MAINTAINERS and Documentation
PPC
- [
C] powerpc/47x: Kernel support for KEXEC - [
C] powerpc: Add 64-bit CPU targets for gcc - [
N] powerpc/crypto: AES-CBC mode routines for nx encryption - [
N1] powerpc/crypto: AES-CCM mode routines for nx encryption - [
N] powerpc/crypto: AES-CTR mode routines for nx encryption - [
N] powerpc/crypto: AES-ECB mode routines for nx encryption - [
N1] powerpc/crypto: AES-GCM mode routines for nx encryption - [
N] powerpc/crypto: AES-XCBC mode routines for nx encryption - [
C N] powerpc/crypto: Build files for the nx device driver - [
N3] powerpc/crypto: nx driver code supporting nx encryption - [
N] powerpc/crypto: SHA256 hash routines for nx encryption - [
N] powerpc/crypto: SHA512 hash routines for nx encryption - [
D] powerpc/hw-breakpoint: Use generic hw-breakpoint interfaces for new PPC ptrace flags - [
C N5] powerpc/powermac: New windfarm driver for PowerMac G5 (AGP) and Xserve G5 - [
C] powerpc/ps3: Add PS3 repository write support - [
C N] powerpc/pseries/hwrng: PFO-based hwrng driver - [
N] powerpc/windfarm: Add ad7417 sensor - [
N] powerpc/windfarm: Add lm87 sensor - [
D] Revert "powerpc/hw-breakpoint: Use generic hw-breakpoint interfaces for new PPC ptrace flags"
Various
- [
1] arch/tile: allow building Linux with transparent huge pages enabled - [
C N4] arch/tile: Allow tilegx to build with either 16K or 64K page size - [
C] arch/tile: mark TILEGX as not EXPERIMENTAL - [
C 3] arch/tile: support multiple huge page sizes dynamically - [
C N6] blackfin: add bf60x to current framework - [
N4] blackfin: bf60x: add power management support - [
C] blackfin: bf60x: add wakeup source select - [
C 1] blackfin: bf60x: make clock changeable in kernel menuconfig - [
C N9] blackfin: mach-bf609: add machine files - [
C] C6X: add support to build with BINFMT_ELF_FDPIC - [
D] CRIS: Update documentation - [
C] m68k: Use generic strncpy_from_user(), strlen_user(), and strnlen_user() - [
N] mach-shmobile: Emma Mobile EV2 SMP support V3 - [
C N] MIPS: ath79: add initial support for the Atheros DB120 board - [
C] MIPS: ath79: add PCI_AR724X Kconfig symbol - [
C] MIPS: ath79: add PCI registration code for AR934X - [
C] MIPS: ath79: add SoC detection code for AR934X - [
CI N1] MIPS: ath79: add support for the PCI host controller of the AR71XX SoCs - [
C] MIPS: ath79: add WMAC registration code for AR934X - [
C 1] MIPS: lantiq: drop mips_machine support - [
C N3] MIPS: lantiq: implement support for clkdev api - [
C N1] MIPS: lantiq: implement support for FALCON soc - [
C N1] MIPS: pci: convert lantiq driver to OF - [
C] MIPS: Select BUILDTIME_EXTABLE_SORT - [
C N1] OF: MIPS: lantiq: implement OF support - [
C] openrisc: implement irqdomains - [
C] [PARISC] update parisc to use generic strncpy_from_user() - [
C N4] sh: Add initial support for SH7734 CPU subtype - [
C N7] sh: Add pinmux for sh7264 - [
CI N] sh: Add RSK2+SH7264 board - [
CI N] sh: Add RSK2+SH7269 board - [
C N2] sh: Add sh7264 device - [
C N2] sh: Add sh7269 device - [
C N] sh: initial stack protector support. - [
C] sh: switch to generic strncpy_from_user(). - [
C N] sh: use the new generic strnlen_user() function - [
C 3] sparc32: generic clockevent support - [
C] sparc64: Convert over to NO_BOOTMEM.
Ein "C" im Bereich "[ ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "I" ausgezeichneten Patches rüsten neue PCI- oder USB-IDs nach; jene mit "D" verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer.
Die "Was Linux 3.5 bringt"-Serie
Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der in der noch im Juli erwarteten Linux-Version 3.5 geben, da alle größeren Neuerungen bereits in den ersten zwei Entwicklungswochen integriert wurden; Linux 3.5 befindet sich daher jetzt in der Stabilisierungsphase, in der die Kernel-Hacker normalerweise keine größeren Änderungen mehr vornehmen.
Über einige der Neuerungen von Linux 3.5 hat das Kernel-Log bereits berichtet:
In den kommenden Wochen wird noch ein Artikel erscheinen, der sich mit den Neuerungen bei Grafiktreibern, Infrastruktur und Treibern für andere Hardware beschäftigen.
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".