![寻求 RAID 设计的性能特征](https://linux22.com/image/1348945/%E5%AF%BB%E6%B1%82%20RAID%20%E8%AE%BE%E8%AE%A1%E7%9A%84%E6%80%A7%E8%83%BD%E7%89%B9%E5%BE%81.png)
我正在努力想出一个最佳方案RAID 读取政策。
我注意到,在最近的 1.5TB 驱动器上,使用 64K RAID 块大小,其中以循环方式从 RAID1 设置中的 3 个底层设备以 64K 块读取给定数据,总传输速率比单独使用单个磁盘的传输速率稍慢(除非使用所有三个磁盘,因此整体系统性能可能会更差)。
性能下降的原因是否与寻道时间有关?
如何才能想出一个聪明的块大小,以便多个驱动器的性能不会浪费在不必要的寻道上?
答案1
如果你仔细想想,这些 1.5TB 驱动器的平均介质传输速率约为 100MB/s;这意味着,在具有 3 个设备的 RAID1 中,连续(但有斑点)64K 读取时,它们必须执行(100MB/s / 64K/寻道 / 3 个驱动器),结果是每个驱动器每秒 533 次寻道。
现在,7200 rpm 驱动器需要 8.3ms 才能旋转一圈,尽管一些 HGST 规格也提到磁轨到磁轨的寻道时间可能略低于 1ms。
基本上,问题可以归结为: 跳过 64KB * (驱动器数量 - 1)的寻道需要多长时间? 也许略大于 1ms?
从以每秒 1/3 的速度进行实际读取来看,我们还剩下 667ms 来进行 533 次寻道,这似乎表明每次跳过 128KB 的寻道可能需要 1.25ms,这似乎是一个合理的数字。
所有这些数字看上去都是一致的。
这似乎表明,从每个驱动器循环执行 64KB 读取和 128KB 跳过确实会在寻道上浪费大量时间,并且具有 3 个光盘的 RAID1 具有与单个光盘相同的整体读取速度。
假设 RAID1 分区至少有几十 GB,那么也许应该将块大小设置为 64MB 到 4GB 之间的某个值,而不是 64KB?