RAID 1 – IOPS写入罚款1或2

我一直看到描述RAID 1(和RAID 10)的RAID IOPS写入惩罚的文章为2.当然,RAID 0的惩罚是1,因为每个写入都被简单地写入磁盘。 RAID 1被描述为“需要两次写入”,因此惩罚2。

但不应该是1,因为数据是同时写入的?

从使用磁盘的应用程序或服务器的angular度来看,RAID 1arrays应该作为一个单元同时写入两个磁盘。 一个磁盘可能落在另一个磁盘之后,但是实际的硬件RAID控制器应该能够同时开始写入,并且在较慢的磁盘已经完成时报告写入操作完成,这应当仅比在RAID中略高-0,如果有的话。 所以对于RAID 1,IOPS的惩罚应该是1,或者最大为1.2。

我知道有两个写操作,所以有2个“IOPS”,但它们在内部是RAID控制器。

我在这里错过了什么?

如果RAID 1只是热连接电缆,则性能影响将为零(为1.0),但是RAID 1镜像不仅仅是热插拔电缆 – 要将数据写入两个驱动器并处理结果从每个驱动器写入。

额外的工作是他们在性能影响方面讨论的因素。 无论是在操作系统(软件RAID)还是专用协处理器/控制器(硬件RAID)中都发生I / O操作,还是需要为每一个数据发出两次写入,并且写入的结果(成功,失败或on_fire)需要被“处理”。


在最糟糕的情况下,您可能会遇到(在操作系统中实现的软件RAID-1),这意味着内核正在进行两次写操作,并与磁盘控制器进行了两次对话。
这是一个2倍的写入惩罚,因为我们几乎在整个堆栈中做了两倍的工作。
(实际上它可能更接近于1.9 – 毕竟我们不会对文件系统发出两个write()调用 – 但是为了悲观起见,我们只是将其四舍五入。

在最好的情况下(硬件RAID 1,使用专用控制器实现),内核与控制器进行一次对话,但控制器仍然有两个对话(每个对应一个磁盘),以确保两个驱动器接收命令,写出数据,并确认数据已写入(或处理驱动器报告的任何错误状况)。
这可能是控制器的额外工作的1.2倍的惩罚,正如你在你的问题中所猜测的那样 – 你只是省下额外的内核工作(这比控制器所做的要贵得多)。

现在因为我们是系统pipe理员,所以我们付出的代价是悲观的,我们显然会采取最糟糕的performance,就像我们将软件RAID的性能因素四舍五入 – 所以如果有人问我们要告诉他们有一个2倍的写入惩罚,即使他们花哨的硬件控制器,并让他们很高兴,当系统执行平均只有1.5倍的惩罚:-)

实际的硬件RAID控制器应该能够同时开始写入,并且在较慢的磁盘已经完成时报告写入操作完成,这应该只比RAID-0稍微高一些。

尽pipe如此,每个写操作都有一半的可用性能。 在你的例子中,RAID 0的每个磁盘只需要写入发送到RAID控制器的一半。 在RAID 1中,每个磁盘必须全部写入。

这使得RAID 0的读写速度是RAID 1的两倍(在2盘RAID组上),而理论读取速度相同。