Channels

Services

Kernel Log: Coming in 2.6.28 - Part 1: ATA support and block layer

In the week since the publication of Linux 2.6.27, the kernel developers have already integrated more than 4000 patches into the main development tree of Linux, from which kernel version 2.6.28 will emerge in late December or early January (Linux 2.6.27). A single kernel log that attempted to describe all these changes would quickly exceed the time available to most readers, so we will deal with the changes made to the various domains of the Linux kernel during this development cycle.

In the case of the IDE subsystem, for example, that is essentially matched to parallel ATA, there have again already been many large changes in previous kernel versions (1, 2), although all current ATA controllers supported by the drivers of the IDE subsystem have already long been able to respond to the new Libata drivers. As the developers can't agree on a framework, however, the older IDE subsystem will probably keep on being maintained in the near future, even though Libata should originally have replaced it.

The developers have implemented support for "Disk Shock Protection" for both subsystems (Libata, Ide, documentation) – in conjunction with data from acceleration sensors, a userspace application can will be able to instruct the kernel to park the read/write heads of the hard disks as quickly as possible and keep them parked for a defined period, in order to protect the hard disk from damage due to shocks. IBM introduced such an "Active Protection System (APS)" years ago on Thinkpad notebooks running under Windows. This functionality can already be used under Linux to some extent, using some Thinkpad-specific drivers or the precursors of the now integrated code.

There have also been big changes to the block layer, which supplies various basic functions for reading and writing to storage media. Libata can now report to the overlaying block layer whether a data medium is an SSD (solid-state drive); using this information, the IO schedulers CFQ or AS associated with the block layer can treat the data flow appropriately and, in the case of SSDs, then no longer need to take access times for the positioning of the read/write heads into consideration, as they have to do for hard disks. Using the new Discard function), file systems can now notify the block layer that specific areas (blocks) of the data medium are no longer in use – this is important for SSDs too, so that their wear-leveling unit knows which blocks are occupied.

On multicore or multiprocessor systems, IO CPU Affinity is intended to increase data throughput and reduce CPU loading. To achieve this, the block layer attempts to keep processing data using the processor on which the data request was made, since the data is often still available in the CPU cache. The block layer now also supports size changes of block devices at runtime and allows Xen guests access to more than 16 virtual block devices (xvd) via the blkfront driver. A number of small block layer patches by Libata developer Tejun Heo further removes the limitation of a maximum of 15 hard drive partitions on data media driven via Libata.