Windows file server performance tuning

filesystemsoptimizationperformanceraidwindows-server-2003

I seek your opinion and tips/suggestions in optimizing the performance of a new Windows file server I'm building. I've inherited a Dell NF500 storage server (basically Dell 2950 with Windows 2k3 Storage Server OS). It has a PERC 6i with 256mb BBU cache and 6x 750gb SATA drives and 4gb system memory. I think I'm going with RAID6 as I fear loosing a 2nd drive during a long rebuild should the RAID6 volume go bad. The RAID6 volume will use 5x drives with 1x drive as hot spare as well, yes we're super paranoid but are also following our standard that all servers have hot spares.

With that said, I seek your opinion on other tips and suggestions to optimize the performance. It will serve as file server (random R/W and file sizes are typically small but there are some large ones) for both Windows, Macs and Linux clients via SMB/CIFS/NFS.

  • Any particular settings on the RAID controller side? Currently stripe element set to 256kb (can go up to 512k and maybe 1mb), adaptive read ahead policy and cache write back thanks to BBU. Should I make the stripe element size larger?

  • Any partitioning/file system level tweaks? I vaguely remember reading something about aligning start of disk partitions, # of drives, building file system with the right block size, etc. Any info, including links, you can send my way so I can review would be very much appreciated.

  • Any OS level tweaks? Since it's a single RAID volume, does it matter if I put the OS and data store on one partition or should I partition out? I plan to also use VSS, should that be another separate partition? Can it even be on the same partition?

  • Other best practices?

Thanks in advance. I'm a router/switch/fw guy so this is all a little new to me.
C.

Best Answer

Disk Subsystem: Here's an article from Microsoft re: partition alignment in SQL Server 2008: http://msdn.microsoft.com/en-us/library/dd758814.aspx

The theory explained in the article is why I'm giving you the link, not 'cuz I think you'll be running SQL Server. The workload of a file server is less apt to be as touchy about partition alignment as SQL Server, but every little bit helps.

NTFS:

You can disable last access time stamping in NTFS with:

fsutil behavior set disablelastaccess 1

You can disble short filename creation (if you have no apps that need it) with:

fsutil behavior set disable8dot3 1

Think about the best NTFS cluster size for the kinds of files you're going to be putting on the box. In general, you want to have as large a cluster size as you can get away with, balancing that against wasted space for sub-cluster-sized files. You also want to try and match your cluster size to your RAID stripe size (and, as was said above, have your stripes aligned to your clusters).

There's a theory that most reads are seqential, so the stripe size (which is typically the minimum read of the RAID controller) should be a multiple of the cluster size. That depends on the specific workload of the server and you'd need to measure it to know for sure. I'd keep them the same.

If you're going to have a large number of small files you may want to start with a larger reserve for the NTFS master file table (MFT) to prevent future MFT fragmentation. As well as talking about the fsutil command above, this document describes the "MFT zone" setting: http://technet.microsoft.com/en-us/library/cc785435(WS.10).aspx Basically, you want to reserve as much disk space for the MFT as you think you'll need, based on a predicted number of files you'll have on the volume, to try and prevent MFT fragmentation.

A general guide from Microsoft on NTFS performance optimization is available here: http://technet.microsoft.com/en-us/library/cc767961.aspx It's an old document, but it gives some decent background nonetheless. Don't necessarily try any of the "tech stuff" it says to do, but get concepts out of it.

Layout:

You'll have religious arguments with people re: separating the OS and data. For this particular application, I'd probably pile everything into one partition. Someone will come along and tell you that I'm wrong. You can decide yourself. I see no logical reason to "make work" down the road when the OS partition fills up. Since they're not separate RAID volumes, there's no performance benefit to separating the OS and data into partitions. (It would be a different story if they were different spindles...)

Shadow Copies:

Shadow copy snapshots can be stored in the same volume, or on another volume. I don't have a lot of background on the performance concerns associated with shadow copies, so I'm going to stop there before I say something dumb.