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

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

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

当我同时运行两个时,我看到读取速度下降到~5mb /秒,而写入速度保持在或多或少相同的400mb / sec.正如您所期望的那样,iostat -x的输出表明,当磁盘被写入轰炸时,正在执行的事务很少.

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

这是一个真实的现象吗?或者我的综合测试太简单了?

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

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

解决方法

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

我认为您的调度程序选择对结果的影响比其他任何东西都大.对于带有电池或闪存备份缓存(写缓存)的RAID控制器,我曾经使用截止日期调度程序运行,但现在使用noop调度程序,如果缓存是512MB或1GB.您可以动态交换调度程序,因此请尝试使用noop算法和oflag = direct进行测试,并查看结果的外观.

你有运行bonnie或iozone吗?

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...