What's new in Linux 3.9
by Thorsten Leemhuis
The Linux kernel is finally able to use SSDs as hard-disk cache. Changes to the network subsystem promise to improve the way server jobs are distributed across multiple processor cores. Linux 3.9 also includes drivers for new AMD graphics chips and soon-expected Wi-Fi components from Intel.
Linus Torvalds has released Linux kernel 3.9 – ten weeks after Linux 3.8. He and his fellow kernel hackers have therefore kept to their usual rhythm, as most of the recent kernel versions have taken around seventy days to develop.
The kernel's Device mapper now includes a cache target called "dm-cache" (1, 2, 3). This option enables a drive to be set up as a cache for another storage device, for example, an SSD as a cache for a hard drive. This feature is able to speed up data writes, as it allows the faster SSD to first cache data and then, in a quiet moment, transfer it to the slower hard drive. The cache target is also able to store frequently read data from the hard drive on the SSD in order to speed up access to it. This feature, which is classed as experimental, is a new development that, by taking an alternative starting point from within the kernel, achieves much the same as the more venerable flashcache and bcache caching solutions. Both are maintained outside the kernel, but it looks like Bcache will be merged into Linux 3.10.
This article provides an overview of the most important changes in Linux version 3.9 and a look ahead to what is coming in Linux 3.10. More information on 3.9 can be found in the "Coming in 3.9" mini-series:
In these articles, you will find the more detailed source articles that cover all the important changes in each particular area. There is also the "Minor gems" section in each which lists the many other changes not mentioned in the main article but which, for many users, are still of great significance.
TCP and UDP sockets now support a SO_REUSEPORT option that allows multiple sockets to listen on the same port. This enables, for example, multiple web server processes or threads to open individual sockets to listen on port 80; any connections that come in on this port will be evenly distributed across the sockets by the kernel.
This approach aims to improve the way workloads are distributed across the available processor cores. Google developer Tom Herbert, who programmed this extension, says that the new approach can help avoid bottlenecks that appear in certain situations when only one thread accepts new connections and then distributes them across other threads. The new approach is also designed to prevent workloads from being distributed very unevenly across processor cores; according to Herbert, this can happen when multiple threads are listening on a single socket. Details concerning these problems and other aspects of Herbert's approach can be found in the feature's commit comment and in an article on LWN.net.
In addition to RAID 0 and 1, the Btrfs filesystem now includes experimental native support for RAID 5 and 6, as unveiled in February. Embedding RAID capabilities within the filesystem allows implementation of features that are difficult to realise using the layer model, in which the filesystem and the RAID array don't know much about the internals of each other. RAID functionality embedded in the filesystem means that, for example, in the event of the failure and replacement of a disk forming part of a Btrfs RAID array, Btrfs need only restore areas containing data, since it is able to determine which areas are occupied. However, abstraction means that a Linux software RAID array administered using mdadm is not able to access this information and therefore has to restore the RAID volume in its entirety, which is time-consuming.
The ext filesystem developers have fixed a performance problem in the JBD2 journalling layer used by ext4, which arose in Linux 3.0. Support for user namespaces has been added to CIFS, NFS and various other filesystems. This change has not, however, permeated through to XFS, meaning that user namespaces can still only be activated in the kernel configuration if XFS is deactivated.