![软件与硬件 RAID 性能和缓存使用情况](https://linux22.com/image/656884/%E8%BD%AF%E4%BB%B6%E4%B8%8E%E7%A1%AC%E4%BB%B6%20RAID%20%E6%80%A7%E8%83%BD%E5%92%8C%E7%BC%93%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5.png)
我阅读了大量有关 RAID 控制器/设置的文章,经常出现的一个问题是没有缓存的硬件控制器如何提供与软件 RAID 相同的性能。事实真的如此吗?
我一直认为硬件 RAID 卡即使没有缓存也能提供更好的性能。我的意思是,您有专用的硬件来执行任务。如果是这样的话,那么购买没有缓存的 RAID 卡(例如并不便宜的 LSI 9341-4i)有什么好处呢?
此外,如果只有通过缓存才能提高性能,那么是否存在这样的缓存配置:可以立即写入磁盘,但将数据保留在缓存中以供读取操作,从而使 BBU 不再是优先事项?
答案1
简而言之:如果使用低端 RAID 卡(无缓存),请帮自己一个忙,切换到软件 RAID。如果使用中高端卡(带 BBU 或 NVRAM),那么硬件通常(但并非总是!见下文)是一个不错的选择。
长答案:当计算能力有限时,硬件 RAID 卡具有明显的优势,可以卸载涉及它们的 RAID 方案(RAID 3/4/5、RAID6、ecc)的奇偶校验/综合征计算。
然而,随着 CPU 性能的不断提升,这种优势基本消失:即便是我笔记本上那台老旧的 CPU(Core i5 M 520,Westmere 一代),XOR 性能也超过了 4 GB/s,RAID-6 综合征性能也超过了 3 GB/s每个执行核心。
如今,硬件 RAID 的优势在于拥有断电保护的 DRAM 缓存,形式为 BBU 或 NVRAM。这种受保护的缓存为随机写入访问(以及命中的读取)提供了极低的延迟,基本上将随机写入转换为顺序写入。没有这种缓存的 RAID 控制器几乎毫无用处。此外,一些低端 RAID 控制器不仅没有缓存,还会强制禁用磁盘的私有 DRAM 缓存,导致性能比没有 RAID 卡时更慢。例如 DELL 的 PERC H200 和 H300 卡:它们完全禁用磁盘的私有缓存,并且(如果较新的固件没有改变这一点)主动禁止重新激活它。帮自己一个忙,做不,从来不,从来不购买此类控制器。虽然甚至更高端的控制器也经常禁用磁盘的私有缓存,但它们至少有自己的受保护缓存 - 这使得 HDD(但不是 SSD!)的私有缓存有些多余。
但这还没完。即使是功能强大的控制器(带有 BBU 或 NVRAM 缓存的控制器)在与 SSD 一起使用时也会产生不一致的结果,这主要是因为 SSD 确实需要快速私有缓存,用于高效地对 FLASH 页进行编程/擦除。虽然有些(大多数?)控制器允许您重新启用磁盘的私有缓存(例如:PERC H700/710/710P),但如果该私有缓存易失,则在断电时可能会丢失数据。确切的行为确实取决于控制器和固件(例如:在具有 256 MB WB 缓存和启用磁盘缓存,我有不多次计划性断电测试中出现的功率损失) 带来了不确定性和诸多担忧。
另一方面,开源软件 RAID 的控制性更强 - 它们的软件不包含在专有固件中,并且具有明确定义的元数据模式和行为。软件 RAID 做出了(正确的)假设,即磁盘的私有 DRAM 缓存不受保护,但同时它对于可接受的性能至关重要 - 因此,它们不会禁用它,而是使用 ATA FLUSH / FUA 命令将关键数据写入稳定存储。由于它们通常从连接到芯片组 SB 的 SATA 端口运行,因此它们的带宽非常好,驱动程序支持也非常出色。
但是,如果与机械硬盘一起使用,同步、随机写入访问模式(例如:数据库、虚拟机)与带有 WB 缓存的硬件 RAID 控制器相比将受到很大影响。另一方面,当与企业级 SSD 一起使用时(即:具有断电保护写入缓存),软件 RAID 通常表现出色,甚至比硬件 RAID 卡的效果更好。不幸的是,消费级 SSD 仅具有易失性写入缓存,在同步写入工作负载中提供非常低的 IOPS(尽管读取和异步写入非常快)。
还要考虑到软件 RAID 并非都一样。Windows 软件 RAID 在性能方面名声不佳,甚至存储空间似乎也没什么不同。Linux MD Raid 速度极快且用途广泛,但 Linux I/O 堆栈由多个独立部分组成,您需要仔细了解这些部分才能发挥最大性能。ZFS 奇偶校验 RAID (ZRAID) 非常先进,但如果配置不正确,可能会给您带来非常IOPS 较差;而镜像+条带化则表现相当不错。无论如何,它需要一个快速的 SLOG 设备来进行同步写入处理 (ZIL)。
底线:
- 如果你的工作负载不是同步随机写入敏感的,则不需要 RAID 卡
- 如果你需要 RAID 卡,那么不是购买不带 WB 缓存的 RAID 控制器
- 如果您计划使用 SSD,软件 RAID 是首选,但请记住,对于高同步随机写入,您需要一个具有断电保护的 SSD(即:Intel S/P/DC、Samsung PM/SM 等)。对于纯粹的性能,最好的选择可能是 Linux MD Raid,但如今我通常使用条带 ZFS 镜像。如果您不能承受因镜像而损失一半的空间,并且您需要 ZFS 高级功能,请使用 ZRAID,但小心考虑一下你的 VDEV 设置。
- 如果您即使使用 SSD 也确实需要硬件 RAID 卡,请使用具有写保护缓存的 SSD。
- 如果您在使用普通机械硬盘时需要 RAID6,请考虑购买具有 512 MB(或更多)WB 缓存的快速 RAID 卡。RAID6 的写入性能损失较大,而大小合适的 WB 缓存至少可以为小型同步写入(例如:文件系统日志)提供快速的中间存储。
- 如果您需要使用 HDD 的 RAID6,但您不能/不想购买硬件 RAID 卡,请仔细考虑您的软件 RAID 设置。例如,Linux MD Raid 的一个可能解决方案是使用两个阵列:一个小型 RAID10 阵列用于日志写入/DB 日志,一个 RAID6 阵列用于原始存储(作为文件服务器)。另一方面,使用 SSD 的软件 RAID5/6 非常快,因此您可能不需要 RAID 卡来进行全 SSD 设置。
答案2
对于您购买的任何硬件控制器,您都需要一个电池或闪存支持的缓存解决方案。大多数人后悔没有这样做。
但要回答你的问题,大多数控制器都有可配置的缓存比率……所以 100%读缓存和 0 %写缓存消除了 BBU 保护的需要。写入性能会很差。
我无法回答你的软件 RAID 问题,因为这取决于具体情况。Linux硬盘阵列不同于 Windows 软件 RAID,后者不同于虚拟文件系统. 类似 ZFS 的解决方案能由于它们利用了服务器的 RAM 和 CPU 资源,因此性能优于硬件。
答案3
您看中的 RAID 控制器很便宜,基本上是假的。它甚至依赖于主板来提供一些功能,如内存,而支持它的主板并不多,这导致您无法加载驱动程序。
关于 HW 与 SW-RAID 本身。我不再使用 HW-RAID,除非它是一个带有 EMC 标志的盒子。对于其他所有东西,我都因为一些非常简单的原因在好几个月后又切换回了 SW-RAID。
您需要额外的硬件并需要匹配它们。您还需要匹配固件并保持同步。许多磁盘将无法正常工作,并且您的 IO 延迟会毫无原因地激增。
额外的硬件价格昂贵,因此您可以使用额外的 1000 美元(带有两个/三个磁盘的体面控制器)来获得更好的小型解决方案。将其投资于更多磁盘和标准控制器、ECC 内存、更快的 CPU。如果您计划运行它的时间超过保修期或不想支付隔夜快递费用,也许可以使用现场备用磁盘。
升级很麻烦,因为您需要跟踪磁盘和控制器的操作系统补丁和固件。这可能会导致无法再进行升级/更新的情况。
关于磁盘格式。很多供应商使用一些内部布局来存储与您的硬件和固件组合修订版相关的数据。这可能会导致更换部件使您无法访问数据的情况。
这是一种 SPOF 和瓶颈。只有一个控制器位于一个 PCI 桥后面,这无法为您提供真正需要的性能和冗余。此外,还不存在将数据迁移到控制器范围之外的另一个磁盘组的迁移路径。
新一代 SW-RAID 软件或 ZFS 和 BtrFS 等解决方案已经解决了这些问题。请记住,最终您要保护的是数据,而不是快速访问的数据,而是冗余垃圾。
答案4
这里的大多数作者都不知道“写洞“。这是硬件 RAID 需要电池备份单元,而软件 RAID 则没有电池备份单元的基础。例如,Linux 软件 RAID 实现要么支持写入操作的位图,要么在非正常关机的情况下进行完整的“奇偶校验”重新计算。ZFS 始终努力进行全条带写入以避免这种不一致或推迟重新检查。因此,总而言之,如今足够智能的软件 RAID 通常足以代替“谁知道里面有什么”的所谓“硬件 RAID”。
至于问题的缓存部分,它实际上并不那么重要,因为操作系统本身的写入缓存可能比“硬件”适配器大得多。