大家好,StackOverlow 社区,
我目前正在使用一些存储大量 XML 文件的软件。所有文件都在 25k 字节以下。软件制造商表示,其性能基于多个并发微小读取。从驱动器读取的速度越快,其性能就越好。
经过大量的性能测试,他们似乎说的是实话。然而,在投入资金之前,我希望尽可能多地进行测试。服务器的 CPU 使用率似乎从未超过 35%,内存使用率也从未达到峰值。
服务器设置如下
- Windows Server 2003 标准版
- 四核 2.6 Ghz
- 4GB 内存
- 2 个硬件 Raid 卡
- RAID10 中的 8 个 15k SCSI 驱动器(硬件 raid)
我在想,如果我将设置更改为在 RAID0 中使用 2 个 Intel X-25 M,我会获得更好的性能。备份不是问题。我们有到另一台服务器的实时复制和异地夜间备份,这些备份也会转到磁带上。我目前在另一台服务器上尝试了单个 Intel X-25,似乎很有希望。
我的问题如下 -
- 我是否应该期望 2 SSD 驱动器设置的性能比 8 SCSI 驱动器性能更好?
- 我应该采取什么特殊的 SSD 设置步骤?(块大小等?)
- 当前在 Windows Server 2003 中测试吗?这会造成任何阻碍吗?我应该迁移到 Windows Server 2008 吗?(Linux 等不是有效选项)
- 我应该对操作系统做哪些调整?
- 不同/更好的基准测试软件?
有谁经历过或者测试过类似的事情,请告诉我。
使用的一些基准信息(晶盘标记)5次50Mb
SSD 盒
类型 - 读取 Mb/s - 写入 Mb/s 序列-225-50.84 512千-152.7-53.73 4K——18.85——35.35
SCSI 盒
类型 - 读取 Mb/s - 写入 Mb/s 序列-549.8-352.2 512K-538.3-342.2 4K-89.30-65.19
TL;DR - RAID0 或 RAID10 中的 2 个 SSD 驱动器是否比 RAID10 中的 8 个 15k SCSI 驱动器更快?
谢谢阅读。
答案1
考虑到您想要达到的性能水平,您应该牢记几件事。
之前的建议是使用大于 25k 的 NTFS 簇大小格式化保存数据集的驱动器,这个建议不错,但对于您的用例来说,32k 似乎是一个不错的选择。这样做的目的是确保您尽可能避免处理碎片,并降低与读取单个文件相关的文件系统开销。
另外,我建议看一下您的 RAID 条带大小。如果您的数据集的性质导致(大部分)顺序 IO,那么较大的条带大小更有益,如果它是随机的,那么较小的条带大小会更明智,只是不要让它小于您的文件系统群集大小。鉴于您要执行的操作的描述,我认为您的 IO 配置文件大部分是随机的,因此 64k 的条带大小就可以了,但可能值得尝试。
非常重要的一点是确保分区对齐 - 您需要在系统上使用 Diskpart.exe,通常设置 64k 的对齐偏移量对于标准群集和 RAID 条带大小来说就可以了,但在 Vista\Windows7\W2K8 中使用 1024k 偏移量,因为它可以确保即使条带和群集大小较大也能对齐。有一篇非常好的文章Microsoft 的 SQL 服务器性能这解释了为什么这对于高性能驱动器\阵列很重要。简而言之,分区对齐不良会使 IO 性能降低 15-30%。
对于 SSD,适用相同的一般规则,但读取\写入的底层行为却大不相同。与在最基本的层面上处理 512 字节磁盘扇区不同,SSD 上的 IO 使用更大的块。读取往往是 4k 到 128k 之间的固定页面大小,写入涉及缓冲和较大的擦除块大小(在兆字节范围内)。对您来说(读取 IO 很重要)的关键是您希望将 RAID 条带大小设置为所选磁盘类型的读取页面大小的倍数(我认为 Intel X-25 都使用 128k 读取块),并且您希望将对齐偏移量设置为某个数字以确保它大于该数字。例如,如果 SSD 具有 128k 读取页面大小,则 64k 分区偏移量的标准建议将是一个糟糕的选择。由于 SSD 写入的不对称性质,优化 SSD RAID 阵列以提高写入性能并不容易,但这是另一个故事,涉及大量缓存。
有一篇关于优化的好文章OCZForum 上的 SSD RAID,它是针对发烧友的设置,但据我所知,它们为任何试图从现成套件中推出自己的 SSD RAID 的人传达了正确的一般信息。
最后,如果您的读取 IO 模式主要是连续的,那么 8 个 15k 驱动器(理论上)可以达到 800Meg/秒左右的速度,甚至更高。两个 SSD,即使是 Intel X-25E,也只能达到这个速度的一半左右。我猜您的读取 IO 模式偏向随机 IO 足以抵消这一点,但在适当的情况下,您的 8 个 15k SCSI 驱动器可以比两个 SSD 快得多。您的测试证实了这一点。不过,看看这些数字,我想说,对分区对齐和条带大小进行一些工作将有很大帮助。
答案2
如果 XML 文件都小于 25k,考虑将你的驱动器格式化为块大小> 25k。逻辑是整个文件将适合单个块,因此您不会在各个文件中产生碎片。然后,单个读/写操作将覆盖整个文件。
这可能很糟糕,而且会浪费您的 O/S 驱动器的空间,因此我建议您不要在安装操作系统的同一分区上执行此操作。保留默认块大小(可能是 4k NTFS,因为您使用的是 Windows)
这更像是一个长期的性能改进,因为我怀疑您在全新安装时是否会有太多碎片,因此您可能没有注意到随着时间的推移性能会略有下降 - 取决于您的设置。
答案3
我认为你应该认真考虑将这些 XML 文件加载到 RAM 中。由于你使用的是 Windows,因此有很多工具可以从你的实际 RAM 创建 RAM 驱动器,但请记住,这一切都噗——重新启动时,您还需要将这些文件保存在磁盘上。购买更多 RAM 会非常便宜,但根据您当前的使用情况,我认为仅使用现有的 4GB 就足够了。
答案4
我首先推荐禁用上次访问时间更新您的设置中的文件/目录数量。如此多的文件将产生明显的影响。
如果只有并发读取是个问题,您可以尝试将这 8 个磁盘设置为 RAID-1(而不是 RAID-10),因为这样可以读取任何驱动器中的任何文件,读取时这些驱动器将处于空闲状态。但是您将损失容量(只有 1 个驱动器可用,对于 100GB 以下的数据来说不是问题),并且写入速度会更慢(任何写入都必须对所有驱动器进行)。
向服务器添加尽可能多的 RAM,并将操作系统迁移到 64 位(以避免聚丙烯酰胺凝胶电泳) 也会很好,因为文件缓存更大。