RAID 1 - IOPS 写入惩罚 1 或 2

nep*_*dev 2 raid raid1 raid10

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

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

从使用磁盘的应用程序或服务器的角度来看,RAID 1 阵列应显示为同时写入两个磁盘的单个单元。一个磁盘可能落后于另一个磁盘,但实际的硬件 RAID 控制器应该能够同时开始写入,并在较慢的磁盘完成时报告写入操作已完成,这应该仅略高于 RAID -0,如果有的话。因此,RAID 1 的 IOPS 损失应为 1 或最大为 1.2。

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

我在这里错过了什么吗?

vor*_*aq7 5

如果 RAID 1 只是热接线电缆,则性能影响将为零(系数为 1.0),但 RAID 1 镜像不仅仅是热接线电缆 -需要完成实际工作将数据写入两个驱动器并处理结果从每个驱动器写入。

额外的工作是他们所说的影响性能的因素。无论 I/O 操作发生在 OS 某处(软件 RAID)中还是在专用协处理器/控制器(硬件 RAID)中,仍然需要为每条数据发出两次写入,以及该写入的结果(成功,失败或 on_fire)需要“处理”。


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

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

现在,因为我们是系统管理员,而且我们的报酬是悲观的,所以我们显然会采取最坏情况下的性能,就像我们将软件 RAID 的性能因素四舍五入一样 - 所以如果有人问我们会告诉他们有 2 倍的写入惩罚,即使对于他们花哨的硬件控制器,当系统执行时平均只有 1.5 倍的惩罚时,让他们感到高兴:-)