如何清除磁盘读取缓存?

如何清除磁盘读取缓存?

对于性能测试,我需要一种方法来清除所有磁盘读取缓存,因为重新启动需要时间。清除 Windows 托管缓存清除操作系统缓存对我来说还不够。

我想测量游戏中加载声音文件的性能。

某个时刻,游戏会加载 4080 个文件,每个文件大小约为 30 KB。对于每个文件,游戏都会调用fopen几次。最后一次成功,因此使用fseek++读取整个文件,然后对文件进行-ed。ftellfreadfclose

在 Windows 和 NTFS 中加载如此小的文件会产生大量开销。加载是在 12 个逻辑线程上的 12 个线程中完成的,但打开文件时存在互斥锁,并行化没有帮助,因为大多数工作都是由互斥锁序列化的。加载的资产总大小为 4 GB,适合我的 16 GB RAM。

我有两个 SSD:

  • 加米克斯:Gammix S11 Pro 1 TB NVMe SSD,未加密
  • 三星:三星 850 EVO 250 GB SATA SSD,带操作系统和 VeraCrypt 加密

测量顺序:

  • 机器重启
  • 游戏:19 秒
  • 游戏:0.95 秒
  • RamMap 清除缓存
  • 游戏:2.1 秒
  • 三星:18.7 秒
  • 三星:1.0 秒
  • RamMap 清除缓存
  • 三星:3.17 秒

这些数字看起来相当稳定。

第二次运行是完全缓存的并从 RAM 进行,并且无论 SSD 如何都需要 1 秒。

第三次运行仅清除了操作系统缓存,因此应从 SSD 加载数据,分别需要 2 秒和 3 秒。

第一次运行是真正的冷场景,无论 SSD 如何,大约需要 20 秒。这是巨大的差异,原因未知,除了重启之外没有其他方法可以消除它。

答案1

简短回答:Windows 防病毒软件


我当时一直想着 SSD 本身的缓存,直到现在才决定检查其他可能性。显然,杀毒软件才是正确的想法。我用这种方式可以暂时禁用 Windows 防病毒软件

以下是另一个测试序列:

  • 机器重启
  • 禁用防病毒软件
  • 游戏:2.1 秒
  • 启用防病毒软件
  • RamMap 清除缓存
  • 游戏:20.5 秒

我确认:

  1. 在两种情况下加载时间相同:全新启动并关闭防病毒软件后;清除 RamMap 后反复尝试;
  2. 只需禁用防病毒软件并立即重新启用它以清除其扫描缓存即可。这可用于在启用防病毒软件的情况下重复性能测试。

附言没有什么比问问题和去厕所更有助于解决问题=)抱歉。

相关内容