我如何在SAN上对Linux文件系统进行基准testing?

我想做一个存储在SAN上的文件系统的基准。

但是SAN有很多caching(只有10%到20%)的支持,所以如果我做一些testing,结果将不现实。

我应该怎样做才能获得正确的结果?

任何程序的build议? Bonnie ++,IOZone还是…?

作为一名iozone粉丝,我一直使用它在Linux和Windows系统上进行基准testing多年。 肖恩有一个关键点,用一个不能修复RAM + Cache的数据集进行testing。 IOZone使这非常容易。

iozone -s 64G -r 16k 

用64G数据集和16K读取大小进行testing。 您可以多次指定-r以使其具有一定范围的I / O操作大小。 你甚至可以指定单独的testing:

 iozone -s 32G -s 64G -r 8k -r 16k -r 32k -r 64k -i 1 -i 2 

-i 1是必需的,因为它创build了数据集,但-i 2告诉它也运行随机读取和随机写入testing。 有几个其他的testing可以运行。 一个有趣的testing是“跨步阅读”testing,在阅读之间跳过许多切片; 正确configuration这可以testing预读的限制以及RAID条带alignment。

它也可以使用Direct IO作为testing的一部分,如果这对你很重要的话。 一些DBMS使用DirectIO,绕过Linuxcaching系统:

 iozone -s 8G -r 1k -I 

它甚至有一个模式,将同时testing多个文件。 这对于testing某些文件可能适合caching的情况是很方便的,但不是全部。

 iozone -t 32 -s 2G -r 8k -r 16k 

这告诉它使用32个线程,每个线程都有自己的2GB文件,并testing各种logging大小。

有一点我曾经看过几次,当我testing一个与我的RAID条带宽度相同大小的logging大小时。 通常情况下,访问速度比任何一边的logging容量都要慢。 这是错位的标志。

在进行基准testing时,通常使用至less是RAM +高速caching大小的两倍的数据集来尝试“放弃高速caching”。 这可以帮助获得更多的最糟糕的性能数字,但真正帮助你与现实的数字。

可悲的是,对于关于性能的现实信息,你实在没有太多select,只能创build一些东西来模拟你的具体数据集的具体使用情况。 理想情况下,您还需要在运行此基准testing之前将文件系统老化,方法是加载模拟正常使用的数据。 一个新鲜的“mkfs”ed文件系统可能会有很多不同的反应,有一堆的其他数据,并在目录中创build和删除文件。

换句话说,如果这个系统将成为一个Web服务器,请加载你的页面,数据和应用程序,并获得一个合理代表性的一组URL来运行围攻或ab。 如果它是一个数据库服务器,加载一个生产数据库,并运行你的典型查询等等…

根据我的经验,这确实是获得有关性能的实际数字的唯一方法。

然而,就一个快速但不是很现实的比较而言,bonnie ++等工具可以提供很好的数字。 Bonnie ++通常会给我随机I / O部分的数字带来问题,因为它往往会随着数据集太小而运行,所以请注意控制它的选项。