RAID Scaling Charts, Part 3: 4-128 kB Stripes Compared

Stripe Size Discussion

Before talking about stripe size, it is important to mention the term stripe width, which equals the number of drives in a RAID array: for example, five drives equal a stripe width of five. Obviously, this value only changes if you alter the number of drives used in a RAID array; the more you add, the faster your RAID array will be, until you hit a controller or system interface bottleneck. The stripe size is the storage capacity for each individual hard drive in a RAID array, which the user can define with most RAID controllers. Be careful here: stripe size does not represent the storage capacity of an entire stripe set spanning over all used drives. A stripe set consists of all individual stripes as a whole, each of them having the selected stripe size.

A stripe is the smallest chunk of data within a RAID array that can be addressed. People often also refer to this as granularity or block size. It can be compared to the blocks (logical block addressing - LBA) on conventional hard drives. Most RAID controllers allow the user to define her or his favorite stripe size, because it alters the performance characteristics of a RAID array. Typical options are 16, 32, 64 and 128 kB, but many professional RAID controllers also offer smaller stripe sizes, and some even support sizes as large as 256 kB.

The option to alter stripe sizes with on-board RAID controllers such as the Intel Southbridges ICH7R, ICH8R and ICH9R does not make much of a difference in the desktop space. In fact, this feature is often overrated, as the performance changes are marginal on a typical gaming or office PC. However, it can be important for servers, though differences will still only be noticeable between very small and very large stripes with certain applications. A change from 32 to 64 kB can be measured, but isn’t typically noticeable.

In general, your stripe size choice has an impact on several factors:

  • Performance
    Conventional hard drives deliver their best transfer performance when they read or write sequentially, repositioning the heads as little as possible. From this standpoint, it makes the most sense to select the largest stripe size available, especially if your hard drives are good at providing high throughput. However, this only works if the files stored or read are at least as large as an entire stripe. If you will end of storing millions of text files, Word documents, small spreadsheets or similar small files, small stripe sizes will help to distribute all files across multiple drives to keep throughput high.
  • Capacity Used
    The stripe size also defines the amount of storage capacity that will at least be occupied on a RAID partition when you write a file. For example, if you selected a 64 kB stripe size and you store a 2 kB text file, this file will occupy 64 kB. Obviously, the stripe size defines the minimum amount of data that a RAID controller will distribute files across its hard drives, in my example, 64 kB. As long as a file can be written onto a single stripe or a single drive, you won’t have any advantage from running this particular RAID array.

If you want to create a RAID array for quick access to small files, small stripe sizes are favorable, to keep the waste of storage capacity small, and to provide high throughput thanks to a high level of data distribution across many drives. File servers for photos, audio and video should, however, be operated with larger stripe sizes, as this helps to maximize sequential read performance. In the end, the best solution is to experiment with various options: try both a small and a large stripe size and collect performance data for it. We recommend avoiding making little steps: going from 32 kB to 64 kB stripe size won’t have a significant impact.

  • alanmeck
    I've found conflicting opinions re stripe size, so I did my own tests (though I don't have precision measuring tools like you guys). My raid 0 is for gaming only, so all I cared about was loading time. So I used a stopwatch to measure the difference in loading times on Left 4 Dead when using 64kb and 128kb stripe size. Results, by map:
    64kb 128kb
    No Mercy No Mercy
    Level 1: 9.15 Level 1: 9.08
    Level 2: 8.31 Level 2: 8.38
    Level 3: 8.24 Level 3: 8.31
    Level 4: 8.45 Level 4: 8.45
    Level 5: 6.56 Level 5: 6.63
    Death Toll Death Toll
    Level 1: 7.75 Level 1: 7.89
    Level 2: 7.19 Level 2: 7.26
    Level 3: 9.01 Level 3: 8.94
    Level 4: 9.36 Level 4: 9.36
    Level 5: 9.5 Level 5: 9.64
    Dead Air Dead Air
    Level 1: 7.68 Level 1: 7.47
    Level 2: 7.96 Level 2: 8.03
    Level 3: 9.08 Level 3: 8.87
    Level 4: 8.17 Level 4: 8.17
    Level 5: 6.98 Level 5: 6.84
    Blood Harvest Blood Harvest
    Level 1: 8.24 Level 1: 8.17
    Level 2: 7.33 Level 2: 7.33
    Level 3: 7.68 Level 3: 7.68
    Level 4: 8.45 Level 4: 8.31
    Level 5: 7.89 Level 5: 8.1

    I'm using software raid 0 on my GA-870A-UD3 mobo. The results for me were almost identical (128kb was faster by .07 seconds total). That being the case, I erred on the side of 128kb in order to reduce the potential for write amplification (I'm using 3x ocz vertex 2's). What's remarkable is that, despite using the stopwatch to measure times manually, the results were always either identical, or separated by intervals of .07 seconds. Weird, huh? Btw thanks to Tomshardware, you guys give a lot of helpful info.
    Reply
  • Does anyone want a slower system? why do we have to choose? why do we not just get the fastest option without having to do this? or is that to simple!
    Reply
  • I wish we could see what 256 does. Or even 1024 but that just sounds like a waste of space unless your doing Video or Music. Maybe gameing but RAM and bandwidth will always give you an edge if no one is hacked the game.
    Reply
  • Shomare
    I agree...can you please look into getting one of the new Areca 1882 controllers with 1+GB of mem on it and a dual core 800Ghz processor? We would like to see the larger stripe sizes, the larger processor, and the larger memory footprint's results! :)
    Reply
  • dermoth
    There is a misconception in this article. The point about capacity used: "For example, if you selected a 64 kB stripe size and you store a 2 kB text file, this file will occupy 64 kB.". This is totally wrong.

    The only incidence on size used is the FILESYSTEM block size as all files stored will be rounded up to the upper block (the last block being only partially filled). To the OS, the RAID array still looks like any other storage device and multiple filesystems block can be stored within a single stripe element.

    Also note that on RAID 5 & 6, the stripe size is the stripe element size X number of data disks, and writes are fastest when full stripes are written at once. If you write only 4k in a 384k stripe (ex 64k stripe element on a 8-disk RAID6) then all other sectors have to be read on disk before the controller can write out the 4k block & updated parity data.

    You will get better performance if you manage to match the filesystem block size to the FULL raid stripe size, and only in that case the statement above is true. Many filesystems offers other means of tuning the filesystem IO access patterns to match the underlying RAID geography without having to use excessively large block sizes, and most filesystems default to 4k block sizes which is also what most standalone rotational medias use internally since many years (even when they show 512k sector sizes for compatibility).
    Reply