清除文件caching以重复性能testing

我可以使用哪些工具或技术来删除caching的文件内容,以防止我的performance结果偏斜? 我相信我需要完全清除,或者select性地删除有关文件和目录内容的caching信息。

我正在开发的应用程序是一个专门的压缩实用程序,并且需要做大量的工作来读写操作系统最近未触及的文件,而且其磁盘块不太可能被caching。

我希望消除我在IO时间看到的变化性,当我重复分析执行文件处理工作的不同策略的任务时。

我主要感兴趣的是Windows XP的解决scheme,因为这是我的主要开发机器,但我也可以使用Linux进行testing,所以也对这个环境的答案感兴趣。

我尝试了SysInternals CacheSet ,但是在重新读取我刚刚读过的文件的时候,单击“清除”并不会导致可测量的增加(在冷启动后恢复到正时)。

使用SysInternal的RAMMap应用程序 。

rammap空待机

清空/清空待机列表菜单选项将清除Windows文件caching。

Google的快速search为Linux提供了一些select

  1. 卸载并挂载保存文件的分区
  2. sync && echo 1 > /proc/sys/vm/drop_caches

对于Windows XP,通过使用FILE_FLAG_NO_BUFFERING选项使用CreateFile打开文件,然后closures句柄,您应该能够清除特定文件的caching。 这没有logging,我不知道它是否适用于更高版本的Windows,但我很久以前在编写testing代码来比较文件压缩库时使用。 我不记得读取或写入访问是否影响了这个技巧。

我发现了一种似乎可行的技术(除了重启)

  1. 运行MemAlloc的几个副本
  2. 随着每一个,分配大块的内存几次
  3. 使用Process Explorer观察系统caching大小降低到非常低的水平
  4. 退出MemAlloc程序

这不是有select的。 理想情况下,我希望能够清除用于caching我不希望caching的文件的磁盘块的内存的特定部分。

  #include <fcntl.h> int posix_fadvise(int fd, off_t offset, off_t len, int advice); 

build议选项POSIX_FADV_DONTNEED
指定的数据将不会在近期访问。

为了更好地了解Windows XP文件系统caching – 尝试使用Tim Murgent的ATM – 它可以让您在更详细和准确的视图中查看文件系统caching工作集大小和备用列表大小。 对于Windows XP,您需要使用旧版本的ATM 1,因为V2和V3需要Server 2003,Vista或更高版本。

你会注意到尽pipeSysinternals Cacheset会减less“Cache WS Min” – 实际的数据仍然以备用列表的forms继续存在,直到它被replace为别的东西。 然后用别的东西replace它使用一个工具,如乍得奥斯汀的 MemAlloc或flushmem或Windows Server 2003资源工具包工具中的 Consume.exe。

一个命令行工具可以在这里find

由于这个问题也要求Linux,这里有一个相关的答案。

命令行工具vmtouch允许从系统文件caching中添加和删除文件和目录,等等。