提高 RAID 性能

提高 RAID 性能

我刚刚安装了一台 LSI 9260-i8,使用了两个虚拟驱动器,第一个由 4 个 SSD 组成,第二个由 4 个 HDD 组成。显然,这样做的目的是在保持一定的安全性和足够的存储容量的同时获得更好的性能。

SSD 非常棒,而且该阵列在处理小型到相对较大的文件时速度快得惊人。HDD 主要承载大型文件(500MB-30GB)。它旨在作为主要的长期存储设施,而 SSD 阵列仅用于操作文件和短期存储。这意味着文件经常会从 SSD 阵列移动到 HDD 阵列。

问题是,在写入大型操作的第一个 GB 左右后,性能会迅速下降。它以大约 250MB/s 的速度开始,对于只有 5 个 HDDS 的 RAID 5 阵列来说,这还不算太差的写入性能,但我刚刚进行的复制(包含 4 个文件,总计 12 GB)逐渐下降到 35MB/s 的低点。

现在我想一个人的建议将取决于大量的元信息,因此情况如下:

  • LSI 卡还没有 BBU,因此写回功能被禁用。
  • HDD 是 WD15EARS 2TB 硬盘。显然,这些硬盘并不是目前最快的硬盘,但我认为稳定的 200MB/s 速度也不算过分。
  • SSD 是 OCZ Vertex 2 60GB 硬盘。
  • 我觉得这无关紧要,但硬盘的旋转时间已增加到 5 分钟,而不是正常的 8 秒
  • 驱动器在存储管理器中显示正常,日志中没有值得注意的错误
  • 就像我说的,SDD 确实很快,读取速度高达 1100MB/s,所以这似乎不是瓶颈。
  • 复制似乎暂停了,它会快速运行,停止,再次快速运行约 500MB 等等,导致整体速度降低。
  • 创建 HDD 阵列时,我使用了 512Kb 的条带大小。这很大,但我预计该阵列上只有大文件到超大文件。我现在也不想改变这一点,因为它会破坏现有数据,而且我还没有备份(目前)
  • 操作系统是Ubuntu 10.04(64位)
  • 主板 Asus WS Revolution(工作站)、24GB ECC RAM、Xeon W3570,默认 3.2GHz
  • LSI 卡插入第一个 PCIe 插槽(以避免 NF200 引入的延迟)
  • 系统其他方面非常稳定
  • HDD 阵列使用“mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 -L "DATA" /dev/sdb”进行格式化
  • fstab 不包含 data=writeback 和 noaccess,不过我认为这不会影响大文件

非常感谢您的所有建议。

答案1

我认为“LSI 卡还没有 BBU,因此写回功能被禁用”是瓶颈。

如果您有 UPS - 请启用写回功能。

如果没有,请尝试获取 BBU。

如果您不能 - 如果您启用写回功能,您可能会在电涌的情况下丢失缓存数据,从而冒着虚拟驱动器上数据一致性的风险,或者使用写通缓存坚持这些速度。

即使你将分区与逻辑卷对齐(这通常由大多数现代操作系统自动完成)并使用足够大的优化簇/块大小(我认为在你的情况下应该是 2mb)格式化卷以让所有驱动器处理单个 IO 请求我不认为你会实现很大的写入性能差异。

因为 RAID5 的写入性能是一个非常繁琐的过程。而且由于它是通过 XOR 处理器写入的,所以我认为缓存中没有整个数据来实时执行奇偶校验计算

在 4x320gb hdds 515kb stip 大小的 RAID 5 上启用写回缓存后,我以平均 250-350 MB/s 的写入速度写入大型连续文件,或以平均 150 MB/s 的速度复制虚拟卷内的大文件。(我仍然没有 BBU,但我有旧的 apc 700VA 智能 UPS,所以我认为它足以将电涌和最终的缓存丢失降到最低)

我们讨论的是 100% 随机、100% 顺序还是某种混合模式?当我完全读取、写入或复制大文件到我的阵列时,我大多会体验到高速。另一方面,正如已经说过的,随机写入(读取)速度要低得多,根据文件大小和/或请求大小,平均速度从不到 1 mb/s 到 190 mb/s 不等。在日常小文件使用中,速度大多在 20mb/s 以下。因此,这在很大程度上取决于实际随机传输中的应用程序。由于我使用的是 Windows 操作系统,因此我的卷非常混乱,因为碎片化了,对于大文件,从/到复制等大型操作非常快

还有一个解决普通硬盘随机读写速度慢的问题的建议 - 如果您要重新配置整个控制器配置,为什么不考虑使用 CacheCade 将 1 或 2 个 SSD 用于不依赖电源的 raid 缓存(类似于 adaptec 混合 raid),将其余的用于您现在正在使用的 OS/应用程序驱动器?这样,您应该能够提高 raid 5 卷的速度,即使使用写入,我认为因为实际写入物理硬盘应该在后台进行,并且由于您使用的是写入缓存(无板载控制器缓存),而使用 ssd 作为缓存,我认为您应该不用担心系统重置。但有关 cachecade 如何工作的实际和具体信息,请阅读 lsi 的文档,甚至询问 LSI 的技术支持,因为我还没有机会使用它。

答案2

TomTom 已经基本回答了这个问题,但如果能对答案多提供一些背景信息可能会更有用。

您正在使用 RAID 5。RAID 5 在写入数据时存在众所周知的性能问题。

每个 RAID 5 条带都有一个奇偶校验数据块,奇偶校验数据块以循环方式分布在所有磁盘上。每次写入 RAID 5 阵列时,控制器都需要重新计算奇偶校验信息,然后将新的奇偶校验块写入磁盘。引自此处说明了这一点(关于部分条带更新,但适用相同的原则):

如果您 [...] 修改数据块,它会通过减去旧块并添加新版本来重新计算奇偶校验。然后,在两个单独的操作中,它会写入数据块,然后写入新的奇偶校验块。为此,它必须首先从包含该条带块奇偶校验的驱动器读取奇偶校验块,然后从原始驱动器重新读取更新块的未修改数据。这种读取-读取-写入-写入被称为 RAID5 写入惩罚,因为这两个写入是连续且同步的,写入系统调用在重新读取和两次写入完成之前无法返回,[...]

由于 RAID 5 条带化,对于单个 SATA HDD 来说,大约 35 MB/s 的速度听起来是合适的,它可以执行相当多或多或少随机的 I/O,而现实世界中 RAID 5 的写入速度通常约为较小阵列的 ~1 磁盘性能。因此,这或多或少是预期的性能;它在开始时复制速度更快可能是操作系统缓存在起作用。

获取电池备份单元并启用写入缓存是不是一个万能的解决方案。您写道,您经常复制大文件(>1 GB)。BBU + 写入缓存对随机小文件写入有很大帮助,但对大顺序写入帮助不大(因为控制器上的缓冲区最终会被填满)。

如果你想要有良好的写入性能,答案通常是RAID 10

最后,当您创建分区时,应注意确保分区边界与阵列条带边界对齐。

答案3

哼。一些基础知识。

它的起始速度约为 250MB/s,对于仅由 5 个 HDDS 组成的 RAID 5 阵列来说,这个写入性能还算不错

现实检验:任何 RAID 5 的写入速度都很慢,仅限于一张磁盘的写入速度。3、5、15 个磁盘对写入没有影响。

HDD 是 WD15EARS 2TB 硬盘。显然,这些硬盘并不是目前最快的硬盘,但我认为稳定的 200MB/s 速度也不算过分。

现实情况是:对于随机 IO 情况下的最终用户磁盘来说,这个速度太高了,这就是您所展示的。即使是 200mb RAW 也太高了。但是,如果您添加了 Raid 45 所需的所有操作(查看 Wikipedia),那么要求它就很可笑了。您想要速度吗?获取 FAST 磁盘,然后移至 RAID 10。

我觉得这无关紧要,但硬盘的旋转时间已增加到 5 分钟,而不是正常的 8 秒

硬盘的降速时间是 8 秒?你从哪里得到这个数字的?这实在是太慢了,太糟糕了。当在短时间内发生更多操作时,应避免启动 - 我们说的是几分钟。5 分钟太短了。8 秒简直就是自杀。

最终,你对小事抱有很高的期望 - 你在 RAID 5 上贪便宜,从未进行任何现实检查。数字还不错。

要检查的事项:

  • 驱动器是否支持 NCQ?是否使用过?
  • BBU 有多贵?从写回改为写通,可以带来巨大的改进。目前,您无法优化写入的 IO 模式,因为中间没有可以缓存的东西。

除此之外,获得更快的磁盘并远离 RAID 5 是您唯一的选择。首先进行一些初始数学检查也会对您有所帮助 - 您对应该拥有的速度的假设基本上是错误的。

相关内容