我有一个8驱动器RAID 10安装连接到Adaptec 5805Z,运行Centos 5.5和截止date调度程序。
一个基本的dd读取testing显示400mb / sec,并且基本的dd写入testing显示大致相同。
当我同时运行这两个时,我看到读速度下降到约5mb / sec,而写入速度停留在或多或less相同的400mb /秒。 iostat -x的输出如你所期望的,表明当磁盘遭到写入轰炸时,正在执行的读取事务非常less。
如果我closures控制器的写回caching,我没有看到50:50的分割,但是我确实看到了明显的改进,大约100mb / s的读取和300mb / s的写入。 我还发现,如果我降低驱动器队列上的nr_requests设置(8左右似乎是最佳的),我可以以150mb /秒的读取速度和150mb / sec的写入速度结束; 即。 总吞吐量减less,但肯定更适合我的工作量。
这是一个真正的现象吗? 还是我的综合testing过于简单?
这个可能发生的原因似乎足够清楚,当调度程序从读取切换到写入时,它可以运行一堆写入请求,因为它们全都落在控制器caching中,但必须在某个时刻执行。 我猜测当调度程序开始尝试再次执行读取操作时,会发生实际的磁盘写入操作,导致执行的读取请求很less。
这似乎是一个合理的解释,但它似乎是一个巨大的缺点,使用writebackcaching在一个系统上有不小的写入负载。 整个下午我一直在寻找讨论,什么都没发现。 我错过了什么?
那么,一个基本的dd可能不是测量驱动器吞吐量的最好方法。 这不是一个现实的负担。 但是,如果您运行dd ,请在命令行中传递oflag=direct标志以消除文件系统caching的影响。 另请参阅: 如何测量磁盘吞吐量? 为如何衡量工作量提供build议。
我认为你的调度select对你的结果的影响要比其他任何事情都大。 对于具有电池或支持闪存的高速caching(写入高速caching)的RAID控制器,我曾经使用deadline调度程序运行,但现在如果高速caching为512MB或1GB,则使用noop调度程序。 您可以即时交换调度程序,因此可以使用noopalgorithm和oflag=direct尝试testing,并查看结果的外观。
你有没有跑bonnie++或者iozone ?
如果你有使用iozone计划,这里有一些方法来检查你的performance。 这些比dd更好,因为它们允许你正在寻找的那种testing。
iozone -s 4G -a -i 0 -i 1 -i 2
这将使用4GB数据集( -s 4G )运行testing,使用可变logging大小并运行写testing( -i 0 ),读testing( -i 1 )和随机读/写testing( -i 2 )。 select文件大小是至关重要的。 如果你select一个适合内存,你的结果将更多地基于文件caching而不是实际的存储性能。 所以,如果你有4GB的RAM服务器,testing一个文件大小那么。
但是,如果你的内存很less(我有一台12GB的服务器)并希望你的testing在几个小时内完成,你可以提供-I选项,它告诉iozone设置O_DIRECT并绕过文件系统caching。 您将在那里获得真正的存储子系统性能。
您也可以执行检查并发访问的testing。
iozone -s 128M -r 4k -t 32 -i 0 -i 1 -i 2
这将运行32个并发的128MB线程,运行与前一个命令相同的testing,但具有4Klogging大小( -r 4k )。 工作集是4GB,但其中一些文件将适合文件caching。 根据你在这个存储上做什么,这可能是一个更准确的testing你的可能的performance。 和之前一样, -I参数将设置O_DIRECT。
iozone -s 128M -r 4k -l 16 -u 32 -i 0 -i 1 -i 2
这和上面的命令是一样的,但是运行一系列的testing,从16个线程开始,增加到32个线程。