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

Nat*_*van 7 linux cache hardware-raid scheduler

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

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

当我同时运行两者时,我看到读取速度下降到约 5mb/sec,而写入速度大致保持在 400mb/sec。iostat -x如您所料,输出显示在磁盘受到写入轰炸时执行的读取事务很少。

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

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

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

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

eww*_*ite 3

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

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

你跑了bonnie++iozone