如何对 SAN 上的 Linux 文件系统进行基准测试?

如何对 SAN 上的 Linux 文件系统进行基准测试?

我想对存储在 SAN 上的文件系统进行基准测试。

但是 SAN 由大量缓存(仅 10% 到 20%)支持,所以如果我进行一些测试,结果将不切实际。

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

有什么程序推荐吗?Bonnie++、IOZone 还是……?

答案1

作为 iozone 的粉丝,多年来我一直使用它对 Linux 和 Windows 系统进行基准测试。Sean 指出了关键点,使用无法在 RAM + Cache 中修复的数据集进行测试。IOZone 让这一切变得非常简单。

iozone -s 64G -r 16k

使用 64G 数据集和 16K 读取大小进行测试。您可以多次指定 -r 以为其提供一系列 I/O 操作大小。您甚至可以指定单独的测试:

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

-i 1 是必需的,因为它会创建数据集,但 -i 2 会告诉它还要运行随机读取和随机写入测试。它还可以运行其他几个测试。一个有趣的测试是“跨步读取”测试,它在读取之间跳过多个切片;正确配置它可以测试预读的极限以及 RAID 条带对齐。

如果这对您来说很重要,它还可以使用 Direct IO 作为测试的一部分。一些 DBMS 使用 DirectIO,它可以绕过 Linux 缓存系统:

iozone -s 8G -r 1k -I

它甚至还有一种模式可以同时测试多个文件。这对于测试以下情况非常方便:一些文件可能适合缓存,但不是全部。

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

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

我见过几次这样的情况:当我测试与 RAID 条带宽度相同的记录大小时。通常,这会比其两侧的记录大小更慢。这是分区未对齐的迹象。

答案2

在进行基准测试时,通常会尝试使用至少两倍于 RAM+缓存大小的数据集来“耗尽缓存”。这可以帮助获得更多最坏情况下的性能数据,但实际上可以帮助您获得实际数据。

遗憾的是,要获得有关性能的真实信息,您真的没有太多选择,只能创建一些能够使用特定数据集模拟特定用例的东西。理想情况下,您还希望在运行此基准测试之前使文件系统老化,方法是加载模拟随时间正常使用的数据。新“mkfs”的文件系统的响应可能与具有大量其他数据并在目录中创建和删除文件的文件系统的响应截然不同。

换句话说,如果此系统是 Web 服务器,请加载您的页面、数据和应用程序,并获取一组合理有代表性的 URL 以通过 siege 或 ab 运行。如果它是数据库服务器,请加载生产数据库并针对它运行您的典型查询,等等...

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

然而,就快速但不太现实的比较而言,像 bonnie++ 这样的工具可以提供不错的数字。我通常无法使用 Bonnie++ 为随机 I/O 部分提供不错的数字,因为它往往运行在非常非常小的数据集上,因此请注意控制它的选项。

相关内容