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

4
我有一个学校项目,需要在重负载和轻负载下以及多处理器机器上找出文件系统缓存失效的次数。与我的教授讨论后,我想到了一个基本执行计划:
  1. 创建一个程序,使文件系统变慢并填满缓存。
  2. 使用系统基准测试工具记录缓存失效的数量。
  3. 使用新条件重新开始。
但作为操作系统设计的新手,我不确定该如何继续。所以这里有一些需要帮助的地方:
  1. 一个理想的程序应执行哪些操作来填充缓存?目前,我编写的程序读取和写入多个不同的文件x次。
  2. 有哪些工具可以记录缓存失效的数量?我查看了oprofile,但我不认为它监视文件系统的缓存。但我发现了这个列表看起来很有前途。
  3. 其他正在运行的进程会影响这些基准测试吗?

感谢您的帮助!


你在使用哪个操作系统?不同的操作系统会使用不同的工具。 - Ben S
我正在使用Ubuntu 9.10(ext4)开始,但我也想测试ext2、ext3和zfs。我将在旧版本的Ubuntu上测试Ext2和Ext3,并使用OpenSolaris进行ZFS测试。 - vrish88
2个回答

2

1) 如果您正在尝试测试文件系统性能,请在进行I/O线程时,加入一些同时操作大量文件元数据的线程。此外,在多个并行线程中执行I/O时,混合执行大文件传输和小文件传输的线程。许多文件系统会将小型I/O操作合并成更大的请求,以便物理驱动器可以更有效地处理它们,并混合不同大小的I/O可能有助于更快地填充缓存(因为它必须缓冲合并的I/O)。

2) 注意那个工具清单,很多看起来像是设计用于操作原始设备而不是通过文件系统层(所以您可能无法得到您所认为的结果)。如果您正在寻找一个用于基准测试特定文件系统的工具,最好的选择可能是与该文件系统的开发团队联系。即使这是一个内部开发的自定义工具,他们也很可能指出他们在开发期间用于基准测试其文件系统的工具。

3) 是的,任何其他正在运行并可能访问要测试的文件系统的程序都可能影响您的结果。您可能需要创建一个专门用于此测试的文件系统,并关闭任何可能在运行测试时尝试访问它的后台扫描程序。


0

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

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

  • Inode缓存
  • Dentry缓存
  • 块缓存

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

我不知道如何读取inode和dentry缓存的缺失状态。我真的希望有人告诉我我错了。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接