启用 RAID 控制器的写回缓存会损害整体性能吗?

启用 RAID 控制器的写回缓存会损害整体性能吗?

我有一个 8 驱动器 RAID 10 设置,连接到 Adaptec 5805Z,运行 Centos 5.5 和截止期限调度程序。

基本dd读取测试显示速度为 400mb/秒,基本dd写入测试显示速度大致相同。

当我同时运行这两个程序时,我发现读取速度下降到约 5mb/秒,而写入速度则大致保持在 400mb/秒。正如您所期望的那样,输出iostat -x显示,在磁盘受到大量写入操作的同时,执行的读取事务非常少。

如果我关闭控制器的写回缓存,我看不到 50:50 的分割,但我确实看到了明显的改进,大约 100mb/s 的读取速度和 300mb/s 的写入速度。我还发现,如果我降低驱动器队列上的 nr_requests 设置(大约 8 似乎是最佳值),我最终可以得到 150mb/秒的读取速度和 150mb/秒的写入速度;即总吞吐量减少,但肯定更适合我的工作负载。

这是真实现象吗?还是我的综合测试太过简单?

发生这种情况的原因似乎很清楚,当调度程序从读取切换到写入时,它可以运行大量写入请求,因为它们都只是进入控制器缓存,但必须在某个时刻执行。我猜实际的磁盘写入发生在调度程序开始尝试再次执行读取时,导致执行的读取请求非常少。

这似乎是一个合理的解释,但在具有非平凡写入负载的系统上使用写回缓存似乎也是一个巨大的缺点。我整个下午都在寻找有关此问题的讨论,但一无所获。我错过了什么?

答案1

嗯,基本的 dd 可能不是测量驱动器吞吐量的最佳方法。这不是一个现实的负载。但是,如果您确实运行dd,请oflag=direct在命令行中传递标志以消除文件系统缓存的影响。另请参阅:如何测量磁盘吞吐量?以获得关于如何衡量工作量的建议。

我认为您的调度程序选择对您的结果的影响比其他任何事情都大。对于带有电池或闪存支持缓存(写入缓存)的 RAID 控制器,我过去使用deadline调度程序运行,但现在如果缓存为 512MB 或 1GB,则使用noop调度程序。您可以随时更换调度程序,因此请尝试使用算法进行测试noop,然后oflag=direct查看结果如何。

你跑過bonnie++iozone

答案2

如果您确实打算使用,iozone这里有一些方法来检查您的表现。这些方法比它们更好,dd因为它们允许你寻找的那种测试。

iozone -s 4G -a -i 0 -i 1 -i 2

这将使用 4GB 数据集 ( -s 4G) 运行测试,使用可变记录大小并运行写入测试 ( -i 0)、读取测试 ( -i 1) 和随机读/写测试 ( -i 2)。选择文件大小至关重要。如果您选择一个适合 RAM 的文件,您的结果将更多地基于文件缓存而不是实际存储性能。因此,如果您的服务器具有 4GB RAM,请使用大于该大小的文件进行测试。

但是,如果您拥有大量 RAM(我有一台 12GB 的服务器)并且希望测试在几个小时内完成,则可以提供选项-I,告诉 iozone 设置 O_DIRECT 并绕过文件系统缓存。您将在那里获得真正的存储子系统性能。

您还可以进行检查并发访问的测试。

iozone -s 128M -r 4k -t 32 -i 0 -i 1 -i 2

这将运行 32 个并发 128MB 线程,运行与上一个命令相同的测试,但记录大小为 4K(-r 4k)。工作集为 4GB,但一些文件将适合文件缓存。根据您使用此存储执行的操作,这可能是对您可能的性能的更准确测试。与之前一样,参数-I将设置 O_DIRECT。

iozone -s 128M -r 4k -l 16 -u 32 -i 0 -i 1 -i 2

这与上面的命令相同,但运行一系列测试,从 16 个线程开始增加到 32 个线程。

相关内容