Tweaking Windows XP

I was reading through a story on Slashdot that made reference to an old system.ini entry for Windows 9x that tells Windows to do its level best not to use the paging file, AKA swap space. This has no relevance to Windows NT; however, there are some similar registry settings that do work in NT.

One reference I located doing subsequent searches is Martin Krohn's Windows XP Tweaking Guide. This has numerous handy tweaks; I will boil the ones I intend to actually use down here, as this (or a subsequent blog post) will be a kind of worksheet explaining what I did and what did and didn't work.

Filesystem Tweaks

We start our story on Page 3, where the interesting tips begin. Martin wants us to disable both access time updates and 8.3 filename creation in order to speed up filesystem access. The first option is acceptable for anyone not running a server, at least in most cases; I will do this. The second is a very bad idea, because sometimes you run across some ancient, braindamaged utility that doesn't work properly with long file names (LFNs.) The following registry tweak (save as a .reg file) will disable access time updates:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisableLastAccessUpdate"=dword:00000001

This is equivalent to mounting a filesystem with the option "noatime" on Linux (or similar.)

Paging File Performance

As you may have noticed, Windows (2000 and XP especially) is a bit overzealous when it comes to swapping out unused pages of memory. It can take a very long time to come back from swap when you've allocated a lot of memory, unused or no. Windows has a few registry settings that allow you to alter the paging file use.

One thing you could do is disable paging entirely. This is an option on systems with over 512MB RAM; Personally, I wouldn't do this at all, and if I did do it, I wouldn't do it with less than 1GB memory. If you run out of memory, the system can crash; having paging space prevents this from happening, at least until the paging file fills up - and Windows can dynamically increase the size of the paging file. Nonetheless, if you should want to disable paging:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"DisablePagingExecutive"=dword:00000001

That, however, is not your only option, and it would make much more sense to simply have a small paging file in any case - I only include it here because I might want to do it myself someday. More useful is the ability to stop Windows from paging out its kernel:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"LargeSystemCache"=dword:00000001

This will prevent core parts of the system from being swapped out, consuming only about 4MB of RAM (negligible on all but the lowest-memory systems, these days) and potentially saving you a great deal of frustration. I hope - we'll see!

Incidentally, you may have already guessed that this guide mostly applies to all NT5 operating systems: Windows 2000, Windows XP, and Windows 2003 Server, which are NT 5.0, 5.1, and 5.2 respectively. However, be wary of making changes to something other than XP based on a guide for XP; For instance, there is a bug in windows 2000 that can cause the system to hang if you enable the DisablePagingExecutive setting (and an associated hotfix.)

The next suggestion is to turn off virtual memory. Don't do this! Even the tweaking guide says that Direct3D games with large textures won't work, and that Adobe applications will have problems. Don't submit to the temptation to tweak your system into Oblivion - which if you'll pardon the pun, probably uses a lot of large textures :P

More filesystem fun

At this point I flip back to Page 2 for the next-most-interesting items in the guide, which are also filesystem-related. The first suggestion is to turn off indexing. This is a system that builds full-text indexes and records other information about the filesystem in a file that makes for faster access than walking the filesystem tree. Martin wants you to turn it off by bringing up properties on individual hard disks/partitions and unchecking the box "Allow indexing service to index this disk for faster searches" which works fine - but you could instead go into services (Start -> Control Panel -> Administrative Tools -> Services, or run "services.msc" from Start -> Run/Windows-R) and disable the indexing service (go into its properties and set startup to disabled) which will disable it completely.

Next we have a section titled "CDFS Tweaks". It suggests that you accept the following registry input verbatim:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\CDFS]
"CacheSize"=hex:ac,09,00,00
"Prefetch"=dword:00004000
"PrefetchTail"=dword:00004000

But what the hell does that mean? I don't know if I'm alone on this one, but I prefer never to mess with my registry unless I have at least some idea of what I'm doing. This is just one of the highly frustrating things about Windows; the extremely poor registry documentation. One wonders if even inside microsoft there exists a complete dictionary to the registry.

A little digging around turned up some information from Microsoft's site. Windows 98 First Steps of Optimization has a couple of relevant tables:

Table 2-1 CacheSize Parameter Values

Page Count Memory Usage (in KB) Binary DWORD

619

1238

6b,02,00,00

0000026b

1238

2476

d6,04,00,00

000004d6

2476

4952

ac,09,00,00

000009ac

Table 2-2 Prefetch Parameter Values

CD-ROM Speed Decimal Binary DWORD

4x [Default]

228

e4,00,00,00

000000e4

8x

448

c0,01,00,00

000001c0

16x

896

80,03,00,00

00000380

24x

1344

40,05,00,00

00000540

32x

1792

00,07,00,00

00000700

We can see that the value for CacheSize is the largest one shown on the table from Windows 98; We can also see that the value for Prefetch is larger than the largest one valid for Windows 98. Larger is probably better. Hopefully, I'll find out in a positive way whether or not this is true.

The guide next instructs us to convert any filesystems over 25GB from FAT32 to NTFS. My move would be to convert any filesystems; FAT32 is quicker for small filesystems with ideal usage patterns but is slower than NTFS when modifying existing files, dealing with large files in general, or when fragmented (NTFS handles fragmentation better than FAT32.)

As the guide says, you can use the "convert" utility to do this. As the guide also says, you can do this like the following:

Convert C: /FS:NTFS

This converts the drive C to NTFS, and sets up security on the files to a default set of permissions. You cannot convert back to FAT32 without a third-party utility like Partition Magic (now owned by Symantec, and part of the Norton utilities) so be sure that this is something you want to do; if you dual-boot Windows and Linux, you may want to keep FAT32 just for ease of interoperability. Native linux NTFS support is seriously lacking (read-only works pretty well, though) and the alternative, Captive-NTFS, is rumored to be exceptionally slow dealing with long files (but does support writing to files, creating them, etc.)

Miscellany

Some miscellaneous tweaks are described on Page 4. First, removing MSN; this will actually not speed anything up. Just don't use MSN. Problem solved. Anyway, since sp2 you can uninstall the MSN browser.

The next subject is disabling autoplay. This is suggested in pretty much every tweak guide, and I never do it, because besides autoplay of whatever's in the autoplay.ini file you also lose the little dialog box that comes up when you stick in a CD with a bunch of files on it that asks you what you want to do. If you do want to disable autoplay, you can accomplish this from the group policy editor (Start -> Run/Windows-R, then "gpedit.msc") by opening Computer Configuration -> Administrative Templates, then clicking on "System", then in the right-hand pane you open "turn off autoplay" and set it to enabled. This will disable autoplay across the entire system. You can also turn it off on a volume-by-volume basis (in device manager) or you can use Tweak UI (one of the XP Power Toys) to do the same.

The next tweak suggested is disabling the unloading of DLLs. This is a step to save memory; DLLs are cached for long periods of time and only unloaded when Windows feels like it. This following registry tweak forces DLL unloading immediately once a DLL is no longer in use. This will make programs sometimes take a bit longer to start, but will free up memory more rapidly.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]
"AlwaysUnloadDLL"="1"

The next set of tweaks is supposed to improve shutdown time. It looks like it mostly works by making the system kill applications quicker, so it might not be a good idea.

[HKEY_CURRENT_USER\Control Panel\desktop]
"AutoEndTasks"="1"
"HungAppTimeout"="5000"
"MenuShowDelay"="400"
"WaitToKillAppTimeout"="4000"
"WaitToKillServiceTimeout"="4000"

It would be instructive to know what the original values are! I intend to record all of the defaults before do anything.

This page closes with a note on the prefetcher. The prefetch system watches what happens during boot, and puts specially-defragmented copies of the files used then into a prefetch location on the disk, so that there will be less seeking during boot, which means faster booting.

Martin tells us that prefetch values between 1 and 6 are the interesting ones, and that 5 is what works for him.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]
"EnablePrefetcher"="5"

I do not intend to mess with this, but it seemed like something I'd like to note down for future reference. I mostly hibernate my system, and restoring from hibernation doesn't involve the prefetcher.

Networking

The next item (on Page 6) describes an alleged bug in Microsoft networking that causes very long boot times when connected to a network. The solution given is to remove file and printer sharing (SMB) support from the interface in question, then re-add it. Unfortunately, no Microsoft Knowledge Base (MSKB) article number is provided, thus illustrating the importance of citing your sources - how old is this problem? Has it been fixed? Is there a hotfix not in a service pack? We may never know.

Finally, there are instructions on disabling the bandwidth reserved for the OS under Quality of Service (QoS). In short:

  1. Log in as Administrator - not an Administrator, the Administrator.
  2. Run gpedit.msc.
  3. In the left pane, open Local Computer Policy -> Computer Configuration -> Administrative Templates -> Network and then click on QoS Packet Scheduler.
  4. In the right pane, open "Limit reservable bandwidth"
  5. Click the "enabled" radio button, and set the limit to 0%

This seems like a neat tweak, if indeed the default is to limit; in gpedit this is set to "Default" meaning there is no policy.


References

  1. "Windows XP Tweaking Guide". Krohn, Martin. Neoseeker, Friday, September 6th, 2002. <http://www.neoseeker.com/Articles/Hardware/Guides/winxptweak/>
  2. "Microsoft Windows 98: First Steps of Optimization". Farquhar, David L. O'Reilly, 2000. <http://www.microsoft.com/technet/archive/win98/maintain/first.mspx?mfr=true>
  3. "The DisablePagingExecutive Setting May Cause Windows 2000 to Hang". Article ID 323608, Microsoft, October 11, 2005. <http://support.microsoft.com/kb/323608/>
  4. "Disable CD autoplay in Windows XP Pro". Maples, Wayne. WindowsNetworking.com, Apr 20, 2004. <http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/UserTips/Customization/DisableCDautoplayinWindowsXPPro.html>
  5. "Microsoft PowerToys for Windows XP". Microsoft. November 1, 2005. <http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx>

Add new comment

Default

  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • You may link to images on this site using a special syntax
  • Web page addresses and e-mail addresses turn into links automatically.
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.
  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Filtered words will be replaced with the filtered version of the word.
  • Lines and paragraphs break automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <q>

Issue

  • Lines and paragraphs break automatically.
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>

Drinking Game

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <pre> <h2> <h3> <h4>
  • Images may be embedded like: [image:node_id align=alignment hspace=n vspace=n border=n size=label width=n height=n nolink=(0|1) class=name style=style-data node=id] Leave off any attributes you don't want.
  • [img_assist|...] tags will be displayed, maybe. Please don't make more of them.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Refresh Type the characters you see in this picture. Type the characters you see in the picture; if you can't read them, submit the form and a new image will be generated. Not case sensitive.  Switch to audio verification.