我想对存储在 SAN 上的文件系统进行基准测试。
但是 SAN 有很多缓存(只有 10% 到 20%)被使用,所以如果我做一些测试,结果将不现实。
我应该怎么做才能获得正确的结果?
对程序有什么建议吗?Bonnie++、IOZone 或...?
作为 iozone 的粉丝,多年来我一直使用它在 Linux 和 Windows 系统上进行基准测试。Sean 有一个关键点,用一个无法在 RAM + Cache 中修复的数据集进行测试。IOZone 使这变得非常容易。
iozone -s 64G -r 16k
Run Code Online (Sandbox Code Playgroud)
使用 64G 数据集和 16K 读取大小进行测试。您可以多次指定 -r 以为其提供一系列 I/O 操作大小。您甚至可以指定单个测试:
iozone -s 32G -s 64G -r 8k -r 16k -r 32k -r 64k -i 1 -i 2
Run Code Online (Sandbox Code Playgroud)
-i 1 是必需的,因为它创建了数据集,但 -i 2 告诉它也运行随机读取和随机写入测试。它可以运行其他几个测试。一个有趣的测试是“跨步读取”测试,它在读取之间跳过许多切片;正确配置它可以测试预读的限制以及 RAID 条带对齐。
如果这对您很重要,它还可以使用 Direct IO 作为测试的一部分。一些 DBMS 使用 DirectIO,它绕过 Linux 缓存系统:
iozone -s 8G -r 1k -I
Run Code Online (Sandbox Code Playgroud)
它甚至还有一种模式可以同时测试多个文件。这对于测试某些文件可能适合缓存但不是全部文件的情况很方便。
iozone -t 32 -s 2G -r 8k -r 16k
Run Code Online (Sandbox Code Playgroud)
这告诉它使用 32 个线程,每个线程都有自己的 2GB 文件,并测试各种记录大小。
我见过几次的一件事是当我测试与我的 RAID 条带宽度相同大小的记录大小时。通常,访问速度会比其两侧的记录大小慢。这是分区未对齐的迹象。