Kernel-Log – Was 3.6 bringt (3): Architektur
Linux 3.6 kann die Stromzufuhr von PCIe-Chips und ATA-Ports unterbrechen. Ein neues Userspace-Treiber-Framework soll virtualisierten System flotteren Zugriff auf einzelne PCI-/PCIe-Geräte ermöglichen. Änderungen am Prozess-Scheduler versprechen ein besseres Reaktionsverhalten.
- Thorsten Leemhuis
Der in ein bis drei Wochen erwartete Linux-Kernel 3.6 kann PCIe-Geräte in den Tiefschlafzustand "D3cold" schicken, den manche moderne Rechner unterstützten, um die Stromversorgung einzelner PCIe-Geräte komplett zu unterbrechen (1, 2, 3). Auch das Libata-Subsystem kann einzelne ATA-Ports nun in solch einen Schlafzustand versetzen; darauf soll für spätere Kernel-Versionen vorbereiteter Code aufbauen, um optische Laufwerke in den Tiefschlaf zu schicken, was als ZPODD (Zero-Power Optical Disk Drive) bezeichnet wird.
Der Treiber intel_idle kann nun auch bei Intels aktueller Prozessorgeneration Ivy-Bridge das Ansteuern der Schlafzustände regeln; das kann interessant sein, wenn die Firmware eines Systems das eher schlecht handhabt. Das dem Kernel beiliegende Werkzeug Turbostat, das eine Nutzungsanalyse von Turbo- und Schlafzuständen moderner Prozessoren ermöglicht, wurde mit Linux 3.6 grundlegend überarbeitet; das soll einige Probleme beseitigen und die Unterstützung für aktuelle Prozessoren verbessern.
Virtualisierung
Zum Kernel stießen die IOMMU Groups, die Verbesserungen zur Isolation von PCI- und PCIe-Geräten bringen und dazu auf I/O-Virtualisierungstechniken wie AMD-Vi oder Intels VT-d zurückgreifen. Auf die IOMMU-Gruppierfunktion baut das ebenfalls integrierte Userspace-Treiber-Framework VFIO (Virtual Function I/O) auf (1, 2, 3); es ist vornehmlich für KVM gedacht, um PCI- und PCIe-Geräte an Gäste durchzureichen, damit diese die Geräte mit geringen Latenzen, hohem Datendurchsatz und ohne Gefahr für den Host ansprechen können. Details zu VFIO erläutert die zugehörige Dokumentation und ein Artikel bei LWN.net. Erweiterungen zur Nutzung von VFIO mit Hilfe von Qemu sind noch in Entwicklung.
KVM erhielt einige Änderungen, um den mit der Interrupt-Verarbeitung verbundenen Arbeitsaufwand zu reduzieren und so die Performance zu steigern (1, 2, 3). Xen unterstützt nun das Loggen von Maschinen-Fehlern via Mcelog. Über eine neues Sysfs-Interface können Xen-Gäste einzelne CPU-Kerne schlafen legen und wieder aufwecken, was zum Stromsparen interessant sein kann.
Prozess-Scheduler
Mike Galbraith hat Änderungen am Prozess-Scheduler vorgenommen, durch die jeder CPU eine andere, idealerweise nahe gelegene CPU als "Kamerad" zugeteilt wird; dieser CPU versucht der Scheduler als erstes neue Tasks zuzuweisen, wenn die Rechenkraft der ersten CPU nicht mehr ausreicht. Diese "CPU Buddies" genannte Funktion soll verhindern, das Prozesse auf immer wieder andere, möglicherweise schlafende CPU-Kerne verteilt werden.
Dieser Ansatz kann in bestimmten Fällen die Performance erheblich verbessern, wie im Commit-Kommentar erwähnte Messwerte von Tbench zeigen, die von einem Rechner mit vier Westmere-Prozessoren stammen. Wie Ingo Molnar in der Mail mit den Haupt-Git-Pull-Request für Scheduler-Änderungen schreibt, sollte die Änderung auch bei Desktop-Systemen mit Mehrkern-Prozessoren das Reaktionsverhalten verbessern.
[Update 20120916-1930] Ungefähr parallel zur Veröffentlichung der oberen Zeilen hat jemand auf der LKML von einem Workload berichtet, der durch die "CPU Buddies" 20 Prozent langsamer wird. Linus hat sich im Verlauf der daraufhin entstandenen Diskussion schnell dafür ausgesprochen, die Funktion wieder zu entfernen – bislang ist das aber noch nicht passiert. [/Update]
[Update 20120917-0740] Kurz vor der Veröffentlichung der sechsten Vorabversion von Linux 3.6 hat Linus Torvalds die "CPU Buddies"-Funktion schließlich doch entfernt. [/Update]
Plattformen
Entwicklungsstand
Letzten Sonntag hat Linus Torvalds die fünfte Vorabversion von Linux 3.6 veröffentlicht und sich dabei etwas verwundert gezeigt, wie wenig Änderungen ihm die anderen Kernel-Entwickler zugesandt haben. Er macht in der Freigabemail noch keine Andeutungen, ob er die Entwicklung dieser Version bald abschließen will.
Die Perf-Infrastruktur liefert bei den Intel-Prozessoren Nehalem und Sandy Bridge EP nun Performance-Informationen zum Verhalten des Uncore-Bereichs, zu dem Speichercontroller und L3-Cache gehören (1, 2). Einige weitere Neuerungen an Perf und den zugehörigen Werkzeugen fasst Ingo Molnar in der Mail mit seinem Haupt-Git-Pull-Request für dieses Subsystem zusammen.
Eine Reihe von Crypto-Treibern erhielten Prozessor-spezifische Optimierungen; die Module für die Algorithmen Serpent und Twofish etwa können bei x86-64-Systemen nun auf eine AVX-Assembler-Implementation zurückgreifen, die in bestimmten Fällen deutlich flotter als der bisher genutzte Code arbeitet, wie Messwerte in den Commit-Kommentaren zeigen (1, 2).
Der ARM-Code unterstützt nun die SoCs Armada XP und Armada 370 von Marvell sowie eine Altera-Plattform mit Coretex-A9-Core; auch den OMAP5 von Texas Instruments kann der Kernel nun ansprechen (u. a. 1, 2, 3, 4, 5).
Der MIPS-Code unterstützt nun auch den Loongson 1B (u. a. 1, 2).
Die kleinen Perlen
Die kleinen Perlen
Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutenden Änderungen:
ACPI, PCI & PM
- [
- [
- [
3
] ACPICA: Add support for multiple notify handlers - [
1
] ACPI: delete _GTS/_BFS support - [
D
] Add feature removal of old OMAP private DMA implementation - [
I
] bcma: BCM43228 support - [
D
] common: DMA-mapping: add DMA_ATTR_NO_KERNEL_MAPPING attribute - [
D
] common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute - [
1
] common: dma-mapping: add support for generic dma_mmap_* calls - [
- [
C N3
] cpuidle: add support for states that affect multiple cpus - [
C N1
] dmaengine: add OMAP DMA engine driver - [
C N1
] dmaengine: mmp_tdma: add mmp tdma support - [
C N2
] dmaengine: split out virtual channel DMA support from sa11x0 driver - [
C N4
] dma: tegra: add dmaengine based dma driver - [
C DN
] drivers/thermal/spear_thermal.c: add Device Tree probing capability - [
D
] iommu: Remove group_mf - [
C DN1
] iommu/tegra: smmu: Add device tree support for SMMU - [
- [
- [
D
] PCI/PM: Add ABI document for sysfs file d3cold_allowed - [
- [
- [
1
] PM / Domains: Add preliminary support for cpuidle, v2 - [
C N
] PM: PM notifier error injection module - [
D
] PM / Sleep: add knob for printing device resume times - [
C
] PM / Sleep: Separate printing suspend times from initcall_debug - [
C N1
] SPI: MIPS: lantiq: add FALCON spi driver - [
I
] ssb: add missing PCI ID for b/g/n single band BCM4322 - [
D
] Thermal: Add Hysteresis attributes - [
D
] Thermal: Documentation update - [
D 1
] Thermal: Make Thermal trip points writeable
Crypto & security
- [
N
] ARM: AT91SAM9G45: add crypto peripherals - [
- [
- [
C N3
] crypto: atmel - add Atmel AES driver - [
C N3
] crypto: atmel - add Atmel DES/TDES driver - [
C N3
] crypto: atmel - add Atmel SHA1/SHA256 driver - [
C N2
] crypto: bfin_crc - CRC hardware driver for BF60x family processors. - [
N1
] crypto: caam - add PDB (Protocol Descriptor Block) definitions - [
1
] crypto: caam - add support for SEC v5.x RNG4 - [
C N5
] crypto: caam - ahash hmac support - [
2
] crypto: caam - chaining support - [
C
] crypto: caam - disable IRQ coalescing by default - [
N
] crypto: caam - ERA retrieval and printing for SEC device - [
C N1
] crypto: caam - hwrng support - [
- [
C N2
] crypto: twofish-avx - remove duplicated glue code and use shared glue code from glue_helper - [
C N
] hw_random: add Broadcom BCM63xx RNG driver - [
- [
- [
- [
N
] random: add tracepoints for easier debugging and verification - [
- [
D
] random: final removal of IRQF_SAMPLE_RANDOM - [
- [
- [
- [
C 3
] Revert "crypto: GnuPG based MPI lib - additional sources (part 4)" - [
D
] Yama: higher restrictions should block PTRACE_TRACEME
Tracing
- [
1
] perf: Add generic PCI uncore PMU device support - [
- [
- [
N
] perf test: Add dso data caching tests - [
- [
- [
- [
5
] perf/x86: Add Intel Nehalem-EX uncore support - [
- [
- [
- [
1
] perf/x86: Uncore filter support for SandyBridge-EP
Virtualization
- [
C
] KVM: ia64: Mark ia64 KVM as BROKEN - [
- [
D
] KVM: MMU: document mmu-lock and fast page fault - [
- [
- [
- [
D 1
] KVM: PPC: Book3S HV: Make the guest hash table size configurable - [
- [
- [
- [
- [
- [
- [
- [
1
] tcm_vhost: Post-merge review changes requested by MST - [
x86
- [
- [
- [
- [
C
] x86: CONFIG_CC_STACKPROTECTOR=y is no longer experimental - [
- [
6
] x86/debug: Add KERN_<LEVEL> to bare printks, convert printks to pr_<level> - [
D
] x86, doc: Assign a bootloader ID for "Minimal Linux Bootloader" - [
1
] x86/flush_tlb: try flush_tlb_single one by one in flush_tlb_range - [
- [
- [
- [
1
] x86/tlb_info: get last level TLB entry number of CPU
ARM
- [
1
] ARM: at91: add AIC5 support - [
D 2
] ARM: at91: add of irq priorities support - [
N
] ARM: at91: Add support for board aks-cdu - [
N
] ARM: at91: add support for Telit EVK-PRO3 with Telit GE863-PRO3 - [
D
] ARM: at91: aic add dt support for external irqs - [
N
] ARM: davinci: add runtime PM support for clock management - [
C
] ARM: davinci: cp_intc: Add irq domain support - [
DN
] ARM: davinci: cp_intc: Add OF support for TI interrupt controller - [
D 2
] ARM: dma-mapping: remove custom consistent dma region - [
N
] ARM: dts: Add basic support for mx27_3ds board - [
N
] arm/dts: Add initial DT support for AM33XX SoC family - [
DN
] arm/dts: Add support for AM335x BeagleBone - [
N
] arm/dts: Add support for AM335x EVM - [
N
] arm/dts: Add support for i.MX31 bug 1.x board from buglabs. - [
N
] arm/dts: Add support for TI AM3517/05 EVM board - [
DN
] arm/dts: add wdt node for omap3 and omap4 - [
D
] ARM: dts: imx: update #interrupt-cells for gpio nodes - [
N
] arm/dts: New dts file for PandaBoardES (4460) - [
N
] arm/dts: OMAP2: Add support for OMAP2420H4 Board - [
N
] arm/dts: OMAP4: Add Variscite OMAP4 System-On-Modeule support - [
- [
- [
N
] ARM: dt: tegra: add Whistler device tree file - [
D
] ARM: EXYNOS: mark the DMA channel binding for SPI as preliminary - [
C N
] ARM i.MX31: Add devicetree support - [
N
] ARM: imx: Add common imx cpuidle init functionality. - [
- [
C N1
] ARM: integrator: convert to common clock - [
C N
] ARM: Kirkwood: Add basic device tree support for QNAP TS219. - [
C N1
] ARM: kirkwood: Add LS-XHL and LS-CHLv2 support - [
C N
] ARM: Kirkwood: Initial DTS support for Kirkwood GoFlex Net - [
N
] ARM: LPC32xx: Add dts for EA3250 reference board - [
C
] ARM: LPC32xx: DT conversion of Standard UARTs - [
N
] arm: mach-mvebu: add defconfig - [
DN
] arm: mach-mvebu: add documentation for new device tree bindings - [
N
] arm: mach-mvebu: add header - [
C N
] arm: mach-mvebu: add source files - [
N
] ARM: mach-shmobile: r8a7740 generic board support via DT - [
N
] ARM: mach-shmobile: sh7377 generic board support via DT - [
DN
] ARM: mx23: Add initial support for olinuxino board - [
N
] ARM: mxs: Add Crystalfontz CFA-10036 DTS - [
N
] ARM: mxs: convert apx4devkit board to device tree - [
N
] ARM: mxs: convert m28evk board to device tree - [
N
] ARM: mxs: convert stmp378x_devb board to device tree - [
N
] ARM: mxs: convert tx28 board to device tree - [
C N
] ARM: nomadik: convert to generic clock - [
- [
N3
] ARM: OMAP3+: clock33xx: Add AM33XX clock tree data - [
N1
] ARM: OMAP AM33xx: clockdomains: Add clockdomain data and respective operations - [
N6
] ARM: OMAP AM33xx: CM: Introduce AM33xx CM APIs and register level details - [
N1
] ARM: OMAP AM33xx: powerdomains: add AM335x support - [
N2
] ARM: OMAP AM33xx: PRM: add PRM support - [
N
] ARM: OMAP AM33xx: voltagedomain: Add voltage domain data - [
- [
C N
] ARM: OMAP: SmartReflex: Move smartreflex driver to drivers/ - [
DN
] ARM: Orion: DTify the watchdog timer. - [
C D 2
] ARM: Orion: DT support for IRQ and GPIO Controllers - [
C 1
] ARM Samsung: Move s3c pwm driver to pwm framework - [
C
] ARM: shmobile: armadillo800eva: enable FSI-WM8978 sound - [
C
] ARM: shmobile: kzm9g: enable FSI-AK4648 - [
N
] ARM: shmobile: r8a7740: add A4S pm domain support - [
N
] ARM: shmobile: soc-core: add R-mobile PM domain common APIs - [
D
] ARM: tegra{20,30}: Rename "mc" to "memory-controller" - [
D
] ARM: tegra20: Rename "emc" to "memory-controller" - [
C N7
] ARM: u300: convert to common clock - [
N
] ARM: vexpress: Add Device Tree for V2P-CA15_CA7 core tile - [
C 1
] ARM: vexpress: Initial common clock support - [
C N1
] ASoC: mmp: add sspa support - [
C N1
] PINCTRL: SiRF: add GPIO and GPIO irq support in CSR SiRFprimaII
PPC
- [
N
] powerpc: 64bit optimised __clear_user - [
C N1
] powerpc/85xx: Add BSC9131 RDB Support - [
N1
] powerpc/85xx: Add P1024rdb dts support - [
C N
] powerpc/e500: add paravirt QEMU platform - [
- [
C
] powerpc: IOMMU fault injection - [
1
] powerpc/iommu: Implement IOMMU pools to improve multiqueue adapter performance - [
N
] powerpc: POWER7 optimised copy_page using VMX and enhanced prefetch - [
N1
] powerpc: POWER7 optimised memcpy using VMX and enhanced prefetch - [
C N
] powerpc: pSeries reconfig notifier error injection module - [
C 2
] powerpc: remove Wind River SBC8560 support - [
C 2
] Revert "powerpc/p3060qds: Add support for P3060QDS board"
Various architectures
- [
C N3
] alpha: Use new generic strncpy_from_user() and strnlen_user() - [
C
] arch/tile: enable ZONE_DMA for tilegx - [
C N3
] arch/tile: introduce GXIO IORPC framework for tilegx - [
C N9
] arch/tile: provide kernel support for the tilegx mPIPE shim - [
CI N6
] arch/tile: provide kernel support for the tilegx TRIO shim - [
C N1
] arch/tile: provide kernel support for the tilegx USB shim - [
CI N4
] arch/tile: tilegx PCI root complex support - [
C
] bfin: add 32M, 16M and 8M uncached DMA region options - [
N1
] bfin: pm: add deepsleep for bf60x - [
C
] bounce: allow use of bounce pool via config option - [
C N1
] C6X: add basic support for TMS320C6678 SoC - [
C
] IA64: Mark PARAVIRT and KVM as broken - [
N
] m68k: add PCI bus code support for the ColdFire M54xx SoC family - [
N
] m68k: add PCI bus support definitions for the ColdFire M54xx SoC family - [
C
] m68k: allow PCI bus to be enabled for ColdFire m54xx CPUs - [
N
] m68k: common PCI support definitions and code - [
C
] m68k: CPU32 does not support unaligned accesses - [
C
] m68k: Introduce config option CPU_HAS_NO_UNALIGNED - [
2
] m68k: merge the MMU and non-MMU versions of the entry.S code - [
C N1
] m68knommu: Add support for the Coldfire 5251/5253 - [
C N3
] m68knommu: Add support for the Coldfire m5441x. - [
C
] m68knommu: Allow ColdFire CPUs to use unaligned accesses - [
N
] m68knommu: platform support for 8390 based ethernet used on some boards - [
C 2
] MIPS: BCM63XX: Add basic BCM6328 support - [
CI 1
] MIPS: BCM63XX: Add PCIe Support for BCM6328 - [
C
] MIPS: Enable vmlinuz for JZ4740 - [
C
] MIPS: Netlogic: Platform changes for XLS USB - [
N1
] MIPS: Netlogic: Platform NAND/NOR flash support - [
I N1
] MIPS: Netlogic: USB support for XLP - [
C N1
] MIPS: Netlogic: XLP PCIe controller support. - [
DN5
] MIPS: Octeon: Add device tree source files. - [
C 1
] MIPS: Octeon: Initialize and fixup device tree. - [
1
] MIPS: Unify memcpy.S and memcpy-inatomic.S - [
C
] s390/exceptions: sort exception table at build time - [
C
] s390/seccomp: add support for system call filtering using BPF - [
C N
] sh: intc: initial irqdomain support. - [
C N1
] sh: pfc: Rudimentary pinctrl-backed GPIO support. - [
2
] tilegx pci: support I/O to arbitrarily-cached pages - [
C N3
] tile pci: enable IOMMU to support DMA for legacy devices - [
C N1
] usb: add host support for the tilegx architecture
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.6 bringt"-Serie
Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Ende September erwarteten Linux-Version 3.6 geben, da alle größeren Neuerungen bereits in den ersten zwei Entwicklungswochen integriert wurden; Linux 3.6 befindet sich seit dem in der Stabilisierungsphase, in der die Kernel-Hacker normalerweise keine größeren Änderungen mehr vornehmen.
Über einige der Neuerungen von Linux 3.6 hat das Kernel-Log bereits im Rahmen der Artikelserie "Was 3.6 bringt" berichtet:
In den kommenden Wochen werden noch Artikel erscheinen, die sich mit allgemeiner Infrastruktur und Treibern 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". (thl) (thl)