2009-11-23 62 views
4

我有一个学校项目,我必须找出在多重处理器机器上重载和轻负载下文件系统有多少高速缓存未命中。在和我的教授讨论这个之后,我想出了一个基本的执行计划:确定各种文件系统的高速缓存未命中

  1. 创建一个程序,它会让文件系统停滞并填充缓冲区缓存。
  2. 使用系统基准测试工具记录缓存未命中次数。
  3. 冲洗并重新使用新的条件。

但是作为操作系统设计的新手,我不确定如何继续。所以这里有一些我需要的地方help

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

感谢您的帮助!

+0

你在使用什么操作系统?不同的操作系统将使用不同的工具。 – 2009-11-23 15:52:19

+0

我使用Ubuntu 9.10(ext4)开始,但我也想测试ext2,ext3和zfs。 Ext2和ext3,我会在旧版本的Ubuntu上进行测试,我将使用OpenSolaris for ZFS。 – vrish88 2009-11-23 16:37:14

回答

2

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

2)请注意这些工具列表,其中很多看起来像是设计为在原始设备上运行,而不是通过文件系统层运行(因此您得到的结果可能并不代表您认为他们在做什么)。如果您正在寻找一种工具来对特定的文件系统进行基准测试,那么最好的办法可能是与开发团队核对该文件系统。即使它是内部开发的定制工具,它们也可能很有可能指向他们在开发过程中对其FS进行基准测试的工具。

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

0

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

你应该知道,Linux已经对文件可能有不同的工具

  • inode缓存
  • 目录项缓存
  • 块高速缓存

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

我不知道有任何方法来读取inode和dentry缓存的缓存未命中状态。我真的很想被告知我在这里是错的。

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

相关问题