【发布时间】:2015-03-10 15:41:24
【问题描述】:
我已经阅读了几篇关于如何使用外部应用程序清除缓存的帖子 here 和 here。
我想运行性能基准测试,并想在每次运行前清除操作系统的文件系统缓存。我在 Java 中运行一个带有许多参数的程序,我需要一种自动化的方法来执行此操作,即在 Java 中以编程方式。
有什么建议吗?
【问题讨论】:
-
您可以使用 JNA 调用
SetSystemFileCacheSize((SIZE_T) -1, (SIZE_T) -1, 0),它会刷新缓存。但我认为这还不够,因为它只是将页面从工作集转换到备用列表,而没有真正清除它们。 -
RAMMap 使用未记录的系统调用来清除备用列表,我认为这需要 NT 6。有关以下 sn-p 所需声明的更多信息,请参阅this page:
SYSTEM_MEMORY_LIST_COMMAND command = MemoryPurgeStandbyList;@987654328 @ 这需要启用"SeProfileSingleProcessPrivilege",为此提升的进程需要调用OpenProcessToken、LookupPrivilegeValue和AdjustTokenPrivileges。 -
我忘了说调用
SetSystemFileCacheSize刷新缓存需要启用"SeIncreaseQuotaPrivilege"。