From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Garzik Subject: Re: [PATCH 1/2] libata: switch to using block layer tagging support Date: Wed, 20 May 2009 14:58:49 -0400 Message-ID: <4A1452E9.7000204@garzik.org> References: <20090520065942.GD11363@kernel.dk> <20090520070038.GE11363@kernel.dk> <1242845440.2881.74.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from srv5.dvmed.net ([207.36.208.214]:33840 "EHLO mail.dvmed.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755671AbZETS6z (ORCPT ); Wed, 20 May 2009 14:58:55 -0400 In-Reply-To: <1242845440.2881.74.camel@localhost.localdomain> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: James Bottomley Cc: Gwendal Grignou , Grant Grundler , Jens Axboe , linux-ide@vger.kernel.org, htejun@gmail.com James Bottomley wrote: > On Wed, 2009-05-20 at 11:08 -0700, Gwendal Grignou wrote: >> Form the ATA and SATA spec, NCQ is per device. It is possible to >> assign the same tag on different port, the disks and PMP will not >> care. >> However, today, we assign tag on a port basis [see >> __ata_qc_from_tag()], therefore only 32 commands can be inflight to >> all devices behind a given port. >> >> Being able to a do a mapping qc <---> {pmp port, tag} instead of just >> qc <---> {tag} will provide a performance boost when disks supporting >> NCQ are connected behind a PMP. Maybe it can be done, by moving qcmd >> from ata_port to ata_link. >> >> As Tejun said, the patch needs more work to be able to support same >> tag used on 2 different links behind the same port. >> Also, given we are changing the amount of commands we sent to the >> controller, we would have to change can_queue from ATA_MAX_QUEUE to >> ATA_MAX_QUEUE*n, where n is the number of ports supported by the >> controller [max SATA_PMP_MAX_PORTS, but some controller, like SiI3132 >> only supports 5 devices, and other may only support n = 1] >> >> When done, the patch will require a great amount of testing, given we >> will exercise the controllers in a brand new way. A white list might >> be necessary. >> >> Jens, using SCSI tagging for ata commands is a great idea, but it is >> no small feat... > > So realistically, you want one block queue per PMP port rather than an > artificial limits adjustment on the single queue per output phy ... this > shouldn't be too hard: it is exactly the way the SAS transport class > (and libsas) works today for expander connected SAS devices. Well... The limiting factor is "ATA command slots per SATA phy", which defines $N active ATA commands per port. If a SATA NCQ device is attached, you may have $N active ATA commands queued. If two SATA NCQ devices are attached to a PMP, which is attached to the SATA controller, the two devices share the limit of $N active ATA commands queued. If 32 devices are attached to a PMP, all 32 devices share the $N command queue limit. But additionally, as Tejun demonstrated, you might have a mix of NCQ and non-NCQ devices attached to the PMP. Thus, it is a case of nested limits: - $N maximum active commands per port; typically N==32 - $M maximum active commands per device; typically N==1 or N==32 Regards, Jeff