dd if=/dev/random of=/dev/blog

26. January 2009

Tuning your Microsoft Windows host for your storage environment.

Filed under: Storage, SCSI, Microsoft — admin @ 20:13

It pains me to write this post but being in the storage industry I have had a significant exposure to Microsoft operating systems. If you have read any of my previous posts, you would know how I feel about Microsoft in the enterprise arena but if you are in the unfortunate situation of having to work with Microsoft Windows on top of your storage equipment, here is some helpful pointers to aid in tuning that node. Also please reference my earlier post on tuning your Linux 2.6 host for detailed information on some storage concepts. The following Windows variables are accessed through the Windows registry.

The SCSI target timeout value can be viewed and modified at HKLM\System\CurrentControlSet\Services\Disk\TimeoutValue. It takes a value of 1 to 255 seconds. Off of the top of my head I cannot recall what this value is defaulted to, but believe me when I say this: there are times when you may need to go as high as 255; for the return of an I/O transfer. When I used to work for Xyratex, their latest series of storage RAID controller (based on the nStor Wahoo technology) did not have an appropriately implemented cache. It was more of an intelligent buffer which temporarily stored data contiguously until the schedular made its way to the scene. So when you were configured with multiple LUN devices mapped to your host and initiated I/O to those same targets, it could have take as high as 255 seconds for the I/O to return to the SCSI laye thus eliminating the countdown to the timeout. If it were to timeout, as is the case with any OS, an Abort Sequences would be initiated to abort the I/O transfer.

I mentioned the MaximumSGList in a comment to an earlier post. This is found at HKLM\System\CurrentControlSet\Services\ [HBA Name] \Parameters\Device\MaximumSGList. The supported values are 16 to255. Setting it to 255 sets the maximum of 1MB and if you go over 255 (like 256) it will default to 64KB.

If you are a developer and need more bytes allocated for sense data (on the return of the SCSI command), you would have to modify the following field: HKLM\System\CurrentControlSet\Enum\ [Bus] \ [ DeviceID] \ [Device] \DeviceParameters\ScsiPort\TotalSenseDataBytes. According to Microsoft, the supported values are: “Between 18 and 255 for SCSI Port. Storport always uses 255.”

Some other extremely important variables are actually tuned on the HBA itself. For example, the queue depth which is sometimes referred to as throttling (by Qlogic) controls the amount of outstanding I/O transfer a LUN is limited to. Other variables include various retry counts and more. So please review the documentation to the HBA you are using.

Caution needs to be taken when modifying all of these values. You will need to understand the environment the host is being configured in and that also includes the I/O profile coming from that same host(s). If you set the queue depth too high and the host is sending out more I/O transfer than the storage controller can handle, the storage controller will either abort those commands or depending how it is configured send a BUSY status back to the initiator.

So there! I did it. <sigh>

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress