There has been some discussion recently about wide striping in the storage and virtualization communities and it struck me that a number of people were unsure what it was and how to think about it, so I thought I'd explain the basics here.
What is Wide Striping?
Wide striping is a method of spreading data over a large number of disk drives in a storage array in order to achieve a desired performance goal. The term wide striping has been used sometimes to refer to sets of disks with 16 to 32 members, or more. It seems strange that somebody would classify a 32 member disk set as having wide striping, when you compare that to a disk set with 320 members, but that's how definitions in the storage industry tend to be broadly interpreted - especially by vendors :).
The amount of work a disk drive does is measured in IOPS
One of the ways to measure storage performance is using a metric called IOPS - or IOs per second. An I/O is either an operation where the disk drive reads data from media or writes it to media. Reads process faster than writes, so it is important to understand this mix in your applications. The amount of work a disk drive can do is proportional to the rotational speed of the drive.
There are two basic classes of disk drives used in enterprise storage arrays today; lower-cost, lower performance SATA disk drives and higher-cost, higher performance disk drives with Fibre Channel (FC) or SAS interfaces.
A 7,200 RPM SATA drive can sustain ~ 80 IOPS
A 15,000 RPM FC/SAS drive can sustain ~ 200 IOPS
In other words, a 15,000 RPM SAS/FC drive can do approximately 2.5 times more IOPS than a 7,200 RPM SATA drive. You need approximately 5 SATA drives to sustain the same workload as a pair of FC/SAS drives running at maximum sustained levels.
Storage workloads are determined by the applications being used and there is a great deal of variety in the performance requirements they have. Some applications need very little storage performance and some applications need a high level of storage performance.
Workload isolation
Storage arrays that do not have wide striping tend to have high-priority workloads isolated on certain designated drives in order to meet the performance requirements of those applications. For instance, an array with 100 FC/SAS disk drives could have ten of those drives used exclusively by one high priority application to make sure that it has access to all of the 2,000 IOPS those drives can generate.
Isolating workloads this way creates storage capacity utilization problems because the capacity requirements of most high performance applications tend to need fewer disk drives than IOPS requirements determine. In other words, an application that has reserved the 2,000 IOPS of ten 450GB FC/SAS drives might only need 900GBs of capacity - with a utilization of 20%.
The IOPs requirements of applications change over time, which means an application that has it's workload isolated on a set number of drives can exceed their aggregate IOPS capabilities, creating a performance bottleneck for the application. The structure that was established to ensure sufficient IOPS becomes a performance problem. The process of adjusting and rebalancing the disk drives that are used to support isolated workloads can become extremely complicated and time consuming depending on many variables and creates opportunities for administrator errors.
Workload randomization
Alternatively, storage arrays with wide striping tend to have multiple applications sharing the IOPS generating capabilities of a large number of drives - up to all the drives in the system. Using this approach, the data from each applications is spread over all the drives being wide-striped to give all applications access to the the aggregate IOPS potential of the array. For example, an array with 100 FC/SAS disk drives that wide stripes data over all the drives would have 20,000 IOPS available for any and all applications at all times.
In contrast to workload isolation, discussed above, this approach is known as workload randomization because it mixes all the data in the array across all of the disk drives. In order to ensure data is written across all the disk drives, wide striping storage arrays tend to write data in very small increments on each drive. Applications with heavy IOPS workloads are utilizing all the drives in the system in relatively similar amounts.
By nature, wide striping eliminates array bottlenecks and achieves better storage utilization, but utilization levels depend on storage provisioning methods that are designed to take advantage of wide striping such as Thin Provisioning, which is another topic for another blog post.
The lack of bottlenecks in a wide striping storage array also means that mixed workload performance is optimized because all applications have access to the full IOPS potential of the array. Virtualization environments benefit in two ways: 1) by being able to mix applications and VMs on physical servers without worrying about the creation of storage bottlenecks and 2) achieving higher VM densities.
Enterprise arrays with native, wide striping
There are two enterprise storage arrays that use native wide striping across all the disk drives in the system, without the need for administrators to organize RAID groups and create disk pools.
3PAR InServ
IBM XIV
There are many important differences between these two products, including the flexibility of RAID implementations and disk drive options, but the method of wide striping is similar.
Wide striping IOPS to servers
The number of IOPS delivered by an array is slightly less than the aggregate number of drives in the array, depending on the mix of reads and writes and the type of RAID that is used by a particular volume. Here are a few examples of IOPS calculations for wide striping systems using different drive scenarios and 8k blocks. The arrays modeled here do not include mixing RAID types for different volumes, except the last model that mixes RAID 5 on FC drives with RAID 6 on SATA drives.
Array 1: 80 450GB FC disk drives: 80% reads, 20% writes
Total IOPS of all drives in the array: 16,000
IOPS delivered to servers w/RAID 5: 10,000
IOPS delivered to servers w/RAID 10: 13,333
Array 2: 200 1GB SATA disk drives: 80% reads, 20% writes
Total IOPS of all drives in the array: 16,000
IOPS delivered to servers w/RAID 5: 10,000
IOPS delivered to servers w/RAID 10: 13,333
IOPS delivered to servers w/RAID 6: 7,505
The next array has both FC and SATA drives and changes the read/write ratio. In this case there are two different wide stripe sets, one that spans FC drives and the other that spans the SATA drives.
Array 3: 160 450GB FC + 480 SATA disk drives: 70% reads, 30% writes
Total IOPS of all drives in the array: 70,400
IOPS delivered to servers w/RAID 5: 37,052
IOPS delivered to servers w/RAID 10: 54,153
IOPS delivered to servers w/RAID6 (SATA) & RAID5 (FC): 31075

