Kernel-Log – Was 2.6.32 bringt (6): Infrastruktur
Dank devtmpfs soll der Linux-Kernel schneller starten und ohne Udev arbeiten. Neu sind Unterstützung für ACPI 4.0 sowie zwei Make-Targets, die eine zum laufenden System passende Kernel-Konfigurationen erzeugen. Änderungen beim Power Management steigern den Datendurchsatz und ermöglichen eine bessere Nutzung der Stromsparmechanismen moderner I/O-Geräte.
- Thorsten Leemhuis
Der sechste Teil der Serie "Was Linux 2.6.32 bringt" beschreibt die Änderungen an und um die Infrastruktur des Kernels. Die fünf ersten Teile der Serie hatten sich mit den Neuerungen im Netzwerksubsystem, bei Grafik-Hardware, im Bereich Storage und Dateisysteme, bei weiteren Treibern sowie bei Architektur-Code, Virtualisierung und Tracing beschäftigt.
ACPI, PCI und PM
Verschiedene Patches erweitern der Linux-Kernel um Unterstützung für ACPI 4.0. Zusammen mit ihnen stieß auch ein Treiber für Leistungsmessgeräte nach ACPI 4.0 und der ACPI Processor Aggregator Device Driver zum Kernel. Letzterer legt einzelne CPUs schlafen, wenn er via ACPI 4.0 dazu angewiesen wird. Darüber lässt sich beispielsweise die Leistungsaufnahme vorübergehend reduzieren, um das System bei kritischer Stromversorgung oder drohender Überhitzung mit reduzierter Kraft weiterlaufen lassen zu können, statt es abschalten zu müssen. Der Aufnahme des Treiber ging eine längere Diskussion voran, in der Torvalds ein Machtwort zu Gunsten des Treibers sprach – Details dazu liefert ein Artikel bei LWN.net.
Im PCI-Subsystem haben die Kernel-Hacker die VGA-Arbitration-Patches integriert. Deren Code stellt bei Systemen mit mehreren Grafikkarten zusammen mit einem X-Server ab Version 1.7 sicher, dass die jeweils richtige Grafikkarte die ihr zugedachten VGA-Kommandos des X-Servers erhält – das bringt deutlich mehr Flexibilität beim Aufsetzen von Multiseat-Umgebungen. Details dazu finden sich in der Kernel-Dokumentation und zwei älteren Blog-Einträgen von Dave Airlie und Tiago Vignatti. Einige weitere wichtige Änderungen im PCI-Subsystem listet dessen Verwalter Jesse Barnes in seinem Haupt-Patch; darunter Optimierungen für PCI ASPM (Active State Power Management) und bessere Reset-Möglichkeiten für PCIe-Geräte – die dafür verantwortlichen Änderungen finden Sie auch über die Liste am Ende des Artikels.
Einige umfangreichere Änderungen am Power-Management-Code legen die Basis zur besseren Nutzung der zur Laufzeit verwendbaren Stromsparmechanismen moderner I/O-Geräte – Details dazu liefert ein LWN.net-Artikel. Eine ebenfalls bei LWN.net erläuterte Optimierung am Cpuidle-Framework soll vor allem bei größeren Servern den I/O-Durchsatz steigern – teilweise deutlich. Einige weitere Änderungen am Power-Management-Code listet der Haupt-Patch von Rafael J. Wysocki.
Scheduling und Security
Zahlreiche Verbesserungen gab es am für die Zuteilung von Prozessorzeit an Anwendungen zuständigen Scheduler des Kernels (1, 2). So führt der Kernel Kind-Prozesse nach dem Fork nun nicht mehr als erstes aus und setzt die Priorität von Kind-Prozessen auf den Standardwert, sofern das neue Flag "SCHED_RESET_ON_FORK" gesetzt ist – Hintergründe zu diesen beiden Änderungen liefern zwei Artikel bei LWN.net (1, 2).
Einige der Änderungen am Prozess-Scheduler beseitigen zudem Schwächen, die bei Geschwindigkeitsvergleichen mit dem kürzlich von Con Kolivas veröffentlichten und unabhängig vom Kernel entwickelten BFS ("Brain Fuck Scheduler") gefunden wurden. Eines der ausgeräumten Probleme hat das Encoding mit x264 auf Mehrkern-Systemen erheblich verlangsamt – einer der x264-Entwickler erläutert die Hintergründe näher in seinem Blog und nutzt das für einige Empfehlungen zur besseren Zusammenarbeit zwischen Entwicklern.
Sysfs unterstützt nun Security Labels, was Sicherheitsframeworks wie SELinux eine Zugriffskontrolle in dem virtuellen Dateisystem ermöglicht. Einige der wichtigsten Änderungen im Crypto-Bereich fasst der für dies Subsystem zuständige Herbert Xu im Haupt-Patch für 2.6.32 zusammen.
Devfs im zweiter Anlauf
Nach längeren Diskussionen im Sommer schaffte das gelegentlich als "Devfs 2.0" verspottete devtmpfs den Sprung in den Kernel. Mit seiner Hilfe kann der Kernel beim Start eine mit einem Device-Dateisystem bestückte Ramdisk nun selbst anlegen und einbinden – das kann den Systemstart beschleunigen und ermöglicht das Booten ohne eine mit Udev bestückte Initrd.
Das sind aber nur einige der Vorteile des in einem älteren LWN.net-Artikel näher erläuterten devtmps, das dennoch von manchen Kernel-Entwicklern heftig kritisiert wurde – Torvalds gefiel das Konzept jedoch und begrüßte insbesondere, dass der Kernel nun alles zum Systemstart benötige selbst erledigen könne. Direkt nach der Aufnahme fiel allerdings auf, dass Udev nach dem Start weiter nötig sei, um unter anderem die Berechtigungen von /dev/null und /dev/zero zu setzen – durch einen wenig später eingepflegten Patch erledigt der Kernel nun auch das.
Passend konfiguriert
Kernel-Tester können mit Hilfe des neuen Make-Target "localmodconfig" nun relativ einfach eine zur eingesetzten Distribution und der jeweiligen Hardware passende Kernel-Konfiguration erstellen, bei der keine unnötigen Module kompiliert werden. Als Ausgangsbasis dient die Konfigurationsdatei des gerade laufenden Kernels; jedoch werden alle Module deaktiviert, die zu diesem Zeitpunkt nicht geladen sind.
Daher fehlen möglicherweise Treiber für Geräte, die beim Aufruf von Make nicht angeschlossen sind – etwa USB-Hardware. Tester könnten so aber beim Erstellen eines Kernels viel Zeit sparen, wie der für diese Änderungen zuständige Kernel-Hacker Steven Rostedt in seinem Patch erläutert. Dort erklärt Rostedt auch die Funktionsweise und das Make-Target "localyesconfig", das eine Kernel-Konfiguration erzeugt, bei der alle zum Aufrufzeitpunkt geladenen Module fest einkompiliert werden.
Die kleinen Perlen
Viele weiteren nicht ganz so wichtige 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 betreuten Git-Zweigs mit den Kernel-Quellen auf Kernel.org. Im Webfrontend liefern normalerweise der Commit-Kommentar und der Patch selbst zahlreiche weitere Informationen zur jeweiligen Änderungen.
ACPI
- ACPI: add AC/DC notifier
- ACPI button: provide lid status functions
- ACPICA: ACPI 4.0 : Add new return package type, restructure module.
- ACPICA: ACPI 4.0: iASL/Disassembler - IPMI keyword support.
- ACPICA: ACPI 4.0: Interpreter support for IPMI.
- ACPICA: ACPI 4: Add validation for new predefined names.
- ACPICA: Add 64-bit support to acpi_read and acpi_write
- ACPICA: Add support for module-level executable AML code
- ACPICA: Major update for acpi_get_object_info external interface
- ACPICA: Update _OSI with new Windows OS strings
- ACPICA: Windows compatibility: autoexecute root _INI method
- ACPI: Make ACPI processor proc I/F depend on the ACPI_PROCFS
- ACPI, PCI: Change PREFIX to "PCI" from "ACPI" in mmconfig-shared.c
- led: document sysfs interface
- Revert "ACPI: Attach the ACPI device to the ACPI handle as early as possible"
- SFI: add capability to parse ACPI tables
- SFI: add platform-independent core support
- SFI: create linux/sfi.h
- thermal: sysfs-api.txt - document passive attribute for thermal zones
- video/backlight: document sysfs interface
- video/lcd: document sysfs interface
Crypto
- crypto: ahash - Convert to new style algorithms
- crypto: api - Add new style spawn support
- crypto: cryptd - Add support to access underlaying shash
- crypto: gcm - Use GHASH digest algorithm
- crypto: mv_cesa - Add support for Orion5X crypto engine
- crypto: padlock - Switch sha to shash
- crypto: sha256_generic - Add export/import support
- crypto: shash - Add spawn support
- crypto: talitos - add support for 36 bit addressing
- crypto: vmac - New hash algorithm for intel_txt support
Security
- Add audit messages on type boundary violations
- CRED: Add some configurable debugging [try #6]
- KEYS: Add a keyctl to install a process's session keyring on its parent [try #6]
- KEYS: Add garbage collection for dead, revoked and expired keys. [try #6]
- lsm: Add hooks to the TUN driver
- LSM/SELinux: inode_{get,set,notify}secctx hooks to access LSM security context information.
- security: introducing security_request_module
- selinux: Support for the new TUN LSM hooks
PCI
- agp: Add generic support for graphics dma remapping
- genirq: Support nested threaded irq handling
- intel_agp: Use PCI DMA API correctly on chipsets new enough to have IOMMU
- intel-iommu: Kill DMAR_BROKEN_GFX_WA option.
- intel-iommu: Support PCIe hot-plug
- MAINTAINTERS: remove hotplug driver entries
- PCI / ACPI PM: Propagate wake-up enable for devices w/o ACPI support
- PCI ASPM: support L1 only
- PCI ASPM: support partial aspm enablement
- PCI ASPM: support per direction l0s management
- PCI: Document pci_ids.h addition policy.
- PCI hotplug: add pci_configure_slot()
- PCI hotplug: add support for 5.0G link speed
- PCI: support for PCI Express fundamental reset
- spi: add SPI driver for most known i.MX SoCs
- spi: add spi_ppc4xx driver
- spi: add support for device table matching
- spi: Freescale STMP driver
- spi: McSPI off-mode support
- spi: remove i.MX SPI driver
- x86/amd-iommu: Support higher level PTEs in iommu_page_unmap
Powermanagement
- CPUFREQ: Introduce global, not per core: /sys/devices/system/cpu/cpufreq
- CPUFREQ: ondemand - Use global sysfs dir for tuning settings
- CPUFREQ: Powernow-k8: Enable more than 2 low P-states
- CPUFREQ: update Doc for cpuinfo_cur_freq and scaling_cur_freq
- cpuidle: menu governor: reduce latency on exit
- NOHZ: update idle state also when NOHZ is inactive
- PM/Hibernate: Do not release preallocated memory unnecessarily (rev. 2)
- PM/Hibernate: Do not try to allocate too much memory too hard (rev. 2)
- PM/Hibernate: Rework shrinking of memory
- tracing, x86, cpuidle: Move the end point of a C state in the power tracer
Scheduler
- sched: Add come comments to the sched features
- sched: Add new wakeup preemption mode: WAKEUP_RUNNING
- sched: Add SCHED_RESET_ON_FORK functionality for nice < 0 tasks
- sched: Add wait, sleep and iowait accounting tracepoints
- sched: Clean up SCHED_RESET_ON_FORK
- sched: Disable NEW_FAIR_SLEEPERS for now
- sched: Ensure that a child can't gain time over it's parent after fork()
- sched: Implement a gentler fair-sleepers feature
- sched: Introduce SCHED_RESET_ON_FORK scheduling policy flag
- sched: Merge select_task_rq_fair() and sched_balance_self()
- sched: Turn off child_runs_first
Diverse andere Änderungen
- cgroups: add a read-only "procs" file similar to "tasks" that shows only unique tgids
- cgroups: let ss->can_attach and ss->attach do whole threadgroups at a time
- cgroups: support named cgroups hierarchies
- checkpatch: make -f alias --file, add --help, more verbose help message
- connector: Provide the sender's credentials to the callback
- docs: update patch size in SubmittingPatches
- Documentation: ABI: document /sys/devices/system/cpu/
- Documentation: ABI: rename sysfs-devices-cache_disable properly
- Documentation: ABI: /sys/devices/system/cpu/cpuidle/
- Documentation: ABI: /sys/devices/system/cpu/cpu#/node
- Documentation: ABI: /sys/devices/system/cpu/cpu#/ topology files
- Documentation: ABI: /sys/devices/system/cpu/ topology files
- Driver core: Add support for compatibility classes
- exec: let do_coredump() limit the number of concurrent dumps to pipes
- futex: Add memory barrier commentary to futex_wait_queue_me()
- futex: Make function kernel-doc commentary consistent
- genirq: Add buslock support
- genirq: Add oneshot support
- kbuild: add static to prototypes
- kbuild: introduce ld-option
- kbuild: rename ld-option to cc-ldoption
- kbuild: set -fconserve-stack option for gcc 4.5
- kbuild: use INSTALLKERNEL to select customized installkernel script
- kconfig: add streamline_config.pl to scripts
- kconfig: add symbol value to help find the real depend
- kconfig: make local .config default for streamline_config
- kconfig: make localmodconfig to run streamline_config.pl
- kconfig: test for /boot/config-uname after /proc/config.gz in localconfig
- kernel-doc: allow multi-line declaration purpose descriptions
- kernel hacking: move STRIP_ASM_SYMS from General
- kmemleak: add clear command support
- kmemleak: Dump object information on request
- memcg: add comments explaining memory barriers
- memcg: improve resource counter scalability
- memcg: remove the overhead associated with the root cgroup
- memcg: show swap usage in stat file
- memory controller: soft limit documentation
- memory controller: soft limit interface
- memory controller: soft limit organize cgroups
- memory controller: soft limit reclaim on contention
- param: allow whitespace as kernel parameter separator
- percpu: build first chunk allocators selectively
- percpu: implement optional weak percpu definitions
- percpu: introduce pcpu_alloc_info and pcpu_group_info
- percpu: use dynamic percpu allocator as the default percpu allocator
- printk: add printk_delay to make messages readable for some scenarios
- rcu: Add synchronize_sched_expedited() rcutorture doc + updates
- rcu: Kconfig help needs to say that TREE_PREEMPT_RCU scales down
- rcu: Merge preemptable-RCU functionality into hierarchical RCU
- rcu: Remove Classic RCU
- rcu: Remove CONFIG_PREEMPT_RCU
- rcu: Renamings to increase RCU clarity
- scripts/get_maintainer.pl: add --git-blame
- scripts/get_maintainer.pl: add .mailmap use, shell and email cleanups
- scripts/get_maintainer.pl: add maintainers in order listed in matched section
- scripts/get_maintainer.pl: add patch/file search for keywords
- scripts/get_maintainer.pl: add --pattern-depth
- scripts/get_maintainer.pl: add --remove-duplicates
- scripts/get_maintainer.pl: add sections in pattern match depth order
- time: add function to convert between calendar time and broken-down time for universal use
- time: Introduce CLOCK_REALTIME_COARSE
- timekeeping: Add timekeeper read_clock helper functions
- timekeeping: Add xtime_shift and ntp_error_shift to struct timekeeper
- timekeeping: Increase granularity of read_persistent_clock()
- timekeeping: Introduce struct timekeeper
- Update flex_arrays.txt
Nachzügler
Die vorangegangen Teile der Kernel-Log-Serie "Was Linux 2.6.32 bringt" haben bereits einen detaillierten Überblick über die wichtigsten Änderungen in vielen Bereichen des Linux-Kernels 2.6.32 gegeben, weil das Gros der Änderungen wie vorgesehen in der ersten Phase des Entwicklungszyklus in den Hauptentwicklungszweig einzog. Einige kleinere, zumeist nicht ganz so wichtige Änderungen der Kategorie "Die kleineren Perlen" haben sich aber noch später eingeschlichen. Die wichtigsten von ihnen finden Sie in der folgenden Liste:
Grafik
- drm: Add the basic check for the detailed timing in EDID
- drm/radeon/kms: add debugfs for power management for AtomBIOS devices
- drm/radeon/kms: add quirk for acer 5102
- drm/radeon/kms: add quirk for hp dc5750
- drm/radeon/kms: add support for msi
- drm/radeon/kms/atom: add support for AdjustDisplayPll
- drm/radeon/kms/atom: add support for spread spectrum (v2)
- drm/radeon/kms: fix support for original r100
- drm/radeon/kms: initial mode validation support
Netzwerk
- ath5k: add LED definition for BenQ Joybook R55v
- ath5k: add LED support for HP Compaq CQ60
- e1000e: config PHY via software after resets
- e100: e100_phy_init() isolates selected PHY, causes 10 second boot delay
- iwlwifi: Use RTS/CTS as the preferred protection mechanism for 6000 series
- mlx4_core: Add a new supported 40 GigE device ID
- netdev: usb: dm9601.c can drive a device not supported yet, add support for it
Weitere Hintergründe und Informationen rund um die Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Ausgaben des Kernel-Log. (thl) (thl)