linux/drivers/ata
Grant Grundler 4f2c774856 [libata] Disable R_OK (Early ACK) on SII 3726 PMP
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: Grant Grundler <grundler@google.com>
Signed-off-by: Gwendal Grignou <gwendal@google.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2010-05-14 17:08:02 -04:00
..
ahci_platform.c libata: update gfp/slab.h includes 2010-05-14 17:08:02 -04:00
ahci.c ahci: implement AHCI_HFLAG_NO_FPDMA_AA and update NV quirks 2010-05-14 17:08:02 -04:00
ahci.h ahci: implement AHCI_HFLAG_NO_FPDMA_AA and update NV quirks 2010-05-14 17:08:02 -04:00
ata_generic.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
ata_piix.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig ahci: Add platform driver 2010-05-14 17:08:01 -04:00
libahci.c libata: update gfp/slab.h includes 2010-05-14 17:08:02 -04:00
libata-acpi.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
libata-core.c libata: unlock HPA if device shrunk 2010-04-06 10:55:33 -04:00
libata-eh.c libata: ensure NCQ error result taskfile is fully initialized 2010-04-22 21:59:13 -04:00
libata-pmp.c [libata] Disable R_OK (Early ACK) on SII 3726 PMP 2010-05-14 17:08:02 -04:00
libata-scsi.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
libata-sff.c libata: don't whine on spurious IRQ 2010-04-06 10:54:38 -04:00
libata.h libata: make gtf_filter per-dev 2009-10-06 00:26:27 -04:00
Makefile ahci: Add platform driver 2010-05-14 17:08:01 -04:00
pata_acpi.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_ali.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_amd.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_artop.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_at32.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_at91.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_atiixp.c pata_atiixp: enable parallel scan 2010-03-01 15:07:01 -05:00
pata_atp867x.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_bf54x.c pata_bf54x: handle portmuxing of pins through GPIO PORTs 2009-12-21 13:55:38 -05:00
pata_cmd64x.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_cmd640.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_cs5520.c pata_cs5520: remove dead VDMA support 2009-12-03 15:52:51 -05:00
pata_cs5530.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_cs5535.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_cs5536.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_cypress.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_efar.c pata_efar: Enable parallel scanning 2010-03-01 15:07:21 -05:00
pata_hpt3x2n.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_hpt3x3.c tree-wide: Assorted spelling fixes 2010-02-09 11:13:56 +01:00
pata_hpt37x.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_hpt366.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_icside.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_isapnp.c [libata] Improve timeout handling 2009-03-24 22:52:39 -04:00
pata_it821x.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_it8213.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_ixp4xx_cf.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
pata_jmicron.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_legacy.c pata_legacy: add pointers to QDI65x0 documentation 2009-12-03 16:06:47 -05:00
pata_macio.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_marvell.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_mpc52xx.c pata_mpc52xx: reduce code size by simple change of constant data types 2010-05-14 17:08:02 -04:00
pata_mpiix.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_netcell.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_ninja32.c ata: Report 16/32bit PIO as best we can 2009-04-16 15:28:23 -04:00
pata_ns87410.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_ns87415.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_octeon_cf.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_of_platform.c powerpc: Fix no interrupt handling in pata_of_platform 2008-10-10 15:55:17 +11:00
pata_oldpiix.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_opti.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_optidma.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_palmld.c [ARM] 5522/1: PalmLD: IDE support 2009-05-31 14:50:40 +01:00
pata_pcmcia.c pata_pcmcia / ide-cs: Fix bad hashes for Transcend and kingston IDs 2010-05-05 14:48:48 -04:00
pata_pdc202xx_old.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_pdc2027x.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_piccolo.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_platform.c drivers/ata: use resource_size 2009-09-11 02:25:58 -04:00
pata_qdi.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_radisys.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_rb532_cf.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_rdc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_rz1000.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_sc1200.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_scc.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_sch.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pata_serverworks.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_sil680.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_sis.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_sl82c105.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_triflex.c libata: Pass host flags into the pci helper 2010-03-01 14:58:46 -05:00
pata_via.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pata_winbond.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
pdc_adma.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_fsl.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_inic162x.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_mv.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_nv.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_promise.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_promise.h libata annotations and fixes 2008-01-23 05:24:15 -05:00
sata_qstor.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_sil24.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_sil.c [libata] sata_sil: disable DMA engine in sil_freeze() 2009-09-01 19:47:19 -04:00
sata_sis.c sata_sis: convert to slave_link 2009-09-08 21:17:36 -04:00
sata_svw.c [libata] convert drivers to use ata.h mode mask defines 2009-03-24 22:13:27 -04:00
sata_sx4.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_uli.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
sata_via.c sata_via: Delay on vt6420 when starting ATAPI DMA write 2010-03-01 15:19:21 -05:00
sata_vsc.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00