Serial ATA (SATA) status report

From: Jeff Garzik (jgarzik_at_pobox.com)
Date: 02/26/04

  • Next message: Nick Piggin: "Re: 2.6.3-mm3"
    Date:	Wed, 25 Feb 2004 21:34:37 -0500
    To: Linux Kernel <linux-kernel@vger.kernel.org>
    
    
    

    attached.

    
    

    Serial ATA (SATA) for Linux
    status report
    Feb 25, 2004

    Hardware support
    ================

    Intel ICH5 and ICH5-R
    ---------------------
    Summary: No TCQ. Looks like a PATA controller, but with a few added,
    non-standard SATA port controls. Hardware does not support hotplug.
    "Coldplug" support is potentially feasible.

    libata driver status: Production, but see issue #2, #3, #4.

    drivers/ide driver status: Production, but see issue #1, #2.

    Issue #1: Depending on BIOS settings, IDE driver may lock up computer
    when probing drives.

    Issue #2: Excessive interrupts are seen in some configurations.

    Issue #3: "Enhanced mode" or "SATA-only mode" may need to be set in BIOS.

    Issue #4: Driver disables SATA port on unload, but does not re-enable
    SATA port on load.

    Intel ICH6 ("AHCI")
    -------------------
    Summary: Per-device queues, full SATA control including hotplug
    and PM.

    libata driver status: "looks like ICH5" support available in ata_piix
    very soon. Full support available in a week or two.

    Promise TX2/TX4/SX4
    -------------------
    Summary: Per-host queues on all controllers. Full SATA control
    including hotplug and PM on all but one controller.

    libata driver status: Beta, but see issue #5.

    Issue #5: Some boards appear to have PATA as well as SATA ports. PATA
    is not currently supported, and no plans have yet been made to rectify
    this. Ideally drivers/ide would drive PATA, but if they are the same
    PCI device, that would not be feasible.

    Silicon Image 3112/3114
    -----------------------
    Summary: No TCQ. Looks like a PATA controller, but with full SATA
    control including hotplug and PM.

    libata driver status: Alpha.

    drivers/ide driver status: Production, but see issue #4.

    Issue #4: Need to have the most recent fixes posted to lkml, for stable
    operation and full performance (where possible).

    Silicon Image 3124
    ------------------
    Soon, hopefully. User-written.

    Broadcom/ServerWorks/Apple
    --------------------------
    Summary: Huge per-device queues, full SATA control including hotplug
    and PM.

    libata driver status: Beta.

    VIA

    ---
    Summary:  No TCQ.  Looks like a PATA controller, but with full SATA
    control including hotplug and PM.
    libata driver status:  Beta.
    SiS
    ---
    libata driver status:  in progress (user-written)
    Vitesse
    -------
    libata driver status:  in progress
    Marvell
    -------
    libata driver status:  in progress
    Software support
    ================
    Basic Serial ATA support
    ------------------------
    The "ATA host state machine", the core of the entire driver, is
    considered production-stable.
    The error handling is _very_ simple, but at this stage that is an
    advantage.  Error handling code anywhere is inevitably both complex and
    sorely under-tested.  libata error handling is intentionally simple.
    Positives:  Easy to review and verify correctness.  Never data
    corruption.  Negatives:  if an error occurs, libata will simply send
    the error back the block layer.  There are limited retries by the block
    layer, depending on the type of error, but there is never a bus reset.
    Or in other words:  "it's better to stop talking to the disk than
    compound existing problems with further problems."
    As Serial ATA matures, and host- and device-side errata become apparent,
    the error handling will be slowly refined.  I am planning to work with a
    few (kind!) disk vendors, to obtain special drives/firmwares that allow
    me to inject faults, and otherwise exercise error handling code.
    Queueing support
    ----------------
    Even though some SATA host controllers on the market already support
    command queueing (a.k.a. "TCQ"), libata does not yet support it.
    However, libata was designed from the ground-up to support queueing, so
    I need only change a few lines of code, and write two functions, to
    enable this behavior.
    Queueing will be enabled in libata soon, but to do so requires a long
    stretch of testing on a large variety of controllers and drives.  This
    is very time-intensive, and is the largest part of this task.
    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.  Just ignore it,
    it's going away.
    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 support by drivers/ide _only_.  libata will not support this.
    #2 will soon be supported by libata.
    #3 will be supported by libata when hardware is available from drive
    manufacturers.
    Hotplug support
    ---------------
    All SATA is hotplug.
    libata does not support hotplug... yet.
    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.
    SMART support
    -------------
    Soon.  Requires the capability to directly submit ATA commands from
    userspace to the low-level device, which must be added with care.
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Nick Piggin: "Re: 2.6.3-mm3"

    Relevant Pages

    • Linux Serial ATA (SATA) status report
      ... Serial ATA (SATA) for Linux ... Recent libata changes have focused on updating the libata core to be ... drivers/ide driver status: Production, but see issue #1, #2. ... full SATA control including hotplug ...
      (Linux-Kernel)
    • Serial ATA (SATA) on Linux status report
      ... Serial ATA (SATA) for Linux ... Hardware does not support hotplug. ... drivers/ide driver status: Production, but see issue #1, #2. ... full SATA control including hotplug ...
      (Linux-Kernel)
    • Serial ATA (SATA) for Linux status report
      ... Serial ATA (SATA) for Linux ... libata driver status: Production, but see issue #2, #3. ... full SATA control including hotplug ... libata driver status: In development. ...
      (Linux-Kernel)
    • Re: Serial ATA and SiI 3112A controller
      ... > Has anyone had any experience with the SiI 3112A SATA controller ... Looks like you'll need libata ... support for this device. ... Looks like a PATA controller, but with a few added, ...
      (Fedora)
    • Re: 2.6.17-mm6
      ... Several soldered bridge solutions are already supported by libata. ... All four commonly are found with SATA bridges, ... For such cases, PATA support for these _new_ controllers needs to be added to sata_via.c, sata_uli.c, sata_sis.c, and they should then be renamed. ...
      (Linux-Kernel)