当控制器的缓存处于写入模式时,RAID 控制器会传递刷新命令吗?

当控制器的缓存处于写入模式时,RAID 控制器会传递刷新命令吗?

当控制器的电池供电写缓存被禁用,但驱动器的写缓存被启用时,控制器是否会将刷新命令从操作系统传递到驱动器(RAID0 或 RAID1 虚拟驱动器中的所有物理驱动器)?

我之所以问这个问题,是因为启用驱动器缓存后性能会好得多。甚至比关闭驱动器缓存并打开控制器缓存时的性能还要好得多。如果它能够按需刷新缓存,那么在现代操作系统和文件系统下,断电时文件系统不应该(理论上)损坏。[我意识到确实存在错误风险,但我所在的地方停电极为罕见,所以如果它至少在纸面上有效,那么冒险也是值得的。]

如果答案是这取决于控制器:我正在使用 MegaRaid 9280。单磁盘 RAID0。或者有什么方法可以可靠地测试它?

答案1

我用 fio 做了一个性能测试,并告诉操作系统使用同步 I/O。

fio --name=random-write  --rw=randwrite --bs=4k --numjobs=1 --size=4g --iodepth=1 --runtime=60 --time_based --end_fsync=1 --atomic=1 --sync=1

使用 RAID 控制器时,物理驱动器缓存 = 开启:

write: IOPS=344, BW=1377KiB/s (1410kB/s)(80.7MiB/60001msec); 0 zone resets

使用 RAID 控制器,物理驱动器缓存 = 关闭:

write: IOPS=27, BW=111KiB/s (114kB/s)(6688KiB/60005msec); 0 zone resets

在另一台开启缓存的 Linux 主机上,本机 SATA 端口:

write: IOPS=25, BW=102KiB/s (104kB/s)(6108KiB/60005msec); 0 zone resets

显然,异常的是启用了驱动器缓存的 RAID 控制器。因此它似乎忽略了同步命令。

这不是一个万无一失的论据,但 RAID 控制器似乎不太可能做正确的事情,所以除非有更好的答案,否则我会放弃这种方法。

相关内容