#pragma section-numbers on #pragma keywords Linux, kernel, operating system, changes, changelog, file system, Linus Torvalds, open source, device drivers #pragma description Summary of the changes and new features merged in the Linux kernel during the 3.9 development cycle Linux 3.9 has been released This Linux release includes support for experimental RAID5/6 modes and better defragmentation in files shared by snapshots in Btrfs; support for the "goldfish" emulator used by the Android SDK, ability to SSD storage as cache device; two new architecture ports: Synopsys ARC 700 and Meta Imagination processors; KVM virtualization support in the ARM architecture, a Intel driver that "injects" idle states to improve performance-per-watt, support for Chrome OS laptops, a new suspend power state, and the removal of the obsolete CONFIG_EXPERIMENTAL configuration option. Many small features and new drivers and fixes are also available. [[TableOfContents()]] = Prominent features in Linux 3.9 = == Experimental RAID 5/6 support and snapshot-aware defragmentation in Btrfs == * Btrfs has got [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 RAID 5] and [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6 RAID 6] support. The support is experimental and it's still no crash-safe, so it's only intented for testing. Code: [http://git.kernel.org/linus/4ae10b3a133e1147f3c818fe2ebaf005b217b7bf (commit 1], [http://git.kernel.org/linus/53b381b3abeb86f12787a6c40fee9b2f71edc23b 2], [http://git.kernel.org/linus/6ac0f4884eaad28441c6e0f9d1400a08c2149049 3)] * Snapshot aware defragmentation: Due to the copy-on-write design of Btrfs varios snapshots can share the same data blocks. This sharing could be undone by defragmentation, in this release defragmentation no longer breaks. Code: [http://git.kernel.org/linus/38c227d87c49ad5d173cb5d4374d49acec6a495d (commit)] == Android "goldfish" emulator == The Android development environment provides a QEMU-based ARM virtualized platform called "goldfish". This platform provides a virtual CPU and drivers for battery, mmc, audio, graphics, etc. This release includes support for the Goldfish platform, which makes possible to develop for Android with out-of-the-box kernels. Code: [http://git.kernel.org/linus/ddd70cf93d784af3698c86315aa0ded87ca0a0c5 (commit 1], [http://git.kernel.org/linus/84d7b768748943db2bb658b43931fdab04c224cc 2], [http://git.kernel.org/linus/c89f2750e9845aa115ca30c062edd569da619cad 3], [http://git.kernel.org/linus/e809c22b8fb0282048fc008cfcdd017186090dbc 4], [http://git.kernel.org/linus/2e82b83dc30e515ca3e03e79d4a398f30d796903 5], [http://git.kernel.org/linus/c289ba2d26cf872570ba23fceee8d80ae64be351 6], [http://git.kernel.org/linus/666b7793d4bfa9f150b5c2007ab48c755ddc53ca 7], [http://git.kernel.org/linus/85c34d2e7b0e0425cd3efc243ffc4e3631daa0b5 8)] == SSD cache devices == The device mapper has added a target (dm-cache) that allows a fast device such as an SSD to be used as a cache for a slower device such as a rotating disk. Different 'policy' plugins can be used to change the algorithms used to select which blocks are promoted, demoted, cleaned etc. It supports writeback and writethrough modes. Documentation: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/device-mapper/cache.txt?id=c6b4fcbad044e6fffcc75bba160e720eb8d67d17 Documentation/device-mapper/cache.txt] Code: [http://git.kernel.org/linus/c6b4fcbad044e6fffcc75bba160e720eb8d67d17 (commit 1], [http://git.kernel.org/linus/8735a8134786fa4ef36dee65d7fa779b99ba5fe3 2], [http://git.kernel.org/linus/f283635281132af7bc7b90af3c105b8c0f73b9c7 3)] == New architecture: Synopsys ARC 700 processors == This release introduces the Linux kernel port to the ARC700 processor family (750D and 770D) from Synopsys. ARC700 is highly configurable and power efficient 32-bit RISC core with MMU. It is embedded in SoCs deployed in TV Set Top boxes, Digital Media Players, all the way to Network-on-Chips. More information is available [http://www.synopsys.com/IP/ProcessorIP/ARCProcessors/Pages/default.aspx here]. More info about the kernel port can also be found in the [https://raw.github.com/vineetgarc/publish/master/ELCE-2012-ARC-Linux.pdf ELCE-Barclone '12 talk] on same topic. The GNU tool-chain, based off of gcc 4.4 + uClibc 0.9.30.3 is also available [http://github.com/foss-for-synopsys-dwc-arc-processors/linux.git at github] Code: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arc arch/arc/] == New architecture: Meta Imagination processors == This release introduces the Linux Kernel port to the Meta ATP (Meta 1) and HTP (Meta 2) processor cores from Imagination. Meta cores are 32-bit, hardware multithreaded, general purpose, embedded processors which also feature a DSP instruction set, and can be found in many digital radios. They are capable of running different operating systems on different hardware threads, for example a digital radio might run RTOSes for DAB decoding and audio decoding on 3 hardware threads, and run Linux on the 4th hardware thread to manage the user interface, networking etc. HTPs are also capable of running SMP Linux on multiple hardware threads. Instruction set and architecture overview documents can be [http://www.imgtec.com/downloads.asp found here]. Code: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/metag arch/metag/] == KVM support in ARM architectures == The ARM architecture port now supports the KVM virtualization system. This brings virtualization capabilities to the Linux ARM ecosystem. Code: [http://git.kernel.org/linus/749cf76c5a363e1383108a914ea09530bfa0bd43 (commit)] == Intel PowerClamp idle injection for improved power efficiency == The Intel PowerClamp driver performs synchronized idle injection across all online CPUs. The goal is to maintain a given package level C-state ratio. Compared to other throttling methods already exist in the kernel, such as ACPI PAD (taking CPUs offline) and clock modulation, this is often more efficient in terms of performance per watt. Documentation: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/thermal/intel_powerclamp.txt?id=d6d71ee4a14ae602db343ec48c491851d7ec5267 Documentation/thermal/intel_powerclamp.txt] Code: [http://git.kernel.org/linus/d6d71ee4a14ae602db343ec48c491851d7ec5267 (commit)] == New "suspend-freeze" suspend state: == This release includes a new suspend mode, suspend-freeze. It equals to frozen processes + suspended devices + idle processors. This state is useful for 1) platforms that do not have STR, or have a broken STR 2) platforms that have an extremely low power idle state which can be used to replace STR Compared with memory suspend, suspend-freeze saves less power because the system is still in a running state, but has less resume latency because it does not touch BIOS and the processors are in idle state. Compared with RTPM/idle,suspend-freeze saves more power, because the processor has longer sleep time once the processes are frozen, and it can get more power saving from the devices that does not have good RTPM support. To enable this suspend mode, echo freeze > /sys/power/state Code: [http://git.kernel.org/linus/7e73c5ae6e7991a6c01f6d096ff8afaef4458c36 (commit)] == Chrome OS laptop support == Complete support for all the devices present in the Chrome laptops sold by many companies has been added in this release. Code [http://git.kernel.org/linus/d1381f45ad54e0bb40ef19f99e87187ff3458bdb (commit)], [http://git.kernel.org/linus/261f171f571a82c1f990d484c374aa3f7236fe5e (commit)], [http://git.kernel.org/linus/e65a624b86241405b51cadc8e36944966b8c36b7 (commit)], [http://git.kernel.org/linus/33a84f8a7694e442a624556ef3ae40e91e31bd11 (commit)], [http://git.kernel.org/linus/8016bcbc380f952bfccb82fde3bb8b4b9cbd6400 (commit)] == Removal of CONFIG_EXPERIMENTAL == CONFIG_EXPERIMENTAL was a configuration option which was supposed to be used to enable experimental features that normal people shouldn't use. But the changes in the development model and the staging directory have made it obsolete, these days almost all distros enable it by default, so it has been removed. Developers will now add a "(EXPERIMENTAL)" tag in the title of their configuration option to warn users. = Driver and architecture-specific changes = All the driver and architecture-specific changes can be found in the [http://kernelnewbies.org/Linux_3.9_DriverArch Linux_3.9_DriverArch page] = Various core changes = == Core == * Add a CONFIG_TTY option to allow removal of the TTY layer [http://git.kernel.org/linus/4f73bc4dd3e8563ef4109f293a092820dff66d92 (commit)] * Module signing * Add -s option to sign-file [http://git.kernel.org/linus/1c37c054a7493e0537ea3d15a59dac3a0aa63a05 (commit)] * Add option to not sign modules during modules_install [http://git.kernel.org/linus/d9d8d7ed498ec65bea72dd24be7b9cd35af0c200 (commit)] * [http://kernelnewbies.org/Linux_2_6_21#head-8547911895fda9cdff32a94771c8f5706d66bba0 Dynamic ticks] full CPU time accounting. This is infraestructure used by the full dynticks that will be implemented in future kernels [http://git.kernel.org/linus/3f4724ea85b7d9055a9976fa8f30b471bdfbca93 (commit)], [http://git.kernel.org/linus/abf917cd91cbb73952758f9741e2fa65002a48ee (commit)] * NTP: Add a CONFIG_RTC_SYSTOHC configuration that allow ARM/etc systems that rely on the class RTC subsystem to have the same kind of automatic NTP based synchronization that we have on PC platforms [http://git.kernel.org/linus/023f333a99cee9b5cd3268ff87298eb01a31f78e (commit)] == Filesystems == * Btrfs * Add a new ioctl to get the label of a mounted file system [http://git.kernel.org/linus/867ab667e74377160c4a683375ee5b8bf8801724 (commit)] and set/change it [http://git.kernel.org/linus/a8bfd4abea3da0e28f215e2a2b8c2f1ca27ebe80 (commit)] * Implement unlocked direct-io write [http://git.kernel.org/linus/38851cc19adbfa1def2b47106d8050a80e0a3673 (commit)] * Reduce CPU contention while waiting for delayed extent operations [http://git.kernel.org/linus/bb721703aa551e98dc5c7fb259cf90343408baf2 (commit)] * Reduce lock contention on extent buffer locks [http://git.kernel.org/linus/242e18c7c1a8ff3aa05c9fbb6e0bb427511152a6 (commit)] * XFS * limit speculative prealloc near ENOSPC thresholds [http://git.kernel.org/linus/4d559a3bcb7383f34334092af07e68fb60910684 (commit)] * limit speculative prealloc size on sparse files [http://git.kernel.org/linus/a1e16c26660b301cc8423185924cf1b0b16ea92b (commit)] * Ext4: add punching hole support for non-extent-mapped files [http://git.kernel.org/linus/8bad6fc813a3a5300f51369c39d315679fd88c72 (commit)] * f2fs: add un/freeze_fs into super_operations [http://git.kernel.org/linus/d6212a5f18c8f9f9cc884070a96e11907711217f (commit)] * fuse: implement NFS-like readdirplus support [http://git.kernel.org/linus/0b05b18381eea98c9c9ada95629bf659a88c9374 (commit)] * hfsplus: add support of manipulation by attributes file [http://git.kernel.org/linus/324ef39a8a4f693035d63527f16100ed27310ecc (commit)] == Block layer == * Enable full blkcg hierarchy support in the CFQ IO scheduler [http://git.kernel.org/linus/d02f7aa8dce8166dbbc515ce393912aa45e6b8a6 (commit)] * Fix the performance regressions introduced by the "stable pages" work. [https://lwn.net/Articles/528031/ Related LWN article] [http://git.kernel.org/linus/7d311cdab663f4f7ab3a4c0d5d484234406f8268 (commit)] * MD RAID10: Improve redundancy for 'far' and 'offset' algorithms [http://git.kernel.org/linus/475901aff15841fb0a81e7546517407779a9b061 (commit)], [http://git.kernel.org/linus/9a3152ab024867100f2f50d124b998d05fb1c3f6 (commit)] == Networking == * TCP * Add a per-socket timestamp offset [http://git.kernel.org/linus/ceaa1fef65a7c2e017b260b879b310dd24888083 (commit)] * Remove Appropriate Byte Count support [http://git.kernel.org/linus/ca2eb5679f8ddffff60156af42595df44a315ef0 (commit)] * Send packets with a socket timestamp [http://git.kernel.org/linus/ee684b6f2830047d19877e5547989740f18b1a5d (commit)], [http://git.kernel.org/linus/93be6ce0e91b6a94783e012b1857a347a5e6e9f2 (commit)] * team: add ethtool support [http://git.kernel.org/linus/7f51c58731dfb0ef88ff283851a4710cc3335788 (commit)] == Virtualization == * Vmware VMCI (Virtual Machine Communication Interface). It enables high-speed communication between host and guest in a virtual environment via the VMCI virtual device. VMCI: Some header and config files. Code: [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/misc/vmw_vmci drivers/misc/vmw_vmci/] * Vmware VM sockets. VM Sockets allows communication between virtual machines and the hypervisor and are designed to work on top of the VMCI transport. A socket address family, "AF_VSOCK", is provided. Today, VM Sockets is used by various VMware Tools and various applications. For additional information about the use of VM Sockets, please refer to the [https://www.vmware.com/support/developer/vmci-sdk/ VM Sockets Programming Guide] [http://git.kernel.org/linus/d021c344051af91f42c5ba9fdedc176740cbd238 (commit)] /!\ /!\ /!\ This document is not 100% complete /!\ /!\ /!\ , meanwhile you can read these articles reporting about the kernel changes * LWN: [https://lwn.net/Articles/539179/ 3.9 Merge window part 1], [https://lwn.net/Articles/539892/ 3.9 Merge window, second episode], [https://lwn.net/Articles/540994/ The conclusion of the 3.9 merge window] * H-Open: Kernel Log: Coming in 3.9 [http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-9-part-1-Filesystems-and-storage-1831197.html Part 1], [http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-9-Part-2-Infrastructure-1838358.html Part 2], [http://www.h-online.com/open/features/Kernel-Log-Coming-in-3-9-Part-3-Drivers-and-networking-1842493.html Part 3]