对于HDD,IOPS通常由磁盘访问时间决定,磁盘访问时间是搜寻延迟+旋转延迟+传输延迟的总和。由于这些变量在很大程度上取决于访问模式,并且与特定的RAID布局(即条带大小)和控制器(即:预读调整)之间没有明显的交互作用,因此,任何简单的答复都将是错误的。
但是,让我们尝试一下。初步估算,由n磁盘阵列保证的IOPS应该是单个磁盘IOPS的n倍。但是,通过在搜索/旋转/传输等待时间之间转移权重,RAID级别和数据访问模式都会戏剧性地更改此一阶近似值。
让我们举一些例子,假设每个单磁盘100 IOPS(7200 RPM磁盘的典型值)和4磁盘阵列(RAID1除外,通常仅限于2向):
- 单个磁盘的读取和写入均为100 IOPS(注意:由于写入合并,写入IOPS通常高于读取IOPS,但为简单起见,请忽略它)
- RAID0(4路的条带化)有多达 4倍的IOPS随机和高达 4倍的顺序IOPS。这里的关键词是“最多”:由于条带化和数据对齐的性质,如果随机访问的扇区普遍位于单个磁盘上,则最终IOPS会低得多。
- RAID1(2路镜像)的配置更为复杂。由于不同的磁盘可以搜索不同的数据,因此它具有高达2倍的随机读取IOPS,但具有相同的1倍(或由于开销而略低)的随机写入IOPS。如果万事万物(例如:大但不是100%的顺序读取),则即使在镜像模式下使用块/条概念/处理的RAID控制器,预读工作正常等),顺序读取有时可能高达单个读取的2倍。磁盘值,而顺序写入的上限为单个磁盘的1倍(即:无加速)
- RAID10(4路镜像)在性能方面处于4路RAID0条带化和2路镜像之间的一半。它具有高达4倍的随机读取IOPS和高达2倍的随机写入IOPS。对于顺序传输,需要注意RAID1:它有时最多有4倍的顺序读取IOPS,但只有2倍的顺序写入IOPS。请注意,某些RAID10实现(即Linux MDRAID)为RAID10阵列提供了不同的布局,并具有不同的性能配置文件。
- RAID5(条纹奇偶校验)具有高达随机读取IOPS的4倍,而随机写入IOPS则取决于许多因素,例如关于条带大小的写入大小,大条带缓存的可用性,条带重建算法本身(读取-重构-写入与读取-修改-写入)等,可以在单个磁盘IOPS的0.5倍(或更低)到2倍IOPS之间。顺序工作负载更可预测,其单个磁盘的IOPS是其三倍(读写)
- RAID6(条纹双奇偶校验)的行为与RAID5兄弟相似,但写入性能较低。它的单个磁盘的随机读取IOPS高达4倍,但其随机写入性能甚至比RAID5还要低,具有相同的绝对值(0.5x-2x),但实际字均值较低。顺序读取和写入的上限是单个磁盘的IOPS的2倍。
让我重复一遍:上面是简单且几乎破碎的近似值。无论如何,如果您想使用(严重不完整的)RAID IOPS计算器,请在此处查看。
现在,回到现实世界。在现实世界的工作负载上,RAID10通常是更快和首选的选择,即使面对阵列降级,也可以保持高性能。RAID5和RAID6不应用于对性能敏感的工作负载,除非它们本质上是以读取为中心或顺序的。值得注意的是,严重的RAID控制器具有受功耗保护的回写式高速缓存,主要是为了克服(通过重条带化缓存)RAID5 / 6低的随机写入性能。切勿将RAID5 / 6与无缓存RAID控制器一起使用,除非您真的不在乎阵列的速度。
固态硬盘是不同的野兽。由于奇偶校验RAID的平均访问时间大大缩短,因此其性能开销要低得多,并且比HDD更可行。但是,在以随机写入为中心的小型工作量中,无论如何我都会使用RAID10设置。