为了性能testing,我需要清除Windows的磁盘读取caching。 我尝试使用Googlesearch,但除了重新启动或其他手动操作之外,我找不到任何其他内容。 在我投入并做到这一点之前,我想知道是否有人知道清除Windows磁盘读取caching的方法。 我正在testingWindows 7,但我也对Windows XP解决scheme感兴趣。
或者用你知道不会在testing中使用的数据填充caching,然后运行testing。
我在堆栈溢出问同样的问题
https://stackoverflow.com/questions/478340/clear-file-cache-to-repeat-performance-testing
我使用的是Win XP,但我提出的最佳解决scheme是:
为了更好地了解Windows XP文件系统caching – 尝试使用Tim Murgent的ATM – 它可以让您在更详细和准确的视图中查看文件系统caching工作集大小和备用列表大小。 对于Windows XP,您需要使用旧版本的ATM 1,因为V2和V3需要Server 2003,Vista或更高版本。
您将观察到尽pipeCacheset会减less“Cache WS Min” – 实际的数据仍然以备用列表的forms继续存在,直到它被replace为别的东西。 然后用其他东西replace它使用一个工具,如MemAlloc,Chad Austin的flushmem或Windows Server 2003资源工具包工具中的Consume.exe。
我用过RAMMap 。 它有可能释放less数types的分配的内存。
可以在“文件摘要”标签中查看文件caching的内容,并从“空白”菜单中select“清空待机列表”应清除该caching。
重新启动机器。
最佳做法是确保基准testing的任何testing文件比arrays控制器caching大2倍(或者如果在虚拟机guest虚拟机中进行基准testing,则使用Windows操作系统内存),最less1 GB的testing文件。 这确保了任何caching都将被取消。 我们使用SQLIO进行磁盘基准testing; 随附的文件中有大量的信息。
回应Greg,解决这个问题的方法是确保你正在使用的数据集大大超过可用RAM的数量。 如果您正在一个硬件平台上进行testing,该硬件平台还包含大量基于控制器和磁盘的高速caching,则还需要确保超出这些数量。 这将确保您看到的性能与真正的硬件性能相比,所有这些高速caching层所引入的软件优化都更为紧密。
也就是说,如果你真的只想在运行你想要使用read-cache的基准testing之前清除有用数据的读取caching,那么读取caching中的一个文件并做一些文件操作。 这将清除caching并填充这个单一的大文件。 一旦你closures它,你的caching就会被有效地刷新你关心的数据 。 棘手的部分是搞清楚这个文件需要多大,这些日子可能会有3GB的大小。 此时您可能需要几个1GB的垃圾文件才能使其工作。
我想大多数select将是“手动的东西”。 在UNIX下,在每次运行基准testing之前卸载/重新装入设备都是非常标准的,通常会引入一个“newfs”来达到更好的效果。 我不知道你是否可以在Windows下使用命令行工具来卸载/挂载设备,但是如果自动化是你的目标,那么值得寻找这样的工具。
看看这个答案我刚刚发布到我自己的问题在StackOverflow。
基本上:如果你尝试CreateFile 没有写共享访问的句柄,那么它将刷新,然后使caching无效,即使它返回一个错误。
希望这可以帮助!