SEARCH

How-To Geek

Change SuperFetch to Only Cache System Boot Files in Vista

After writing the article last week about disabling SuperFetch, my good friend Daniel Spiewak commented that SuperFetch “loads the wrong thing more often than not”, which reminded me of a registry tweak… You can tell Windows to only cache the boot processes instead of everything.

I’ve not personally verified that this tweak really changes anything with regards to performance, so just like disabling SuperFetch you’ll have to check it out for yourself. We’re just trying to keep you informed.

Manual Registry Tweak

Open regedit.exe through the start menu search or run box and browse down to the following key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
   Session Manager\Memory Management\PrefetchParameters

enableprefetcher.png

Find the EnablePrefetcher key on the right-hand pane, and change the value to one of these:

  • Disable Caching: 0
  • Cache Applications Only: 1
  • Cache Boot Files Only: 2
  • Cache Everything (default): 3

You’ll have to restart your computer before this takes any effect. You could consider clearing out the \Windows\Prefetch folder after making this change to start with a fresh cache, but keep in mind that the next boot will probably be slower since Windows will have to cache everything again.

Lowell Heddings, better known online as the How-To Geek, spends all his free time bringing you fresh geekery on a daily basis. You can follow him on if you'd like.

  • Published 02/1/08

Comments (38)

  1. InDiSent

    Has anyone verified if this helps in any way?

  2. Gary

    How did Daniel determine that SuperFetch “loads the wrong thing more often than not”.

    I swear by SF. It makes my programs startup a lot faster then without it. As far as all the disk activity due to preloading at startup time it doesn’t slow anything done.

    I can’t see why anyone would want to disable it? Even if it does load the wrong programs you will have to read it from disk just as if you turned it off.

  3. The Geek

    Gary,

    That was Daniel’s experience… He can comment better (and probably will) on his experience, but keep in mind that SuperFetch performance can vary greatly for different users, since we all use our computers differently.

    For instance, with SuperFetch enabled Windows will grind the hard drive for quite a while after you login. If you frequently cold boot your computer and then want to immediately have unfettered access to your desktop, disabling it might help… or not. The same most likely holds true for people that have a very large number of applications they launch on a regular basis.

    In any event, it’s best to test it out for yourself.

  4. Daniel Spiewak

    I have a large number of applications that I use on a daily basis, though few of them are used regularly (on a schedule, at a certain time, right after startup, etc). So of the 30-odd executables I run in a day, only 3-4 are either run on startup or run at a predictable time in the day. SuperFetch tries to predict which applications I’m going to use based on prior usage. When it fetches the wrong thing, it eats up memory and CPU priorities that makes the startup time and responsiveness for other applications vastly impaired. For example, there was a stretch of about four-five days when I *always* opened Eclipse first thing after startup and didn’t shut it down until late in the evening (I just happened to have need of Eclipse right away all of those days). At the end of this stretch, opening anything else, especially right after startup was extremely sluggish.

    SuperFetch depends upon a statistically predictable workflow, and my workflow is just inherently unpredictable most of the time. I don’t doubt that superfetch works very well for people with consistent patterns in their computing, but I personally find it’s almost always getting in my way and slowing things down unnecessarily.

  5. The Geek

    Daniel’s comment is spot on…

    Personally I end up leaving applications open and almost never closing them… since I don’t care about the speed an application opens, SuperFetch isn’t very useful for me.

  6. Gary

    Maybe my favorable experience with SF is because my computing habits are predictable and I seldom leave an application open for any considerable amount of time. Usually I run one app at a time. I guess I never fully got the original DOS days (pre-Windows) out of my system :-) .

    As a side note I am very pleased with Vista. It is as fast or faster then XP was. For me at least.

    btw…. love your tips Geek.

  7. jachymko

    Did anyone of you actaully read the description of SuperFetch by Mark Russinovich? SuperFetch does NOT affect (only) the startup time of applications. It makes sure the most used data and code is in memory, even if it wasn’t used in the last few seconds. For example, you leave for lunch, the defragmenter or search indexer kick in, use all of the available memory, and when you return, all the running applications are paged out. SuperFetch makes sure that the applications you use are returned back to memory once it’s available.

    Read more on http://www.microsoft.com/technet/technetmag/issues/2007/03/VistaKernel/Default.aspx?loc=en

  8. Daniel Spiewak

    Unfortunately, SF isn’t always that clever about doing things. Often it will prioritize the indexer too high and start cutting into other app performance. Or it will prioritize up when it thinks I’m not doing anything, but it doesn’t get “out of the way fast enough”. Or what’s absolutely worst is it prioritizes the background tasks, then gets out of the way and the processes which are important are then no longer in active memory, but swapped out to the pagefile. This means that when I switch to an application that’s in the “background” (like jEdit), the app is massively slow and hits the drive hard.

  9. jachymko

    Yeah, I agree, I’m stopping the SuperFetch service, too, when I need to run a virtual machine, because I haven’t much RAM and SF is not able to release the memory in time when Virtual PC tries to allocate.

    However, I seriously doubt this EnableSuperfetch setting isn’t treated as a boolean. There’s no way for SuperFetch to be active during boot, since it runs as an automatic service, ie. is started by services.exe, long after the system has finished booting. Thus it makes no sense for it to have a boot-only setting.

    May I ask you, Mr. Geek, whether you have any source for this? I was looking around and found many sites saying EnablePrefetcher is a bitmask going from zero to three (the same as on XP), but only your site says that EnableSuperfetch setting behaves the same.

    I like your site nonetheless, and wish you to keep up the good work!

  10. The Geek

    jachymko,

    Thanks for your comment… I finally started doing some testing to figure out exactly what is going on. The EnableSuperfetch setting isn’t a boolean… but according to my testing it doesn’t do anything at all either.

    I then tested using the other key that you mentioned, EnablePrefetcher… and it looks like that is actually the correct key for this scenario. If you set it to a value of 2, it will only prefetch certain things related to booting. (look in the \windows\prefetch folder to see). I also found the MS KB article about this.

    So, it looks like I had the wrong key name… thanks for being a great and attentive reader =) I’ve updated the article.

  11. z

    Are u sure 2 = boot files only?

  12. Rhys

    I turned off superfetch because it sat there all day loading my bit torrent files into cache. Totally pointless. I guess it’s not particularily good at seeing the difference between a program and data.

    I have one 701MB movie file that superfetch constantly reads (i.e. all day, every day). What a relief to hear my hard disk go quiet at last after turning superfetch off.

    It’s a shame it does this – it seems like a good idea but badly executed.

  13. Zoyx

    Some contradiction, please do research this… practicing some googlefu, some sites recommend. The values for dword are different than what you posted.

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]
    “EnableSuperfetch”=dword:00000002
    “EnablePrefetcher”=dword:00000001

    0=Off
    1=Prefetch boot process
    2=Application Prefetch
    3=Prefetch both

  14. TrashCompaqtor

    I’ve found a lot of conflicting info about this as well. Some sites do say to change both EnablePrefetcher and EnableSuperfetch. Some list different values for desired effects. The info stated in the article checks out with XP registry settings, but as for Vista that’s where I find all the differences. I’ll just have to try it myself to see which place has it right.

    Such a great site, the most useful info I’ve found for tweaking Vista!

  15. Locutus

    There is one very destructive thing about superfetch that made me turn it off:

    I have 5 HDDs in my PC (don’t ask why) and the biggest one of them is quite noisy -> I use it for storage of the things I do not need on a daily basis so that Windows Powermanagement can turn it off. When it does, my PC is almost completely silent.

    Now what Superfetch does since some Performance Patch from M$ about 3 months after Vista’s release, is to regularly power that HDD up and down for at least 3 times in a row => That has to hurt the hardware! It does not matter what time I set on the “power down time” of the HDD. After it powered down for the first time it just keeps spinning up and down for a couple of times stays on for 3-5 minutes then powers down again… stays off for an unfixed time and then the whole thing repeats.

    Turning superfetch off leaves the HDD powered down until I try to access it.

  16. spackie

    Everyone is encouraged to see what effects on system performance occurs when EnablePrefetcher and EnableSuperfetch are set to 0. As a test on my PC with 4Gb of RAM, a significant speed increase was noted upon rebooting and using Vista. My PC constantly had 1.5Gb or more of free RAM so I could *instantly* load in

  17. Peter

    I had to disable superfetch. I’m a pretty heavy multitasker. I have a quad with 8gb’s of ram and 3 monitors. My processes count averages 80 to 90. Superfetch would spend 5 to 10 minutes going through my drive and caching stuff. I’ve caught it reading through multi gig files that I hadn’t used in a long time.

    Anyways.. Similar story as some of you guys. Completely useless in my case. Rather not waste resources on something that really doesn’t help.

  18. Felix

    I am quite annoyed by Vista 64 Superfetch, mainly because my PC use is quite random, ranging from work to fun apps to games and so on, so to say it cant be really predicted correctly. What happens when Superfetch is left with its default setting is that it fills all memory, and when a app thats not in the list starts, PC becomes terribly slow (and I run RAID 0 10000 RPM HDD’s, very fast memory and very fast processor). Tried disabling the Superfetch service, that helped a bit, mainly memory was not filled from start, but gradually by loading everything in memory when accessed. Once it filled the memory and a unpredicted intensive app was trying to load…same issue, PC got reeeeally slow for a while.

    Then I did a search on the internet to see if there was a solution to this and found this site, tried the settings (EnablePrefetcher 2) and amazingly it solved the problem. So now, from the 4 gb of RAM I have, between 2 and 2.5 gb are always free, never got the super slowdowns again (running this for 1 week now), and I usually got them once or twice a day, and for 5-10 minutes my disks went crazy and everything was like a PII with 128 RAM running XP. Also, when I exit an application, the used memory is freed almost instantly.

    I will NEVER understand who had the bright idea to cache a 700 Mb avi file or a DVD since those files DO NOT require a high read bitrate. Sadly, Superfetch could be a great tool to improve system performance but it was done MS style. Dont really mind if applications loads a couple of seconds slower, but if it kills my PC for a couple of minute then I do mind.

    I strongly disliked Vista at its start, for obvious reasons, but after SP1 and hardware companies doing their thing (mainly drivers) I started liking it a lot. Its at least as fast as XP if not faster, at least the 64 version.

    Very useful info for me, thanks Geek!

  19. andrew elberg

    superfetch is stupid and here’s why.

    Superfetch works on the premise it knows what you are about to do so loads data off your hard drive into ram anticipating your actions and causing your system to lag as it’s using scarce hard drive bandwidth. Looking into the future is not possible therefore this is stupid. It is quicker for the average user to ensure your scarce hard drive bandwidth is free to supply the data needed when requested.

    For boot files it makes sense as they are repeated every time you boot but after that it’s trying to do the impossible ie: predict the future AND not leaving your hard drive free for your requests thus making your system slower.

    Turn it off, if you have 4 gb or more turn off your swap drive also, if you find you run out of ram due to apps you use turn it back on but this is unlikely and you will notice a substantial increace in speed I recommend reg key value 2 for superfetch.

    good gaming

  20. ziggggy

    I’m glad I found this site. I just reformated about a month ago.. Running vista x64 ultimate with 4 gig ram, e8400 cpu, and a couple SATA drives.

    Today, I was transferring about 100 GB from my non-OS drive to another machine over my gige network.. MY machine went nuts. Within 5 mins, the machine stalled to the point where the mouse pointer didnt move in response to me moving the mouse. The file transfer was still going on, as I could monitor it from the other machine. About 10 mins after the file transfer completed, my computer SLOWLY started becoming responsive again. Curious as to what the hell happened, I opened up process monitor and tried the file transfer again, until my computer locked up. Turns out the pagefile is being read/written a considerable amount and my 4 gigs of memory being completely filled within 5 mins of the transfer. Stopped the file transfer, (computer still thrashing like crazy and stalling the computer).. stopped the superfetch process and just like that, the thrasing stopped completely and the computer came back alive. Tried again the file transfer and no more stalling.

    I dunno what the hell superfetch was doing, but if it was trying to cache my 100 GB file transfer.. THAT’S RIDICULOUS…

  21. ziggggy

    Well, I guess you can ignore my above post. Looks like even if superfetch is disabled, I’m still somehow running out of memory ( all 4 GB) when i try to copy large files over the network

  22. ziggggy

    I may have figured it out… It seems that when you are sharing a folder overr the network, and the remote machine browses through that shared folder and tries to copy a file, for some very strange reason, the host’s machine memory starts to get eaten up. If the file is big enough, then the memory consumption on the host machine will reach 100% and the vista will start paging all kinds of stuff to the pagefile until the machine is practically stalled to death. I also just reversed roles with the host and remote machine, by sharing a folder with large files on the remote machine and on the host machine, copying the files over, and I can monitor the remote’s machine memory being eaten up. Strangely though, if the remote machine tries to write a large file to the shared folder, the memory leak doesnt occur; only when it copies from. Very strange…

  23. kerframil

    In response to Zoyx’s comment: The Geek is correct. Corroborating information can be found from Microsoft themselves:

    http://msdn.microsoft.com/en-us/library/ms940847%28WinEmbedded.5%29.aspx

    Granted, that refers to the EnablePrefetcher key rather than the EnableSuperfetch key, but there is no plausible reason for Microsoft to swap the values around for the latter.

    Also, I tried setting EnableSuperfetch = 2 and discovered that the Superfetch service refrains from constructing the per-user databases that are normally found under %WINDIR%\Prefetch. Specifically, it does not create those that have a .db extension *and* reference the SID of the applicable user account:

    AgGlUAD_P_%SID%.db
    AgGlUAD_S_%SID%.db

    This is entirely consistent with the intended outcome: for Superfetch not to cache application usage patterns (which is actually done on a per-account basis despite a number of erroneous remarks to the contrary that I’ve seen here and there). The results are easily reproducible as it is quite safe to delete the contents of the Prefetch directory – as long as the Superfetch service is stopped beforehand.

  24. Larry Miller

    This tweak does not work as claimed.

    In spite of the similar names, SuperFetch and Prefetch are really quite different features. The “EnablePrefetcher” setting is for Prefetch and has nothing to do with SuperFetch.

    Prefetch was introduced with XP and was used to optimize both boot and application launch times. It does not preload anything and it is not a cache. The belief that it is a cache is very widespread but is totally wrong. The default setting for “EnablePrefetcher” is optimum and you will gain nothing by changing it. “Cleaning” the prefetch folder is not useful and will impair performance.

    Superfetch was new in Vista and it does preload applications. It does this before the anticipated need, not at boot time. It has nothing to do with improving boot time. Some people find this feature useful, others do not. If it is not useful you may freely disable it. But do not attempt to control it’s operation with Prefetch parameters.

    Larry Miller
    Microsoft MCSA

  25. Koinonos

    Many of my fellow gaming colleagues (I work for a large software firm in Redmond, WA) do detune Superfetch by modifying the EnableSuperfetch value from the default value (usually 2 for boot only) because SuperFetch does have a tendency to stupidly attempt to cache large file copies, large video files, etc.

    It is quite annoying to have the memory manager attempt to trim working sets or attempt to trim working set to the pagefile when Available Memory (really demand zero pages, free and zero page lists but that’s another story) exhaust and forces OS performance issues.

    Superfetch tends to be great for pure business environment, but for a gaming rig/entertainment rig it gets wrong more than it gets right. I have had extensive conversations with the MS internal dev team responsible for the code, and they appear to understand (some are gamers themselves), but without getting Xperf traces where they can actually see Superfetch “goof” they don’t quite know what to tune. So most of them either modify EnableSuperfetch to help with this problem themselves as a workaround.

    In case any were wondering “why dont’ they fix this!?” Oh, Windows 7 is just as bad as Vista despite the significant overhaul. It’s less stupid and makes fewer mistakes but still makes them – so be prepared to reset this value on Win7 just as I did when I upgraded from Vista SP2. FYI, YMMV, and the usual qualifiers.

  26. Koinonos

    Doh! I meant EnableSuperFetch=1

  27. Spackie

    How does PREFETCH provide a performance benefit to XP (and Vista/Win7)?

    Great explanation here:
    http://windowsitpro.com/article/articleid/77130/jsi-tip-5826-what-is-the-windows-xp-prefetch.html

    The answer lies in the fact that during typical system boot or application startup, the order of faults is such that some pages are brought in from one part of a file, then from another part of the same file, then pages are read from a different file, then perhaps from a directory, and so on. This jumping around results in *moving the heads around on the disk*. Microsoft has learned through analysis that this slows boot and application startup times. By prefetching data from a file or directory all at once before accessing another one, this scattered seeking for data on the disk is greatly reduced or eliminated, thus improving the overall time for system and application startup.

    For XP like performance on Vista, set prefetch to ON (3), if you find superfetch is being a bit too memory / HDD intensive, disable superfetch (0)

  28. yukeming

    Mr The Geek
    I want superfetch and prefetch to only cache to boot, i dont want it to cache application and slow down my computer.
    i still dont understand why EnablePrefetcher controls Superfetch.
    And what is EnableSuperfetch key for.
    so what do i change to make the two “fetches” to only cache my boot and not my appliacations?
    Is EnableSuperfetch redundant? changing it does not change anything? Or what?
    Or isit that i only need to change EnablePrefetcher to 2 to make sure that the two”fetches” only cache my boot?So i leave EnableSuperfetch to its default, which i s”3″?
    My only aim is that i want them to cache my boot and speed up boot time, but not cache applications.
    My boot time refers to the number of time that the bar goes, and under the bar there is a “microsoft corporation”.

  29. Gamix

    I completely agree with Daniel, that SuperFetch “loads the wrong thing more often than not”.
    In my case, this feature was totally useless. As I work with large images (up to 1 GB), every time I started computer, the SuperFetch feature moved to swap the last file I edited, though i almost never return to previous project after turning on the computer. So it’s only another vista annoyance…

  30. snadge

    I have used this ‘hack’ on Vista machines I fix that are slow on boot after SP1 / SP2 installs and it works a treat…

    I only changed PREFETCH to “2″ which prefetches BOOT files only – SuperFetch is still enabled

    Ive never had any problems with SuperFetch – when you go to use the HDD SuperFetch stops what its doing and allows you to access the drive…. same goes for memory – if the cache is ‘full’ and using all the free memory it releases memory that you need for your application that hasnt been ‘superfetched’ – therefore the ONLY decrease in performance is the time it takes to “stop what its doing (microseconds)” and “free up cache-RAM (microseconds)

  31. MilesAhead

    Kind of an old hint but I see it still hasn’t been corrected. MS never tells you this but the settings EnablePrefetcher and EnableSuperfetch should always be set to the same number. I have mine both set to 2 to only cache boot files. If you look in a new install of Vista or Windows Seven you will see they are always both set to 3 as default.

    That’s probably the reason for a lot of arguments if the setting does or does not make a difference. Unless you set both keys to the same number, you aren’t really setting it.

  32. Just Me

    People’s hatred of pre/superfetch will never cease to amaze me. The ONLY time there is a good argument to disable it is for hard drive longevity on a system that doesn’t need to be immediately responsive, and even then you should still prefetch the boot files (although personally, I’d rather keep it fully enabled there too)

    There are three arguments against prefetch that I commonly see.

    1. Boot times.
    Seriously, you’re going to compromise overall performance in favor of faster boot times? If you don’t install anything but drivers on your computer, I can guarantee your computer would boot up faster too. Figure out how much time you spend actually on the computer. Now figure out how much time you spend waiting for the computer to boot up. You can figure out the rest from there. (or at least, you SHOULD be able to…)

    2. Caches the wrong stuff.
    Who cares if you have the “wrong stuff” cached in RAM? The performance difference between having nothing cached and having the wrong stuff cached is absolutely zero (see #1 if you complain about the time it takes to cache this wrong stuff). Therefore, the WORST case is no difference. The best case is that the application is already in RAM and doesn’t need to hit the hard drive because it loaded it there during boot.

    3. It uses up all my memory so I don’t have any left for programs.
    This is a misconception of how it works. Cached files are released immediately if there is a current need for the space. It does not consume RAM like a running program does.

    Another point of mine is that empty RAM is wasted RAM. If you don’t care to have anything prefectched then you might as well return that 4+ GB of RAM and get 2 GB (except in the obvious special cases where that much RAM is needed, fetch or no fetch). Get that data off the hard drive and into RAM! Hard drives are painfully slow compared to RAM.

  33. vulturedog

    I changed my EnablePrefetcher parameter from 3 to 2 and noticed an immediate and stark difference. Night and day, really. I’m running 64-bit Vista on a 4GB RAM HP laptop. I never understood why it SuperFetch thinks it is helping me out by trying to figure out what time of day I plan to open this or that. I’m not a drone; I could open anything at any time of day.

    I wouldn’t be writing this if the difference hadn’t been so drastic. But if something awful happens, I will take my lumps and come back to update this post.

  34. MilesAhead

    @vulturedog my thinking is if you left EnableSuperfetch to default setting of 3 then you are gathering stats for boot file prefetch, which is why it works. I believe it’s a bit field. According to my theory having it at 3 still gathers stats for Superfetch of programs even though you are not prefetching them. IOW it may work as long as the bit is set for the type of prefetch you are using, but it’s better to set the numbers both the same since then you would not be gathering stats for a prefetch that’s not enabled. The load on your system may not be noticeable. But they should really document the EnableSuperfetch key. If it was 1 equals on and zero equals off I don’t think they’d set it to 3 by default. I think 3 is both boot time and program prefetching same as the EnablePrefetch setting.

  35. Papa Croc

    MilesAhead, earlier in the thread it was suggested to delete the cache file when setting both values to “2″ but to first disable superfetch. Do you concurr and if so:
    1) will a 0 value disable it
    2) how do I find this cache file
    Thanks and thanks for you clarifications above!

  36. MilesAhead

    Sorry I haven’t checked back in awhile to this thread. You probably found it yourself by now. But deleting the caches are simple from a command line.

    Open an admin command prompt.

    For boot cache change dir to C:\Windows\Prefetch\ReadyBoot

    then run del *.*

    For application prefect queue just change dir to C:\Windows\Prefetch
    and do the same. I have UAC disabled. If you have UAC on then you may have to click a box or whatever. In command prompt for me it just asks are you sure and I hit Y.

    You can delete the caches while the stuff is still enabled. It will just rebuild them. The disk space used is not a lot so it doesn’t really matter much if you delete before or after disable.

  37. +Quantum

    Wish I had known about disabling SF a year ago. What a giant waste of time waiting for all that disk thrashing while Vista boots… Why the bozos at MS didn’t put this in the .cpl I’ll never understand.

  38. +Quantum

    From Larry Miller: “Superfetch was new in Vista and it does preload applications. It does this before the anticipated need, not at boot time.”

    Depends on what you mean by boot time. If it’s going to anticipate apps and preload them, it seems to want to do this right after the tray is filled at boot. The thrashing goes on for quite a while (2 mins at least) after that. I can’t even get Rseource Mgr. to start up quickly, the load is so large. I don’t care when SF wants to preload an app, it’s still taking CPU and disk away from what I want to do RIGHT NOW. I’ll pay the price to load some app I rarely use when I run it. It’s a shame SF doesn’t want to wait until a specified CPU load is reached, say <20% or so. Any load above that, I'm using the machine even if the mouse isn't moving or the keyboard is inactive, so DON'T BOTHER ME! Without some control like that, SF is a pig. And yes, I'm running dual core 6800 at 3.3G with dual Hitachi 250G drives that are quite quick, so it's not a slow machine.

Enter Your Email Here to Get Access for Free:

Go check your email!