![导致两家硬盘制造商在 iozone O_SYNC 基准测试中表现大相径庭的根本原因](https://linux22.com/image/679838/%E5%AF%BC%E8%87%B4%E4%B8%A4%E5%AE%B6%E7%A1%AC%E7%9B%98%E5%88%B6%E9%80%A0%E5%95%86%E5%9C%A8%20iozone%20O_SYNC%20%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%E4%B8%AD%E8%A1%A8%E7%8E%B0%E5%A4%A7%E7%9B%B8%E5%BE%84%E5%BA%AD%E7%9A%84%E6%A0%B9%E6%9C%AC%E5%8E%9F%E5%9B%A0.png)
我有两台服务器 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-trough
或write-back
模式下运行都没有区别。