• Grant Grundler's avatar
    [libata] Disable R_OK (Early ACK) on SII 3726 PMP · 4f2c7748
    Grant Grundler authored
    In 2009, While running "cache read" performance test of drives behind
    SII PMP we encountered a "all 5 drives" timeout on more than 30% of the
    machines under test.  This patch reduces the rate by a factor of about 70.
    Low enough that we didn't care to further investigate the issue.
    
    Performance impact with any sort of "normal" use was ~2%+ CPU and less
    than 1% throughput degradation.  Worst case impact (cached read) was
    6% IOPS reduction. This is with NCQ off (q=1) but I believe FIS based
    switching enabled in the SATA driver.
    
    The patch disables "Early ACK" in the 3726 port multiplier.
    "Early ACK" is issued when device sends a FIS to the host (via PMP)
    and the PMP sends an ACK immediately back to the device - well before
    the host gets the response. Under worst case IOPs load (cached read
    test) and more than 2 PMPs connected to a 4-port SATA controller,
    I suspect the time to service all of the PMPs is exceeding the PMPs
    ability to keep track of outstanding FIS it owes the Host. Reducing
    the number of PMPs to 2 (or 1) reduces the frequency by several orders
    of magnitude. Kudos to Gwendal for initial debugging of this issue.
    [Any errors in the description are mine, not his.]
    
    Patch is currently in production on Google servers.
    Signed-off-by: default avatarGrant Grundler <grundler@google.com>
    Signed-off-by: default avatarGwendal Grignou <gwendal@google.com>
    Acked-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    4f2c7748
libata-pmp.c 24.7 KB