导致两家硬盘制造商在 iozone O_SYNC 基准测试中表现大相径庭的根本原因

导致两家硬盘制造商在 iozone O_SYNC 基准测试中表现大相径庭的根本原因

我有两台服务器 A 和 B,配置如下:

  • 答:4TB HDD,带 RAID 1(MegaRAID SAS 2008),128MB 缓存,无 BBU,直写模式,7.2k RPM,制造商 A。
  • B:1.5TB HDD,带 RAID 1(MegaRAID SAS 3108),64MB 缓存,带 BBU,但为直写模式,10.5k RPM,制造商 B。

我在单个 RAID 分区上运行以下基准测试:iozone -a -s 10240 -r 4 -+r

A 的结果(摘录):

                                                            random  random    bkwd   record   stride
          kB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
       10240       4     108     474  4193564  6667334 6556395     701 4058822      475  3653175  2303202  2616201 6785306  6101840

B 的结果(摘录):

                                                            random  random    bkwd   record   stride
          kB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
       10240       4    3332   46961  5478410  6836065 4994841    2951 2853077      728  2299133  1722202  2008983 4549365  4712594

两台服务器都启用了写入缓存,但我无法找到根本原因,为什么服务器 A(108kB/秒)的写入吞吐量性能与服务器 B(3332 kB/秒)相比非常慢,假设我对结果的解释正确。

可能是什么原因?两台服务器具有相同的其他文件系统选项(ext4/相同的默认选项)。

对于涉及大量同步写入的工作负载,难道制造商 B 生产的磁盘就比制造商 A 生产的磁盘更出色吗?

谢谢。

答案1

关于测量结果之间的 33 倍差异,根据我们在评论中的讨论,结果MegaCli64 -LDGetProp -DskCache -Lall -aAll表明设置 B默认情况下启用磁盘驱动器缓存,而禁用它设置A

使用MegaCli64 -LDSetProp -DisDskCache -Immediate -Lall -aAll导致两个系统表现出相似的性能。

在启用磁盘驱动器缓存的情况下运行 RAID 是否安全?

运行启用磁盘驱动器缓存的 RAID 实际上类似于运行启用了写入缓存(强制写回模式)的非 BBU 支持易失性缓存的 RAID 控制器。它提高了性能,但同时也增加了断电时数据丢失和数据不一致的可能性。

如果您想避免这种情况,同时仍拥有良好的 I/O 性能,建议使用带有 BBU 支持缓存的控制器,并将卷配置为写回模式,并禁用磁盘缓存。

两个 RAID 控制器之间的区别

我不知道你是否已经知道,但软件和硬件 RAID 之间还有更多区别(这是一篇关于这个的有趣的文章)。

最后MegaRAID SAS 2008或多或少是一个带有 RAID 功能的 HBA 或 IO 控制器,而MegaRAID SAS 3108真正的 RAID 控制器™(也称为 ROC 或 RAID-on-Chip),它有一个专用的处理器来处理 RAID 计算。

SAS 2008 尤其以某些 OEM 固件(​​例如我在评论中提到的 PERC H310 中的 DELL 固件)的糟糕写入性能而闻名。

特别是同步模式与您选择的记录长度和文件大小的结合似乎会导致软件/假 RAID 的结果非常糟糕。

作为参考,这是我在工作站上使用软件 RAID1 中的 10k WD Velocity Raptors 获得的结果:

                                                    random  random    bkwd   record   stride                                   
      KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
   10240       4     182     181  1804774  2127084 2110984     167 1673159      153  1760968   954589  1203989 2022512  2062824

如果你在同步模式(O_SYNC)下运行你的结果 A因此,就可以通过软/假 RAID 交付的内容而言似乎是合理的。


写入缓存模式是否会导致阵列的性能随着时间的推移而下降?

我不这么认为。通过激活写缓存,控制器能够执行某些操作来优化待处理的写操作。

例如,这个缓存操作的描述取自白皮书对于 HP 智能阵列控制器:

在高负载环境中,写入缓存通常会填满并大部分时间保持满状态。控制器利用这个机会分析待处理的写入命令以提高其效率。控制器可以使用写入合并,将对相邻逻辑块的小写入合并为单个较大的写入,以便更快地执行。控制器还可以执行命令重新排序,重新排列缓存中写入的执行顺序,以减少整体磁盘延迟。

正如您所看到的,缓存用于进一步增强写入性能数组,但这似乎对任何后续写入或读取操作的性能没有任何影响。

关于磁盘碎片,这是一个文件系统/操作系统级别的问题。RAID 控制器(在块级别运行)根本无法优化文件系统碎片,因此无论它在write-troughwrite-back模式下运行都没有区别。

相关内容