RAID级别对IOPS的影响

关于IOPS,我在网上看到了几个来源,提示给定数量磁盘的IOPS仅仅是单个磁盘的IOPS乘以磁盘的数量。

如果我对IOPS的理解是正确的(而且我一点都不确定),那么我会认为现实将取决于RAID级别,其中包括许多其他因素。 使用RAID 1/10时,所有数据都至less被复制到两个磁盘上,从而减less某些IO模式在特定磁盘上的争用。 但是,在条带化的RAID级别(如RAID 0/5/6)中,数据是分布式的而不是重复的,这意味着连续的读取请求可能针对同一个主轴,从而导致在前一个IO完成时阻​​塞。 写作甚至更有争议。

我还要补充一点,我认识到,由于各种优化和其他因素,现实情况要复杂得多。 我的问题实际上只是在一个非常基本的层面上,即我是否理解IOPS意味着什么是正确的。 这可能是因为我认为IOPS甚至会受到RAID级别的影响,这说明对这个概念有一个基本的误解。

对于硬盘而言 ,IOPS通常以磁盘的访问时间为主 ,即寻道延迟+旋转延迟+传输延迟总和。 由于这些variables很大程度上取决于访问模式,并且与特定的RAID布局(即:条带大小)和控制器(即:预读调优)没有明显的交互作用,所以任何简单的回复都将是错误的。

但是,让我们尝试一个棒球形象。 在第一个近似值中,由n磁盘arrays保证的IOPS应该是单个磁盘IOPS的n倍。 然而,通过在查找/旋转/传输延迟之间改变权重,RAID级别和数据访问模式都大大地改变了这个一阶近似。

假设有一个例子,假设每个磁盘100 IOPS(7200 RPM磁盘的一个典型值)和4个磁盘arrays(除了RAID1,通常仅限于2-way):

  • 单个磁盘是100 IOPS,无论是读写(注:由于写合并,写IOPS通常高于读IOPS,但为了简单,我们忽略了这一点)
  • RAID0(4路分条)具有高达 4倍的随机IOPS和高达 4倍的顺序IOPS。 这里的关键词是“高达”:由于条带和数据alignment的性质,如果随机访问的扇区普遍驻留在单个磁盘上,则IOPS将低得多。
  • RAID1(双向镜像)configuration更复杂。 由于不同的磁盘可以在不同的数据上进行寻找,因此随机读取IOPS的数量可达2倍,但随机写入IOPS的数量相同,为1x(或略低于开销)。 如果所有东西都很好地alignment(即:大而不是100%顺序读取,使用块/条纹概念的RAID控制器/即使在镜像模式下处理,RAID向前正常工作等等),顺序读取有时可以高达2倍磁盘值,而顺序写入保持在单个磁盘的1倍(即:没有加速)
  • RAID10(4路镜像)在性能方面处于4路RAID0分条和2路镜像的中间位置。 随机读取IOPS高达4倍,随机写入IOPS高达2倍。 对于顺序传输,RAID1警告适用:有时达到连续读取IOPS的4倍,但是只有连续写入IOPS的2倍。 请注意,某些RAID10实现(即Linux MDRAID)为RAID10arrays提供了不同的布局,具有不同的性能configuration文件 。
  • RAID5(条纹奇偶校验)具有高达随机读取IOPS的4倍,而随机写入IOPS取决于许多因素,例如写入相对于条带大小的大小,大条带高速caching的可用性,条带重buildalgorithm(read-reconstruct-write vs read-modify-write)等等,可以是单个磁盘IOPS的0.5倍(或更低)和2倍之间的任何值。 顺序工作负载更具可预测性,单个磁盘的IOPS是3倍(用于读取和写入)
  • RAID6(条纹双奇偶校验)的行为与RAID5兄弟非常相似,但写入性能较低。 它具有高达单个磁盘随机读取IOPS的4倍,但其随机写入性能甚至低于RAID5,具有相同的绝对值(0.5x – 2x),但实际字平均值较低。 顺序读取和写入的上限是单个磁盘IOPS的2倍。

让我再说一遍:以上是简单的,近似的近似值。 无论如何,如果你想玩(严重不完整的)RAID IOPS计算器,请看看这里 。

现在,回到现实世界。 在真实世界的工作负载上, RAID10通常是更快和更受欢迎的select即使面对降级的arrays ,也能保持高性能。 RAID5和RAID6不应该用于对性能敏感的工作负载,除非它们本质上是以读取为中心或顺序的。 值得注意的是,严重的RAID控制器具有大功率丢失保护的写回caching,主要用于克服(通过重条带caching)RAID5 / 6低随机写入性能。 切勿使用无cachingRAID控制器的RAID5 / 6 ,除非您真的不关心arrays的速度。

SSD是不同的野兽,思想。 由于它们的平均访问时间低得多,所以基于奇偶校验的RAID的性能开销要低得多,而且比HDD更可行。 但是,在一个以随机写作为中心的小型工作负载中,无论如何我都会使用RAID10设置。

这只是一个定义问题。 您可以在系统中测量不同级别的IOPS,您将得到不同的值。 例如,假设您有两个镜像磁盘,并且您正在尽可能快地写入数据。 进入磁盘的IOPS是单个磁盘可以处理的IOPS数量的两倍,具有类似的写入负载。 但是进入控制器的IOPS将等于单个磁盘可以处理的IOPS数量。

通常我们关心的是我们能够进入arrays的逻辑IOPS数量,我们并不特别关心磁盘级别发生的事情。 在这种情况下,您是正确的,IOPS取决于RAID级别,磁盘数量,单个磁盘的性能以及某些情况下操作的特定特性。