How to choose the most optimal RAID settings on PE2950

I have some Dell PowerEdge 2950's with 4x 15k, 150GB Cheetah SAS drives in them. They are going to be VM hosts, CentOS running ESXi with Windows Server 2k8 guests. Some guests will be hosting IIS servers, and others MSSQL servers.

I am trying to set the RAID virtual disks settings and can't decide which is more optimal given this situation;

Read Policy: Out of Read-Ahead, No-Read-Ahead and Adaptive Read-Ahead, the default is Read-Ahead.

I will be making large sequential writes initially, writing out blank images for virtual machine hard drives (lets say 30GBs from /dev/zero for example) so Read-Ahead seems good at first. But within the virtual machines reads could be random from anywhere within their file systems as they are IIS and MSSQL servers, so perhaps No-Read-Ahead is a better idea?

Now I think Adaptive Read-Ahead would be better then as a compromise but I don't know much about this option, how does it compare in performance to the others?

Write Policy: write-back caching, write-through caching, the default is  write-back caching.

The default of write-back caching is safer than write-through caching but at a performance expense. My thinking here is that in the event of power loss for example, it seems more likely in my head (this is why I need some clarification!) that damage will occur to a guest VM with write-back caching enabled, so I should favour write-through?

I have searched around and there is obviously no definitive answer, so I would like to find out what is best for my situation.


Solution 1:

First off, hypervisors are sometimes referred to as "IO blenders". They make it very hard for any algorithm to predict what they'll do next because they don't let each VM have its own real SCSI disk. Because of this, you definitely don't want straight up read-ahead. I don't know what your system thinks adaptive read-ahead is, but if it's a setting that will detect when sequential reads are being done and conservatively read a little bit ahead, that would probably be fine.

Second, you always want write-back caching if it's in any way possible. It acknowledges writes as soon as they're saved to cache and then destages them to disk as quickly as possible. This is not safe if you lose power to your cache, though. Battery backed up cache is a requirement for write-back caching, if you want to have consistent data when you come back from a power failure.