Kernel-Log – Was 2.6.31 bringt (4): Tracing, Architektur-Code, Virtualisierung
Mit den Performance Counters lässt sich das Laufzeitverhalten von Code näher analysieren. Die noch junge Tracing-Infrastruktur haben die Entwickler abermals überarbeitet. Auch beim Architektur-Code und den Virtualiserungslösungen gibt es einiges Neue.
- Thorsten Leemhuis
Am Wochenende hat Linus Torvalds die siebte Vorabversion von Linux 2.6.31 freigegeben. Er hebt in der Freigabe-Mail einige der Korrekturen hervor; die Liste mit bekannten neuen Fehlern verzeichnet zwei Tage zuvor 29 ungelöste Probleme.
Zum Freigabezeitpunkt von 2.6.31 macht Torvalds anders als eine Woche zuvor keine Angaben – ein zwei Wochen dürfte es vermutlich noch dauern. Das Kernel-Log nimmt das zum Anlass, die Berichterstattung über die größten Neuerungen von 2.6.31 mit einem Überblick aus den Bereichen Tracing, Architektur-Code, Speicherverwaltung und Virtualisierung fortzusetzen.
Detaillierte Fahranalyse
Über die teilweise im Kernel und teilweise im Userspace arbeitenden "Performance Counters" kann der Kernel in Zukunft die gleichnamigen Einheiten moderner Prozessoren auslesen. Sie messen verschiedene für die CPU-Performance wichtige Vorgänge im Prozessor – die Messwerte ermöglicht so eine genaue Analyse des Codeablaufs, um die für die Ausführungsgeschwindigkeit wichtigen Abschnitte später bis ins letzte auf die CPU optimieren zu können.
Nicht verwechseln sollte man die gelegentlich "perf_counter" abgekürzten Performance Counters mit Perfmon ("hardware-based performance monitoring interface for Linux"), das seit Jahren ähnliche Funktionen bietet – die Kernel-Hacker haben es nicht in die Linux-Quellen aufgenommen, weil sie mit einigen der Eigenschaften von Perfmon unzufrieden waren. Das dürfte einer der Gründe gewesen sein, warum Ingo Molnar und einige andere Entwickler die mit einer etwas anderen Herangehensweise arbeitenden Performance Counters aus der Taufe hoben. Der Hauptentwickler von Perfmon kritisierte verschiedene Eigenschaften der Performance Counters bei deren Vorstellung Ende 2008 sowie den darauf folgenden Monaten mehrfach; nach Beginn der auf über 600 Patches verteilten Aufnahme in die Kernel-Quellen äußerte er abermals einige Kritik, die ausführlichst diskutiert wurde. Einige Details zu dieser Konkurrenzsituation liefert der aus Ende 2008 stammende LWN.net-Artikel "Dueling performance monitors".
Kernel-Log – Was 2.6.31 bringt
Weitere Teile aus der Kernel-Log-Mini-Serie "Was 2.6.31 bringt", die die wichtigsten Neuerungen der kommenden Kernel-Version zusammenfasst:
1. Netzwerk – Neue Treiber für LAN und WLAN
2. Audio & Video – KMS für Radeon und Treiber für X-Fi
3. Storage & Dateisysteme – Btrfs aufgebohrt, IDE-Subsystem auf dem Abstellgleis
Der Artikel "Feintuning – Die Neuerungen von Linux 2.6.30" bietet eine Übersicht über die Neuerungen der derzeit aktuellen Kernel-Version. Weitere Geschehnisse rund um den Linux-Kernel und andere Hardware-nahe Linux-Software finden Sie in den regulären Kernel-Logs.
Wie sich die Performance Counters nutzen lassen, beschreibt der neuere LWN.net-Artikel "Perfcounters added to the mainline". Weitere hintergründe finden sich auch in der Dokumentation. Die zu den Performance Counters gehörenden Userspace-Tools haben die Kernel-Entwickler nach einer längeren Debatte und einem Machtwort von Linus Torvalds in das neu eingerichtete Unterverzeichnis tools/ direkt in die Kernel-Quellen aufgenommen.
Analyse auf die andere Art
Über Ingo Molnar fanden nicht nur die Performance Counters, sondern auch zahlreiche Änderungen für den von ihm betreuten Tracing-Bereich den Weg in den Kernel. Im Git-Pull-Request deutet er an, dass die Hauptentwicklungsphase der Tracepoints bald beendet sein dürfte. Er hebt zudem verbesserte Filter, interne Umbauarbeiten und optimierte Performance hervor. Einige der Möglichkeiten, die die Tracing-Infrastruktur aktueller Kernel-Versionen bietet, erklärt Sony-Entwickler Tim Bird in seinem Vortrag " Measuring Function Duration with Ftrace", den wir bereits im Artikel "Tiefschürfend – Die Proceedings des Linux Symposiums 2009" erwähnt haben.
Aufgenommen haben die Kernel-Hacker auch Unterstützung für Profiling mit dem GCC Coverage Testing Tool (gcov). Um Speicherlecks aufzuspüren, können Kernel-Entwickler und -Tester in Zukunft auf die Hilfe von Kmemleak (Dokumentation) zurückgreifen – das Tool fehlinterpretiert jedoch einige Situationen und Konstrukte, daher sollte man die Ausgaben nicht blind trauen. Das ebenfalls neue Kmemcheck (Dokumentation) erkennt die Nutzung nicht-initialisierter Speicherbereiche.
Architektur, Speicherverwaltung, Virtualisierung und die kleinen Perlen
Staccato
Bei den bisher genannten Neuerungen handelt es sich nur um die bedeutsamsten Änderungen, die die Kernel-Hacker bei Architektur und Infrastruktur von Linux vorgenommen haben. Einige weitere im Kurzüberblick:
Architektur-Code:
- Auf x86-64-CPUs adressiert Linux ab 2.6.31 2^46 statt 2^44 Byte Arbeitsspeicher – davon hat derzeit aber kaum jemand was, denn noch sind Systeme mit 16 bis 64 TByte RAM überaus exotisch.
- Dass Hibernation (Suspend-to-Disk/Software-Suspend/swsups) und Stromsparen nicht nur für Notebooks, sondern auch bei Großrechnern interessant ist, zeigen einige in den Hauptentwicklungszweig aufgenommene Patches von Hans-Joachim Picht, die Hibernate-Unterstützung für IBMs S390-Architektur (jetzt System z) nachrüsten. Von Michael Holzheu eingebrachte Änderungen verbessern parallel die Nutzung für einige Stromspartechniken von S390-Systemen.
Speicherverwaltung:
- Durch einige von Mel Gorman eingesandte Patches soll der für die Speicherbereitstellung zuständige Page Allocator ein wenig flotter arbeiten – einige Benchmark-Ergebnisse finden sich im Commit-Kommentar.
Virtualisierung:
- Die KVM-Entwickler überarbeiteten den Interrupt-Code und wollen die SMP-Performance verbessert haben.
- Der Xen-Code im Kernel gibt jetzt einige Informationen über das Verzeichnis /sys/hypervisor preis. Neu zum Kernel gestoßen ist der Xen-Treiber evtchn zum Senden oder Empfangen von Ereignissen auf "Event channels". Die Aufnahme der Dom0-Unterstützung scheint hingegen wieder in weite Ferne gerückt – seit den Diskussionen kurz vor und nach der Freigabe von Linux 2.6.30 gab es auf der LKML keine weiteren Debatten zum Thema.
- Nachdem es um den "Simple x86 Hypervisor" Lguest etwas stiller geworden war gab es diesmal wieder einige umfangreichere Änderungen; neu sind unter anderem PAE-Unterstützung und Verbesserungen für Multithreading.
Die kleineren Perlen
Die englischen Überschriften von zahlreichen weiteren nicht ganz so wichtigen, aber keineswegs unbedeutenden Änderungen finden sich in der folgenden Liste. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf den jeweiligen Commit im Webfrontend des Hauptentwicklungszweigs von Linux. Dort liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.
Architecture Support
ARM:
- Add core support for ARMv6/v7 big-endian
- ARM: 5522/1: PalmLD: IDE support
- ARM: add support for the EET board, based on the i.MX31 pcm037 module
- ARM: GTA02/FreeRunner: Add machine definition
- ARM: Kirkwood: add Marvell 88F6281 GTW GE board support
- ARM: MINI2440: Add machine support
- ARM: MX35: Add PCM043 board support
- ARM: OMAP3: Add omap3 EVM defconfig
- ARM: OMAP3: Add omap3 EVM support
- ARM: OMAP3: Add support for OMAP3 Zoom2 board
- ARM: OMAP4: Add defconfig for 4430 SDP
- ARM: OMAP4: Add support for 4430 SDP
- ARM: pxa: add basic support for HP iPAQ hx4700 PDAs
- ARM: pxa/em-x270: add ability to control GPS and GPRS power
- ARM: pxa/hx4700: add Maxim 1587A voltage regulator
- ARM: pxa/mioa701: add Maxim 1586 voltage regulator
- ARM: pxa/mioa701: add V3 gain configuration for Maxim 1586 voltage regulator
- ARM: pxa/palm: Add Palm27x aSoC driver to PalmTE2
- ARM: pxa: Stargate 2 board support
- ARM: pxa/treo680: initial support
- ARM: remove arch-imx
- ARM: S3C64XX: Add S3C6400 SDHCI setup support
- ARM: S3C64XX: Initial support for PM (suspend to RAM)
- Atmark Armadillo 500 board support.
- davinci: add SRAM allocator
- davinci: DM355: add base SoC and board support
- davinci: DM644x: add support for SFFSDR board
- davinci: DM646x: add base SoC and board support
- davinci: INTC: add support for TI cp_intc
- i.MX31: Add ethernet support to i.MX31 Litekit board.
- imx: re-work of PWM, add i.MX21 support
- IXP4xx: support for Goramo MultiLink router platform.
- MAINTAINERS: add entry for Mitac Mio A701 board
- MAINTAINERS: add entry for Palm Treo680
- MX27: Add basic support to MX27PDK
- MX35: Add basic support for MX35PDK board
- mxc: Add i.MX27LITE board support
- MXC: mx21ads base support
- OMAP2/3: PM: push core PM code from linux-omap
- omap iommu: simple virtual address space management
Power:
- 83xx: add support for the kmeter1 board.
- powerpc/4xx: Sequoia: Enable NAND support
- powerpc/85xx: Add dts files for X-ES MPC85xx boards
- powerpc/85xx: Add eSDHC support for MPC8569E-MDS boards
- powerpc/85xx: Add MPC8569MDS board support
- powerpc/85xx: Add P2020DS board support
- powerpc/85xx: Add PCI IDs for MPC8569 family processors
- powerpc/85xx: Add platform support for X-ES MPC85xx boards
- powerpc/85xx: Add STMicro M25P40 serial flash support for MPC8569E-MDS
- powerpc: Add support for swiotlb on 32-bit
- powerpc: Introduce CONFIG_PPC_BOOK3S
- powerpc: Make the NR_CPUS max 8192
- powerpc/virtex: Add support for Xilinx PCI host bridge
- powerpc/virtex: Add Xilinx ML510 reference design support
x86
- amd-iommu: implement suspend/resume
- docs, x86: add nox2apic back to kernel-parameters.txt
- x86: Add cpu features MOVBE and POPCNT
- x86: add extension fields for bootloader type and version
- x86: Add quirk for Intel DG45ID board to avoid low memory corruption
- x86: Add quirk to make Apple MacBook5,2 use reboot=pci
- x86: Add reboot quirk for every 5 series MacBook/Pro
- x86: default CONFIG_PHYSICAL_START and CONFIG_PHYSICAL_ALIGN to 16 MB
- x86/docs: add description for cache_disable sysfs interface
- x86: document new bzImage fields
- x86, ds: support Core i7
- x86: implement percpu_alloc kernel parameter
- x86, intr-remap: add option to disable interrupt remapping
- x86: make CONFIG_RELOCATABLE the default
- x86, mce: add basic error injection infrastructure
- x86, mce: Add boot options for corrected errors
- x86, mce: add machine check exception count in /proc/interrupts
- x86, mce: add MCE poll count to /proc/interrupts
- x86, mce: add table driven machine check grading
- x86, mce: deprecate old 32bit machine check code
- x86, mce: document new 32bit mcelog requirement in Documentation/Changes
- x86, mce: enable MCE_AMD for 32bit NEW_MCE
- x86, mce: enable MCE_INTEL for 32bit new MCE
- x86, mce: improve documentation
- x86, mce: use 64bit machine check code on 32bit
- x86, mce: therm_throt: Don't log redundant normality
- x86, mce: don't log boot MCEs on Pentium M (model == 13) CPUs
- x86, mce: Don't initialize MCEs on unknown CPUs
- x86: MSR: add methods for writing of an MSR on several CPUs
- x86: nmi: Add Intel processor 0x6f4 to NMI perfctr1 workaround
- x86/PCI: add description for check_enable_amd_mmconf boot parameter
- x86: smarten /proc/interrupts output for new counters
- x86, setup: "glove box" BIOS calls -- infrastructure
- x86, setup: "glove box" BIOS interrupts in the APM code
- x86, setup: "glove box" BIOS interrupts in the core boot code
- x86, setup: "glove box" BIOS interrupts in the EDD code
- x86, setup: "glove box" BIOS interrupts in the MCA code
- x86, setup: "glove box" BIOS interrupts in the video code
Various:
- Add Fenghua Yu as temporary co-maintainer for ia64
- amd64_edac: add DRAM address type conversion facilities
- asm-generic: add a generic unistd.h
- asm-generic: add generic ABI headers
- avr32: Add support for Mediama RMTx add-on board for ATNGW100
- Blackfin: add support for bzip2/lzma compressed kernel images
- Blackfin: initial support for ftrace
- Blackfin: initial support for ftrace grapher
- DMA: TXx9 Soc DMA Controller driver
- MIPS: Add Cavium OCTEON PCI support.
- MIPS: Add hibernation support
- MIPS: Add support for Texas Instruments AR7 System-on-a-Chip
- MIPS: Allow suspend and hibernation again on uniprocessor kernels.
- MIPS: CMP: activate CMP support
- S390: ftrace: add dynamic ftrace support
- S390: ftrace: add function graph tracer support
- S390: ftrace: add function trace mcount test support
- S390: ftrace: add system call tracer support
- S390: pm: memory hotplug power management callbacks
- S390: secure computing arch backend
- sh: Add ms7724se (SH7724) board support
- sh: Add support for SH7724 (SH-Mobile R2R) CPU subtype.
- sh: SH7786 SMP support.
- sparc64: Add proper dynamic ftrace support.
- sparc64: Use new dynamic per-cpu allocator.
MM
- memcg: add file-based RSS accounting
- memcg: add interface to reset limits
- memcg: fix behavior under memory.limit equals to memsw.limit
- mm: add swap cache interface for swap reference
- mm: introduce PageHuge() for testing huge/gigantic pages
- mm: Pass virtual address to __p{te,ud,md}_free_tlb()
- mm: remove CONFIG_UNEVICTABLE_LRU config option
- mm, x86: remove MEMORY_HOTPLUG_RESERVE related code
- oom: move oom_adj value from task_struct to mm_struct
- pagemap: add page-types tool
- pagemap: document 9 more exported page flags
- pagemap: document clarifications
- vmscan: make mapped executable pages the first class citizen
- vmscan: properly account for the number of page cache pages zone_reclaim() can reclaim
- x86: add hooks for kmemcheck
Tracing
- blktrace: add trace/ to /sys/block/sda
- blktrace: support per-partition tracing
- blktrace: support per-partition tracing for ftrace plugin
- ftrace: add kernel command line function filtering
- function-graph: add option to calculate graph time or not
- function-graph: add stack frame test
- function-graph: disable when both x86_32 and optimize for size are configured
- gcov: fix documentation
- kernel: constructor support
- oprofile: add support for Core i7 and Atom
- oprofile: introduce module_param oprofile.cpu_type
- ring-buffer: add benchmark and tester
- ring-buffer: add total count in ring-buffer-benchmark
- tracing: add average time in function to function profiler
- tracing: Add documentation for the power tracer
- tracing: add function profiler
- tracing: adding function timings to function profiler
- tracing: add irq tracepoint documentation
- tracing: add new tracepoints docbook
- tracing: Document the event tracing system
- tracing/events: Documentation updates
- tracing/filters: support for filters of dynamic sized arrays
- tracing: make the function profiler per cpu
Virtualization
- KVM: Add VT-x machine check support
- KVM: Enable MSI-X for KVM assigned device
- KVM: Fix cpuid feature misreporting
- KVM: SVM: Add NMI injection support
- lguest: add support for indirect ring entries
- lguest: Add support for kvm_hypercall4()
- xen: add "capabilities" file
Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in vorangegangen Ausgaben des Kernel-Logs auf heise open. (thl/c't) (thl)