确定各种文件系统的caching未命中

我有一个学校的项目,我必须找出一个文件系统将有多lesscaching未命中重载和轻载和多处理器机器上。 在和我的教授讨论之后,我提出了一个基本的执行计划:

  1. 创build一个将文件系统堵塞并填充缓冲区caching的程序。
  2. 使用系统基准testing工具来loggingcaching未命中的数量。
  3. 冲洗并重复一个新的条件。

但是对于操作系统devise来说,我还不确定如何进行操作。 所以这里有一些我需要帮助的地方 :

  1. 理想程序执行什么操作来填充缓冲区caching? 目前,我写的程序读取和写入几个不同的文件,x次。
  2. 有哪些工具可以loggingcaching未命中的数量? 我已经看过oprofile,但我不认为它监视文件系统的缓冲区caching。 但是我发现这个看起来很有希望的名单 。
  3. 其他正在运行的进程会影响这些基准吗?

谢谢你的帮助!

    1)如果您试图测试您的文件系统性能,请引入几个线程来处理大量的文件元数据以及I / O线程。 而且,当在几个并行线程中进行I / O时,混合执行大尺寸传输的线程和执行小尺寸传输的线程。 许多文件系统会将小I / O操作合并为更大的请求,物理驱动器可以以更省时的方式处理,并且混合各种大小的I / O可以帮助更快地填满缓存(因为它必须缓存合并的I / O)。

    2)小心使用这个工具列表,很多看起来像是在原始设备上运行,而不是通过文件系统层运行(所以你得到的结果可能不代表你的想法)。 如果你正在寻找一个工具来测试一个特定的文件系统,最好的办法可能是与开发团队核对那个文件系统。 他们很可能会指向你在开发过程中用来对他们的FS进行基准测试的工具,即使它是一个内部开发的定制工具。

    3)是的,任何正在运行并可能访问被测文件系统的东西都可能会影响您的结果。 您可能希望创建一个单独的文件系统,仅用于此测试,并关闭在运行测试期间尝试访问它的任何后台扫描。

    这是一个有趣的问题。 也许我可以给你一个部分的答案。

    你应该知道,Linux有多个与可能有不同工具的文件系统相关的缓存

    • Inode缓存
    • Dentry缓存
    • 阻止缓存

    一种方法是计算(猜测)您的操作应该生成多少块级别的流量,然后使用blktrace来测量实际的块操作(读取,写入,查找)。

    我不知道有什么办法来读取inode和dentry缓存的缓存未命中状态。 我真的很想知道我在这里是错的。

    困难的方法是用自己的计数器注释inode缓存和dentry缓存,但是这些缓存是非常难的内核代码。