我有一个学校项目,我必须找出文件系统在重载和轻载下以及多处理器机器上会有多少缓存未命中。在与我的教授讨论之后,我提出了一个基本的执行计划:
答案 0 :(得分:2)
1)如果您正在尝试测试文件系统性能,请在I / O线程旁边输入几个操作大量文件元数据的线程。此外,在多个并行线程中执行I / O时,混合执行大型传输的线程和执行小型传输的线程。许多文件系统将小I / O操作合并为更大的请求,物理驱动器可以以更节省时间的方式处理这些请求,并且混合各种大小的I / O可能有助于更快地填充缓存(因为它必须缓冲合并I / O)。
2)小心那些工具列表,很多看起来它们被设计为在原始设备上运行而不是通过文件系统层运行(所以你得到的结果可能并不代表你认为他们做的事情)。如果您正在寻找一种工具来对特定文件系统进行基准测试,那么您最好的选择是与开发团队核实该文件系统。他们很可能会指出您在开发过程中用于对FS进行基准测试的工具,即使它是内部开发的自定义工具。
3)是的,正在运行并可能访问受测试文件系统的任何其他内容都可能会影响您的结果。您可能希望创建一个单独的文件系统,仅用于此测试,并关闭在运行测试时可能尝试访问它的任何后台扫描。
答案 1 :(得分:0)
这是一个有趣的问题。我可以给你一个部分答案。
您应该知道Linux有多个与可能具有不同工具的文件系统相关的缓存
一种方法是计算(猜测?)您的操作应生成多少块级别流量,然后使用blktrace测量实际块操作(读取,写入,搜索)。
我不知道有任何方法可以读取inode和dentry缓存的缓存未命中状态。我真的很想被告知我错了。
困难的方法是使用自己的计数器注释inode缓存和dentry缓存,但这些缓存是非常难的内核代码。