如何清除Windows磁盘读取缓存?


13

为了进行性能测试,我需要清除Windows的磁盘读取缓存。我尝试使用Google搜索,但是除了重新启动或其他手动操作外,找不到其他东西。在让步之前,我想知道是否有人知道清除Windows磁盘读取缓存的方法。我正在Windows 7上进行测试,但是我也对Windows XP解决方案感兴趣。

Answers:


3

或者,将您知道不会在测试中使用的数据填充到缓存中,然后运行测试。


1
或者,您可以占用所有可用的RAM。Windows将释放文件缓存以使用该RAM。有关详细信息,请参阅Stephen Denne提供的答案。
Ultralisk

我原本希望减少“变通办法”,但是我认为您的建议在我的情况下最容易在自动测试脚本中实现。谢谢你的建议。
Sebastiaan M


3

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

您将观察到,尽管Cacheset将减少“ Cache WS Min”,但实际数据仍然以备用列表的形式继续存在,从那里可以使用它,直到被其他东西替换为止。然后,使用其他工具替换它,例如使用MemAlloc,Chad Austin的flushmem或Windows Server 2003资源工具包工具中的Consume.exe。


3

我用过RAMMap。有可能释放几种分配类型的内存。

可以在“文件摘要”选项卡中观察文件缓存的内容,从“空”菜单中选择“空待机列表”应清除该缓存。


虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
slm 2013年


1

最佳实践是,确保基准测试的任何文件比阵列控制器缓存(如果在vm guest虚拟机中进行基准测试,则为Windows操作系统内存)大2倍,并且至少要有1 GB的测试文件。这确保了所有缓存都将被否定。我们使用SQLIO进行磁盘基准测试;随附文档中有大量信息。


我要尝试做的一件事是确定我们的项目在多种配置上构建的速度。我确实无法增加这些文件的大小。:)
塞巴斯蒂安M

1

呼应Greg,解决此问题的方法是确保您正在使用的数据集大大超过可用RAM的数量。如果要在还包含大量基于控制器和磁盘的缓存的硬件平台上进行测试,则需要确保自己也超过了这些数量。这将确保您看到的性能与真正的硬件性能紧密相连,而不是所有这些缓存层引入的软件优化。

就是说,如果您真的只是在运行基准测试之前想要清除有用数据的读取缓存,而该基准想使用哪个读取缓存,那么执行此操作的方法是读取一个大小与读取缓存内存相同的文件。并对其进行一些文件操作。这将清除缓存并用这个大文件填充它。一旦关闭它,缓存就会有效地清空您关心的数据。棘手的部分是弄清楚该文件需要多大,如今这些文件的大小很可能约为3GB。此时,您可能需要几个1GB的垃圾文件才能使其正常工作。


0

我认为大多数选择都是“手动”。在UNIX下,在每次运行基准测试之前卸载/重新安装设备是相当标准的,通常会附带一个“ newfs”以作充分的衡量。我不知道您是否可以在Windows下使用命令行工具来卸载/装载设备,但是如果自动化是您的目标,那么值得寻找这样的实用程序。


1
在Linux下,如果由于某种原因不能选择unmount / remuont,那么您也可以这样做sync; echo 3 > /proc/sys/vm/drop_caches-尽管这会影响所有的缓存/缓冲区,而不仅影响与特定卷有关的缓存/缓冲区。我以前曾为Windows寻找过类似的技巧,但没有找到。
David Spillett

0

看一下我刚刚在StackOverflow上发布了自己的问题的答案

基本上:如果您尝试CreateFile处理没有写共享访问权限的句柄,则它将刷新然后使缓存无效,即使它返回错误也是如此。

希望这可以帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.