This status report applies to the latest SATA driver release, found in kernels >= 2.6.18-git5 (i.e. what will be 2.6.19).

Table of Contents

  1. Recent updates
  2. Software support

1. Recent updates

The drivers were moved to drivers/ata in the kernel source tree, and a large number of PATA drivers were merged. ACPI support is available in libata-dev.git and -mm. Port multiplier and power management support is maturing rapidly.

2. Software support

Basic Serial ATA support

The "ATA host state machine", the core of the entire driver, is considered production-stable.

Error handling has been dramatically improved, but error handling should now be considered beta, not production.

Queueing support

Support for SATA Native Command Queueing (NCQ) is available.

Tangent: Host-based queueing and Native Command Queueing: Queueing is the process of sending multiple commands to a single device, without waiting for prior commands to finish. This increases performance and reduces latency. There are three types of queueing in the ATA world:

  1. "legacy TCQ" -- some PATA devices support this. This design is largely a hack on top of existing ATA, to enable queueing for certain devices. Since host controllers did not require updates to support this, there are many limitations and complications that an OS driver must deal with, to enable legacy TCQ. As a result, legacy TCQ will only be supported on those few host controllers which provide host-based TCQ (see next item). This is very low priority, and may never be supported.
  2. "host-based TCQ" -- the host controller supports a queue of drive commands, whether or not the drive supports it.
  3. "Native Command Queueing" -- both host and drive cooperate in the queueing and execution of drive commands. This should provide the highest performance and lowest latency of all three options.

#1 is unlikely to be supported.
#2 may supported by libata, on a per-driver basis, for all hardware that supports it.
#3 is supported by libata, for most hardware and devices that support NCQ.

Hotplug support

libata supports both controller hotplug ("yank the card") and device hotplug ("yank the drive").

Most SATA controllers are hotplug-capable, if your system bus (PCI, etc.) is also hotplug-capable. All SATA devices are hotplug-capable.

The following SATA controllers will never support hotplug: Intel ICH5-8 (non-AHCI), Pacific Digital Talon (ADMA), Promise SATA SX4.

These controllers do not export enough information about the SATA phy to make it possible to support hotplug. In some cases, such as Intel ICH5-8 (non-AHCI), it is possible to support "coldplug" operation: the user informs the OS driver he wishes to disconnect his SATA device, rather than simply disconnecting it.

Power Management support

Over and above the power management specified in the ATA/ATAPI specification, one can aggressively control the power consumption of SATA hosts, the SATA bus, and the SATA device. As discussed on some mailing lists, the aggressive power management can be too aggressive, and park the heads too often (resulting in shortened disk drive life). Careful attention must be paid to balance.

There is little demand at the present time for aggressive, automatic power management under Linux.

System suspend/resume (suspend-to-RAM, suspend-to-disk) is currently supported for ata_piix, ahci, sata_sil and sata_sil24 drivers.

ACPI support is also needed in certain situations, to ensure that Linux properly initializes the device on boot, and after resume. A patch from Intel is available in -mm and libata-dev.git for this.

SMART support

With the integration of ATA passthru in kernel 2.6.15, SMART is fully supported in the standard libata driver.

There are also some lingering reports that using SMART commands while the disk is in heavy usage leads to timeouts and other failures. This needs to be investigated. Haven't seen any of these reports recently.

PATA support

libata is not specific to Serial ATA. It works for Parallel ATA (a.k.a. IDE) as well. Certain SATA controllers such as Promise and SiS include PATA ports on their SATA controllers.

libata has gained full support for PATA, including older chipsets and devices with buggy/problematic designs. Alan Cox has done a lot of work on this. PATA is be fully supported, alongside SATA. libata PATA drivers exist for almost all PATA chipsets.

libata PATA drivers will not be turned on by default for a long time, to avoid conflicts with CONFIG_IDE (the traditional IDE driver).

ATAPI support

ATAPI devices are now supported on all controllers that support ATAPI (this is most of them), as of kernel 2.6.15.

Port Multiplier support

Port Multipler (PMP) capability allows multiple SATA devices to attach to a concentrator, which then attaches to a SATA controller via a single SATA cable.

Tejun Heo has posted initial port multiplier support.