清除文件缓存以重复性能测试

我可以使用什么工具或技术来删除缓存的文件内容,以防止我的性能结果被歪曲?我相信我需要完全清除,或有选择地删除缓存的文件和目录内容的信息。

我正在开发的应用程序是一个专门的压缩实用程序,预计将执行大量的工作,读取和写入文件的操作系统最近没有触及,其磁盘块不太可能被缓存。

当我重复分析不同的文件处理策略时,我希望消除 IO 时间的可变性。

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

我尝试了 SysInternals 缓存集,但是点击“ Clear”不会导致重新读取我刚刚读取过几次的文件的时间有可测量的增加(在冷启动后恢复到计时)。

44124 次浏览

快速搜索一下就可以得到 Linux 的这些选项

  1. Unmount and mount the partition holding the files
  2. sync && echo 1 > /proc/sys/vm/drop_caches

我发现了一种似乎有效的技巧(除了重启之外) :

  1. 运行几份 MemAlloc
  2. 对于每一个,分配几次大块内存
  3. 使用进程资源管理器可以观察到系统缓存大小降低到非常低的级别
  4. 退出 MemAlloc 程序

It isn't selective though. Ideally I'd like to be able to clear the specific portions of memory being used for caching the disk blocks of files that I want to no longer be cached.

对于 Windows XP,您应该能够通过使用带有 FILE _ FLAG _ NO _ BUFFERING 选项的 CreateFile 打开特定文件,然后关闭句柄来清除缓存。没有文档说明这一点,我不知道它是否适用于后来的 Windows 版本,但我很久以前在编写测试代码比较文件压缩库时使用过这一点。我不记得读写访问是否影响了这个技巧。

使用 SysInternal 的 RAMMap 应用程序

rammap empty standby

“空/空备用列表”菜单选项将清除 Windows 文件缓存。

 #include <fcntl.h>


int posix_fadvise(int fd, off_t offset, off_t len, int advice);

提供意见选项 POSIX_FADV_DONTNEED:
指定的数据在不久的将来将不会被访问。

为了更好地了解 Windows XP 文件系统缓存-尝试 自动取款机-它允许您看到文件系统缓存工作集大小和备用列表大小在一个更详细和准确的视图。对于 WindowsXP-你需要旧版本1的 ATM,可以下载 给你,因为 V2V3引擎需要服务器2003,Vista 或更高版本。

您将观察到,尽管 系统内部缓存将减少“ Cache WS Min”——实际数据仍然以备用列表的形式存在,从这里可以使用它,直到它被其他东西替换为止。然后使用 Windows Server 2003 Resource Kit Tools中的 MemAllocChad Austin 的 Flushmem或 Consume.exe 等工具将其替换为其他内容。

A command line utility can be found 给你

来源:

EmptyStandbyList.exe是 Windows (Vista 和 (上图)可以清空:

  • 处理工作装置,
  • the modified page list,
  • 备用名单(优先级0至7) ,或
  • the priority 0 standby list only.

用法:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

由于这个问题也是针对 Linux 提出的,所以有一个相关的答案 给你

The command line tool 触摸 allows for adding and removing files and directories from the system file cache, amongst other things.

有一个调用 https://learn.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize的 Windows API,可用于刷新文件系统缓存。它还可用于将缓存大小限制为非常小的值。看起来很适合这种测试。