Raid 5 Stripe size ?

rust0r

n00b
Joined
Jan 12, 2010
Messages
33
I've done the googling and now want everyone's opinions, the data stored will be games, movies (divx, dvd, and bluray), tv shows, mp3s, large pictures(8mb+) and then the smaller assorted files that everyone has but doesn't know how to sort. The small files stay put, its more the media that gets copied/moved around to various sources/drives

It appears most people/places suggest going with 64bit stripe, but ultimately I want to see what everyone here thinks about it (there hasn't been a good discussion in this section that I could find)

4x1TB (expanding shortly) Raid 5 using a 3ware 9650SE-12ML (also does anyone know if for this particular 3ware card you can customize the timeout for error recovering drives?)

Lets here the suggestions/reasons why! Thanks again
 
The 3ware 9650se doesn't support 128KB stripe, only 32KB, 64KB, and 256KB, with 256KB being the default and recommended stripe size as of Codeset 9.5.2.

On my 3ware 9650se 4x 1TB RAID-5 array with mainly large files (avg ~370MB/file) I use a 256KB stripe.

On my 3ware 9650se 4x 500GB RAID-5 array with a mainly smaller files (avg ~3MB/file) I use a 64KB stripe.

For movies (divx, dvd, and bluray), tv shows, mp3s, large pictures a 256 KB stripe would be the best, no questions asked.

As for games, it would really depend on the game in question. For games that install a lot of small files on your HDD, a 64 KB stripe would work better, but for the majority of games which seem to use PAK files (or similar archive formats) to store all their small files, a 256KB stripe would probably be better.
 
For movies (divx, dvd, and bluray), tv shows, mp3s, large pictures a 256 KB stripe would be the best, no questions asked.

As for games, it would really depend on the game in question. For games that install a lot of small files on your HDD, a 64 KB stripe would work better, but for the majority of games which seem to use PAK files (or similar archive formats) to store all their small files, a 256KB stripe would probably be better.

Actually, the relation between RAID stripe size and common access size works the other way, against common wisdom. According to 3ware, if you plan to do a lot of sequential accesses to large files (like video editing) a smaller stripe size is recommended, like 64k. But if you gotta to do a lot of smaller, random accesses to your array (database or web serving comes to mind), the large 256k stripe size should prove more useful.

This is from the 3ware knowledge base:
The default stripe size of 64KB will give the best performance with applications that have many sequential reads and writes. A larger stripe size will give better performance with applications that have a lot of random reads and writes. In general, the smaller the stripe size, the better the sequential I/O and the worse the ransom I/O. The larger the stripe size, the worse the sequential I/O and the better the random I/O.

The reason behind that is simple to grasp: with a small stripe size, all disks in an array will contribute to the IO of the same (larger) file, thereby multiplying the sequential bandwidth most of the time.
With a large stripe size, disks will be able to service small files separately and independently, thereby increasing the random IOPS of the array.

In a typical home media server / gaming environment, I doubt any setting would make a difference though. I'd just go with the default, as the controller kernel, cache algorithms and storage drivers are most likely optimized for that.
 
Last edited:
My benchmarks with RAID0 confirmed that larger stripesizes work better for random I/O; though some RAID engines (notably many cheap onboard fakeRAID drivers) always read the whole stripe size even with only a part requested; this is totally unnecessary and results in higher stripesizes yielding less performance. You can see my (unfinished) article with results here:
http://submesa.com/data/raid/geom_stripe
http://submesa.com/data/raid/geom_stripe/page2

So if high stripesizes are best, what are the smaller ones used for? Well with 8 disks with 256KB stripe in RAID0 you would need 2 megabyte read-ahead done by the filesystem to achieve full sequential performance; while with 32KB stripe you need only 256KB read-ahead to put all 8 disks at work. As i know, most filesystems use only 128KiB read-ahead, or 8 blocks of 16KiB. Tuning of the read-ahead mechanism might be required to achieve maximum sequential read/write speeds with many disks in striping RAID.

RAID5 makes things a bit more complex, due to sequential writes only being possible in chunks of the exact same size as the full stripe block or (number of disks - parity disks) * stripesize = full stripe block size. So with a 8-disk RAID5 and 256KiB stripe, you would have 7*256KiB=1792KiB full stripe block. That means any write less this size would be random write requiring to read parts of the full stripe block and cause a lot of seeking. Keeping the full stripe block rather low in size might be good to allow smaller sequential writes to actually be handled as sequential writes by the RAID5 engine.
 
Back
Top