测量 I/O 性能悖论

测量 I/O 性能悖论

我正在尝试找出正确的方法来获得'真实世界'我的 NFS 集群的写入性能。

NFS 导出安装在 XEN 虚拟机管理程序上,我正在运行'dd'在虚拟机内部。

什么我无法决定是否应该使用O_DIRECT/O_SYNC

如果我不使用它,内核就会将页面缓存到 RAM,最终我将测量 RAM 吞吐量,而不是磁盘。

另一方面,大多数(如果不是全部)服务器应用程序都会使用 RAM 缓存(我的这个假设错了吗?)。

所以我想知道平衡点在哪里,'真实世界'

答案1

首先,我会使用实际的 I/O 基准测试实用程序,例如“iozone”。它将测试各种事物,甚至会使用 O_DIRECT(如果标记的话)。而且,我记得,它甚至有一些 NFS 特定的标志。

我发现一个非常可靠的方法是使用大于测试设备 RAM 大小的文件大小。这会破坏缓存,并为您提供可靠的 I/O 数字。如果您有一台 2GB RAM 的机器并在 4GB 文件上进行测试,您将获得可靠的数字。如果您使用 1GB 文件,但使用 O_DIRECT 标志,您将获得略有不同的数字,这是由于 O_DIRECT 的“仅在被告知刷新时才提交报告”方面。

当你的网络文件系统目标也有一个块缓存时,情况会变得复杂,所以你可能需要调整测试的大小来突破缓存而不是 Xen-local 缓存。

答案2

这只取决于你想衡量什么。
你只是忘了定义你的目标。

如果您想要 NFS 集群的原始性能,那么您必须绕过 RAM。
如果您想要“真实世界”的性能,那么您必须使用 RAM。但真实世界的 I/O 很少来自 dd。例如,使用 iozone 会获得更好的结果。

因此,明确你的目标。
然后选择合适的工具和方法。

相关内容