Answers:
或者,将您知道不会在测试中使用的数据填充到缓存中,然后运行测试。
我曾在Stack Overflow上问过同样的问题
/programming/478340/clear-file-cache-to-repeat-performance-testing
我使用的是Win XP,但是我想到的最佳解决方案是:
要更好地了解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。
呼应Greg,解决此问题的方法是确保您正在使用的数据集大大超过可用RAM的数量。如果要在还包含大量基于控制器和磁盘的缓存的硬件平台上进行测试,则需要确保自己也超过了这些数量。这将确保您看到的性能与真正的硬件性能紧密相连,而不是所有这些缓存层引入的软件优化。
就是说,如果您真的只是在运行基准测试之前想要清除有用数据的读取缓存,而该基准想使用哪个读取缓存,那么执行此操作的方法是读取一个大小与读取缓存内存相同的文件。并对其进行一些文件操作。这将清除缓存并用这个大文件填充它。一旦关闭它,缓存就会有效地清空您关心的数据。棘手的部分是弄清楚该文件需要多大,如今这些文件的大小很可能约为3GB。此时,您可能需要几个1GB的垃圾文件才能使其正常工作。
我认为大多数选择都是“手动”。在UNIX下,在每次运行基准测试之前卸载/重新安装设备是相当标准的,通常会附带一个“ newfs”以作充分的衡量。我不知道您是否可以在Windows下使用命令行工具来卸载/装载设备,但是如果自动化是您的目标,那么值得寻找这样的实用程序。
sync; echo 3 > /proc/sys/vm/drop_caches
-尽管这会影响所有的缓存/缓冲区,而不仅影响与特定卷有关的缓存/缓冲区。我以前曾为Windows寻找过类似的技巧,但没有找到。