如何阻止某些 Windows 游戏禁用/绕过磁盘读取缓存?可能存在 DRM 问题

如何阻止某些 Windows 游戏禁用/绕过磁盘读取缓存?可能存在 DRM 问题

这是我最近玩的第二款游戏,出于某些原因,它让 Windows不是使用磁盘缓存。我有 64GB 的 RAM。游戏本身占用大约 7GB,剩下 2GB 用于操作系统,这意味着超过 55GB 的 RAM 可用于缓存。全部的游戏资产约为 34GB,这意味着所有内容都可以而且应该被缓存。

玩了两个小时后,Windows 显示游戏已读完170GB磁盘中的数据。游戏从 Steam 启动,但实际上是一款 Origin (EA) 游戏,即两种 DRM 解决方案都已加载。游戏文件仍由 Steam 管理。

任务管理器

对于第一款游戏,我发现了一个愚蠢的解决方案:每次玩的时候我都会创建一个 RAM 磁盘,将安装的文件复制到该磁盘,然后以这种方式运行游戏。这非常令人恼火,因为只是为了玩游戏而复制如此大量的数据看起来太过分了。

资源监视器显示游戏进程一遍又一遍地读取相同的游戏文件。

也许是 Origin/Steam DRM 共同起作用了,但我根本不知道。

除了这两款游戏之外,没有其他应用程序或游戏出现此问题。

我尝试用 Google 搜索此问题,但没有任何结果。操作系统是默认配置的 Windows 10,也就是说我没有调整任何东西。如果我没记错的话,第一个游戏也是一款使用 Frostbite 引擎的 NFS 游戏。

人们确实对此有所抱怨:https://www.reddit.com/r/needforspeed/comments/eoqiop/my_hdd_is_screaming_while_playing_nfs_heat/


一些更新:

  • Microsoft 缓存集实用程序仅适用于 32 位,并且毫无用处,因为 Windows 10 磁盘缓存几乎没有限制。

  • 最重要的是:我尝试手动缓存所有游戏资源,方法是将游戏文件复制到NUL。所有内容都已成功缓存,因此后续副本每秒的速度达到几 GB。一旦我启动游戏,缓存就会在我眼前减少,直到至少减少 12GB。游戏确实会从磁盘缓存中清除文件。编写游戏的人应该受到严厉惩罚。这太愚蠢、太可怕了,而且毫无意义。

  • 许多操作指南都指导如何将游戏安装在 SSD 磁盘上以消除速度减慢,这证实了这是一个普遍存在的问题,只是在我之前没有人真正花时间深入研究它。

  • 这是任务管理器、资源监视器和 RAMMap 屏幕:

资源监控 随机存取存储器 任务管理器

  • 我已经通过实际使用 RAM 磁盘(这只适用于拥有超过 48GB RAM 的用户)并将游戏文件复制到其中来“解决”了这个问题,但这有点疯狂并且似乎有些过度。

答案1

这个游戏确实看起来编程效率低下,但我相信一些结果可以有其他的解释。

首先,资源监视器显示由过程,而不是由 Windows 从磁盘读取。因此,如果游戏一次又一次地重新读取相同的文件,则读取次数会被计算在内,但它们实际上可能来自内存缓存。游戏的读取和写入次数并不代表系统在磁盘上进行的 I/O。

其次,Windows 可以将内存缓存用于磁盘数据以外的其他用途。如果游戏分配内存(不同于磁盘 I/O),则内存缓存可能会用完。因此,当游戏启动时,内存缓存会减少并分配给进程工作内存,这是很自然的。

最后,Windows 内存分配算法不能保证在所有程序配置文件中都能完美运行。您的游戏实际上可能以非常低效的方式使用 I/O,而 Windows 对此优化不够。您的 RAM 磁盘解决方案是避免过多 I/O 的一种方法,将其转换为内存副本,但幸运的是,这些副本要快得多。

答案2

一个更持久和低努力的自动化解决方法可能是虚拟盒为虚拟机分配更多内存(如今虚拟机的开销非常低,性能接近物理硬件)用于游戏任务。让虚拟机在内存中创建游戏存储(虚拟机磁盘)可能是另一个具有一键启动选项的有益选择。

为了避免主机缓存和客户机缓存上的双重缓存缓冲,主机 io 缓存应该关闭:VBoxManage storagectl "VM name" --name <controllername> --hostiocache off

相关内容