1) 如果您正在尝试测试文件系统性能,请在进行I/O线程时,加入一些同时操作大量文件元数据的线程。此外,在多个并行线程中执行I/O时,混合执行大文件传输和小文件传输的线程。许多文件系统会将小型I/O操作合并成更大的请求,以便物理驱动器可以更有效地处理它们,并混合不同大小的I/O可能有助于更快地填充缓存(因为它必须缓冲合并的I/O)。
2) 注意那个工具清单,很多看起来像是设计用于操作原始设备而不是通过文件系统层(所以您可能无法得到您所认为的结果)。如果您正在寻找一个用于基准测试特定文件系统的工具,最好的选择可能是与该文件系统的开发团队联系。即使这是一个内部开发的自定义工具,他们也很可能指出他们在开发期间用于基准测试其文件系统的工具。
3) 是的,任何其他正在运行并可能访问要测试的文件系统的程序都可能影响您的结果。您可能需要创建一个专门用于此测试的文件系统,并关闭任何可能在运行测试时尝试访问它的后台扫描程序。
这是一个有趣的问题。也许我可以给你一个部分答案。
你应该知道Linux有多个与文件系统相关的缓存,可能有不同的工具。
一种方法是计算(猜测?)你的操作应该生成多少块级别的流量,然后使用blktrace来测量实际的块操作(读取、写入、寻址)。
我不知道如何读取inode和dentry缓存的缺失状态。我真的希望有人告诉我我错了。
困难的方法是用自己的计数器注释inode缓存和dentry缓存,但这些缓存是相当复杂的内核代码。