0

It's now the second game that I've been playing recently which for some reasons makes Windows not use disk cache. I have 64GB of RAM. The game itself eats around 7GB, 2GB are left for the OS, which means over 55GB of RAM is free for cache. The entire game assets are around 34GB mark which means everything could and should be cached.

After playing for just two hours, Windows shows that the game has read over 170GB of data from the disk. The game launches from Steam but it's actually an Origin (EA) game, i.e. both DRM solutions are loaded. The game files are still managed by Steam.

Task Manager

For the first game I found just this stupid solution: each time I played it I created a RAM disk, copied the installed files to this disk and run the game this way. It's very irritating because copying such massive amounts of data just to play a game looks terribly excessive.

Resource Monitor shows that the game process reads the same game files over and over again.

Maybe it's Origin/Steam DRMs acting up in unison but I've just no idea at all.

Aside from these two games, I've no other applications or games exhibiting this issue.

I've tried Googling for this issue but nothing came up. The OS is Windows 10 in default configuration, i.e. I haven't tuned anything. The first game if I remember correctly was also an NFS game using the Frostbite engine.

People have actually complained about it: https://www.reddit.com/r/needforspeed/comments/eoqiop/my_hdd_is_screaming_while_playing_nfs_heat/


Some updates:

  • The Microsoft cacheset utility is 32bit only and useless anyways as there's practically no limit to Windows 10 disk cache.

  • Here's the most important thing: I tried to manually cache all the game assets by copying the game files to NUL. Everything has been successfully cached, as consequent copies are to the tune of several gigabytes per second. Once I start the game, the cache is decreasing right before my eyes until it becomes at the very least 12GB smaller. The game does evict files from disk cache. Whoever programmed the game should be punished with prejudice. This is stupid, horrible and makes no sense.

  • A lot of howtos instruct to install the game on an SSD disk to eliminate slowdowns which confirms that it's a widespread issue only no one before me actually took time to dig deep into it.

  • Here's a task manager, resource monitor and RAMMap screens:

Resource Monitor RAMMAP Task Manager

  • I've sort of "solved" the issue by actually using a RAM disk (this will only work for people who have more than 48GB of RAM) and copying game files to it, only it's kinda crazy and seems excessive.
11
  • I/O read bytes is a "volume" measurement rather than a speed measurement. Memory-mapped files will still contribute to the read metric, but they may be an order of magnitude faster than actually reading from disk. I don't see any evidence in your post that windows is not auto-caching file reads on the game assets. Have you looked at the mapped-file enumeration using e.g. RAMMap? Also, I doubt cacheset is useful for this purpose.
    – Yorik
    Sep 30, 2021 at 20:45
  • I haven't checked RAMMap yet - the way it shows information is not exactly useful anyways. As for volume measurement - while I'm playing, the game is reading the same game files over and over again non-stop. Even when you restart a race which has a very strict and certain amount of resources/assets which need to be loaded. Windows by itself manages read disk cache worse than any other OS I've ever dealt with but not to this extent. Sep 30, 2021 at 21:00
  • Windows has APIs to disable disk caching ( FILE_FLAG_NO_BUFFERING docs.microsoft.com/en-us/windows/win32/fileio/file-buffering ) but why would anyone do that? That sounds insane. I wonder if there's an utility to override that. There's an utility which does the opposite: codeproject.com/Articles/51678/… Sep 30, 2021 at 21:03
  • I would expect the process I/O read counter to increase no matter if the data is read from disc or from a cache, because anyway it is a read operation by that process. Therefore I am not sure if the game really works the way you describe. How much is the difference in loading time between RAM disc and loading e.g. a race a second time?
    – Robert
    Sep 30, 2021 at 21:20
  • There's a huge difference. Oct 1, 2021 at 10:30

2 Answers 2

1

The game does seem to have been programmed inefficiently, but I believe that some of the results can have other interpretations.

First, the Resource Monitor shows the I/O that is done by the process, not by Windows from the disk. So if the game re-reads the same files again and again, the reads are counted, but they may actually come from the memory cache. The game's Read & Write counts do not represent the system I/O as done on the disk.

Second, Windows can use the memory cache for other purposes than only disk data. If the game allocates memory (as distinct from disk I/O), this may then come out of the memory cache. So it's entirely natural that when the game starts, then the memory cache is reduced and allocated for the process working memory.

Last, Windows memory allocation algorithm is not guaranteed to work perfectly for all program profiles. Your game may in effect use I/O in a very inefficient manner that Windows does not optimize enough. Your solution of the RAM disk is one way of avoiding excessive I/O, transforming it into in-memory copies, but fortunately these are much faster.

9
  • The disk drive while playing the game is close to 100% busy and Resource Monitor clearly shows tens of megabytes of data read every second. I've already made it clear in my question. So it's entirely natural that when the game starts, then the memory cache is reduced and allocated for the process working memory. - this is wrong as by default over 50GB of RAM is free after running the game. Windows has zero reasons to clear disk cache. Windows memory allocation algorithm is not guaranteed to work perfectly for all program profiles. No other game or app exhibits this issue. Oct 8, 2021 at 12:36
  • 1) Your "answer" is almost entirely wrong 2) It does not address my question even remotely. Oct 8, 2021 at 12:38
  • You're misinterpreting the numbers. My "answer" tries to explain why. If the game used FILE_FLAG_NO_BUFFERING, there's no way that you would be seeing tens of megabytes per second. Also, unless it was running as Administrator, it cannot monkey with the cache. And also, one game that's programmed inefficiently doesn't mean that they all are.
    – harrymc
    Oct 8, 2021 at 16:36
  • I specifically said the issue affects just two games out of everything I've used in my entire life. This flag does not require Administrator privileges, it's basic C. there's no way that you would be seeing tens of megabytes per second - it loads gigabytes of textures, map data, audio on the fly all the time - this is called "streaming". Consoles are strapped for RAM, yet they have fast SSDs, so this is what could be happening. Why don't you just install it instead of making things up? Again, your answer is not an answer, it's not an explanation, there's zero value in it, if not negative. Oct 8, 2021 at 20:21
  • Again, you have not read my question. Dozens of howtos recommend to install the game on an SSD disk to avoid stutters which are happening precisely because the game prevents Windows from using file cache. Oct 8, 2021 at 20:24
0

One more persistent and low effort automation workaround could be with VirtualBox with higher share of memory dedication to a VirtualMachine (what have pretty low overhead and close to physical hardware performance nowadays) for gaming tasks. Having the VM created gaming storage (VM disk) in memory might be another beneficial option with one-click startup option.

For to avoid double cache buffering on host cache and guest cache, host io caching should be off: VBoxManage storagectl "VM name" --name <controllername> --hostiocache off

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .