Originally posted by: VirtualLarry
Here's a good question: What good will superfetch do me, if I'm working with 4+ GB files that push everything else out of the filesystem cache. I assume that it would also dump the superfetch cache, which would mean that either: 1) Superfetch would be useless, once this happens, until a reboot, or 2) Superfetch would attempt to reload the superfetch cache after a certain point, dumping my filesystem cache.
Your basic assumption/understanding of how it works is a bit off. Theres really no segmentation between "superfetch cache" and "file cache". Superfetch is just the process that manages the cache, and it runs continuously. It's not as if it's determining on boot which files will be cached and limiting it to only those files - it just gets a running start with those files and then manages from there.
Superfetch has several levels of priority. On boot, its going to completely fill your memory as best it can, to get off to a good start. But as you use your PC, it will use a good chunk of the cache for recent file I/O just like windows XP did, cause thats obviously still a useful thing at times. But it won't completely flush out your cache with recent file I/O - it will save quite a bit for the precached stuff it knows you use all the time.
On the few occasions that I've seen it dump part of the cache to load a different set of files (those which I use at that time of the day), it dumped half at most, and only while I was idle for several minutes...I just happened to be at my computer not touching the mouse at the time, and I saw it happen on a resource monitor program I use (samurize). For all I know, it does it all the time when I'm not around.
Superfetch is supposed to have some sort of logic as to determine what not to bother caching, such as the I/O from a virus scan or defrag. How exactly it determines what to cache or not, I'm not entirely sure, maybe by the process thats carrying it out, but I do know one aspect of it is that it does take into account whether youre idle (not using the mouse/kb I assume), and won't flush the cache with useless defrag I/O in that situation.
The problem that I see is that a lot of stuff that I do is I/O-bound, and the additional overhead, even if it were at a low priority, of 2GB worth of I/O would still slow down my processes, as far as I can see.
Well, there isnt any overhead, aside from perhaps the initial precache at boot. But you shouldnt have to reboot very often anyway...just put it to sleep. It's not going to start dumping and caching while you're doing heavy I/O, light I/O or near zero I/O (playing a game/browsing the web). I've literally seen it dump partially maybe twice since Vista was released.
I guess if/when I finally adopt Vista, I'll turn off superfetch. I honestly don't see the utility of it, above and beyond the filesystem cache. (Recently opened programs would still be in the filesystem cache, and load instantly anyways without superfetch. And if they weren't, the I/O time is going to be the same whether or not I cause the app to be loaded or if superfetch pre-loads the app. It's the HD speed itself that is the bottleneck.)
But if you're doing heavy I/O that far exceeds your memory capacity, recently opened programs wont be in the file system cache, because without superfetch to keep those heavily used files there, they'll just get flushed out.
The only time the I/O time is going to be the same is if you preload a frequently used program or files before it's done precaching after boot. Superfetch can't load the app any faster than you from the HD obviously, but thats the entire point - its already there for you in cache when youre ready to use it, removing the HD bottleneck.
Also, keep in mind that it isnt really working on a file basis, but on clusters. Even if you have 2GB of memory and youre working with 4GB files, if you access certain clusters of that file very frequently, it's going to favor keeping them in cache. I've seen it load a chunk of WoW, a chunk of C&C 3, and a chunk of Oblivion (all bits of huge several GB files), most likely startup files and parts of the game like your own character model thats ALWAYS resident - all alongside a whole bunch of other frequently used stuff.
It's taking everything that can go wrong into account...I really cant think of a single realistic situation where you'd actually gain anything by turning it off. How much you gain by having it on depends on how and for what you use your computer...it can range from slight to huge.
For instance, on my HTPC, I run 2 fairly large programs (Mediaportal and GameEx). They do not work well with each other when both are loaded at the same time (each wants exclusive access to DX9). So I have to constantly open and close them. So say I'm using XP, and I play a few games. I quit GX to load MP, which takes at least 10-20 seconds to load off the HD. I watch a HD movie ( 4GB+), record a show, etc, and that completely flushes GX out of cache. I quit MP to load GX, and it takes a good 10-20 seconds to load that back. And so on, and so on. Once I upgraded the HTPC to Vista, everything just loads back and forth in a snap (1-2 secs, CPU bound), because it knows those are the two programs I use more than anything else, and it just will not let them out of cache, no matter how much I/O I run through. Its a HUGE difference for me there. And I even only have 1GB of memory in it...XP couldnt reliably pull that off with several GB.