我试图找出正确的方法来获得我的NFS集群的“真实世界”写性能。
NFS导出安装在一个XENpipe理程序上,我从一个虚拟机里运行'dd' 。
我不能决定的是我应该使用O_DIRECT/O_SYNC或不。
如果我不使用它,内核将对RAM进行页面caching,我将最终测量RAM吞吐量,而不是磁盘。
另一方面,大多数(如果不是所有的)服务器应用程序都会使用RAMcaching(我是否有错误的假设?)。
所以我想知道平衡点在哪里, 真实世界中会发生什么?
首先,我会使用一个实际的I / O基准工具,比如'iozone'。 它会testing各种各样的东西,甚至会使用O_DIRECT,如果标记这样做。 甚至,我记得,有一些NFS特定的标志。
我发现一件非常可靠的事情是,使用超出正在testing的设备的RAM大小的文件大小。 这会破坏caching,并为您提供可靠的I / O数量。 如果你有一个2GB内存的机器,并testing一个4GB的文件,你会得到可靠的数字。 如果您使用1GB的文件,而是使用O_DIRECT标志,则由于O_DIRECT的“只有被告知已刷新的报告”方面,才会得到不同的数字。
当你的networking文件系统目标也有一个块caching时,这会变得复杂,所以你可能需要调整你的testing的大小,以避免你的Xen本地caching。
这只取决于你想测量什么。
你只是忘了定义你的目标。
如果你想NFS集群的原始性能,那么你必须绕过你的RAM。
如果你想要“现实世界”的表演,那么你必须使用你的RAM。 但真正的世界I / O很less来自dd。 例如,你会有更好的结果与iozone。
所以定义你的目标。
然后select适当的工具和方法。