NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

PR/39686 CVS commit: src/sys/dev/ic



The following reply was made to PR kern/39686; it has been noted by GNATS.

From: "Michael L. Hitch" <mhitch%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/39686 CVS commit: src/sys/dev/ic
Date: Tue, 7 Sep 2010 18:19:17 +0000

 Module Name:   src
 Committed By:  mhitch
 Date:          Tue Sep  7 18:19:16 UTC 2010
 
 Modified Files:
        src/sys/dev/ic: ciss.c
 
 Log Message:
 Fix a performance problem with the ciss(4) driver.  NetBSD does common
 queueing at the scsipi midlayer, and if the midlayer is not requested to
 enable tagged queueing, the midlayer will only queue one command to the
 adapter driver for each device.  The SmartArray adapter is capable of
 handling multiple commands, and in the rather common case where there is
 no battery backup and no write cache, doing single write commands is very
 slow.  The SmartArray adapter runs much better when several commands can
 be issued to a device.
 
 This has been observed and discussed in several list threads, notably:
 http://mail-index.NetBSD.org/netbsd-users/2008/10/01/msg002083.html
 http://mail-index.NetBSD.org/tech-kern/2008/11/30/msg003704.html
 
 This also addresses PR kern/39686.
 
 To enable tagged queueing, the adapter driver responds to the midlayer
 request to set the transfer mode.  However, the SmartArray does not respond
 to the SCSI INQUIRY command with an ANSII field of 2 or more, so the
 scsipi midlayer will ignore the CmdQue bit in the flags3 field of the
 inquiry data.  This fix will patch the inquiry data so set the ANSII field
 to 2, and responds to the midlayer request to set the transfer mode by
 requesting tagged queueing.
 
 In addition, the original port of the driver did not set up the adapter
 parameters correctly as mentioned in the second list thread mentioned
 above.  The adapt_openings is the total number of commands that the
 adapter will accept rather than the number of commands divided by the
 number of logical drives.  Also, the adapt_max_periph is the maximum number
 of commands which can be queued per peripheral device, not the number of
 logical drives [which in the case of a single logical drive limited the
 number of commands queued to 1].
 
 I'm also suppressing an error message for invalid commands if the error
 was due to the SCSI_SYNCHRONIZE_CACHE_10 command, since that command is
 not supported by the SmartArray adapter, but used with wapbl(4) meta-data
 journaling.  Setting the ANSII version to 2 to allow enabling tagged queueing
 also enables the use of the SCSI_SYNCHRONIZE_CACHE_10 command.
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.22 -r1.23 src/sys/dev/ic/ciss.c
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 


Home | Main Index | Thread Index | Old Index