确定各种文件系统的缓存未命中数

时间:2009-11-23 15:47:41

标签: linux filesystems profiling benchmarking

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

  1. 创建一个程序,它会阻塞文件系统并填满缓冲区缓存。
  2. 使用系统基准测试工具记录缓存未命中数。
  3. 用新条件冲洗并重复。
  4. 但对于操作系统设计的新手,我不确定如何继续。所以我需要一些help

    1. 理想程序执行哪些操作来填充缓冲区缓存?目前,我编写的程序读取和写入几个不同的文件,x次。
    2. 有哪些工具可以记录缓存未命中数?我已经查看了oprofile,但我不认为它监视文件系统的缓冲区缓存。但我发现这list看起来很有希望。
    3. 其他正在运行的流程会影响这些基准吗?
    4. 感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

1)如果您正在尝试测试文件系统性能,请在I / O线程旁边输入几个操作大量文件元数据的线程。此外,在多个并行线程中执行I / O时,混合执行大型传输的线程和执行小型传输的线程。许多文件系统将小I / O操作合并为更大的请求,物理驱动器可以以更节省时间的方式处理这些请求,并且混合各种大小的I / O可能有助于更快地填充缓存(因为它必须缓冲合并I / O)。

2)小心那些工具列表,很多看起来它们被设计为在原始设备上运行而不是通过文件系统层运行(所以你得到的结果可能并不代表你认为他们做的事情)。如果您正在寻找一种工具来对特定文件系统进行基准测试,那么您最好的选择是与开发团队核实该文件系统。他们很可能会指出您在开发过程中用于对FS进行基准测试的工具,即使它是内部开发的自定义工具。

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

答案 1 :(得分:0)

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

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

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

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

我不知道有任何方法可以读取inode和dentry缓存的缓存未命中状态。我真的很想被告知我错了。

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