Hardware upgrades, part 1
I recently performed a few upgrades to keep my PC up-to-speed and thought I’d share a few tips.
You really need to know what’s going on inside your PC and Everest is a great package to do just that. It will tell you more information about the components in your PC that you’d care to know about and can also be used to peek in on the temperature of the CPU, hard-disk and graphics chip providing your system supports it. Best of all the Home version is free although there are commercial versions for corporate and “ultimate” usage too if you have a few dollars ($29.95 at the moment) to spend.
I brought a 2GB (2x1GB) kit of GeIL memory from Overclockers, who I can highly recommend if you live in the UK or Channel Islands, primarily to reduce the amount of swapping testing Visual Studio 2005 Beta 2. The first thing I noticed on slotting them in alongside my existing 2x512MB modules is that the memory bus had reverted back from 400MHz to 300MHz. This was quite disappointing and no combination of slots or memory settings in the BIOS would resolve this. Forums made reference to some Intel 875P motherboards not supporting 4 modules at 400MHz but I found nothing solid.
A quick trip into the processor BIOS settings gave the option to switch the processor speeds from automatic to manual and there gave the option to lock the memory speed to 400MHz but my interest was now piqued.
Subtleties of RAM
Memory modules are very specific. As well as a physical type e.g., 184-pin DIMM, you have the bus e.g. PC3200 which also means DDR 400MHz, whether they support ECC (error correction), whether they are unbuffered, registered and most subtlety what memory timings they support. Delve into your motherboard manufacturers compatibility database, try Crucial’s or Kingston’s on-line memory selectors or pop open Everest to find out what’s already in there.
Get the wrong type and there’s a chance it won’t fit into your board, the wrong bus and it might not even boot, but timings affect the speed in just a subtle way and are easily overlooked. Most modules contain a special chip called an SPD which describes the recommended timings for this memory module to the computer’s BIOS. There are four basic memory timings and they are often advertised along with the module such as 3.0-4-4-8. These numbers represent CAS Latency (CL), RAS to CAS delay (tRCD), RAS Precharge (tRP) and RAS Active Time (tRAS) respectively. The CAS Latency is regarded as the most important and the idea is the lower the numbers the better.
The memory controller inside current PC’s can only deal with one set of memory timings and so the slowest value for each timing is used. What surprised me is that my memory was running at 2.5-4-4-8. I could understand the last three values as they were the slower values from the new 1GB GeIL modules (larger modules are normally a little slower) but the GeIL was rated at 3.0 CAS not 2.5 like my existing 512MB TwinMOS modules. When memory goes wrong you won’t get a helpful error message, the most likely symptoms are a reboot or lock-up and I didn’t want to risk having that happen at the most inopportune moment.
It was time to test my system, and all fingers were pointing to an open-source/free-software memory testing tool called MemTest86 that requires you burn it to a CD and then reboot as it needs to take over the whole of your machine to do it’s job. Twenty minutes later my machine was still testing with no errors yet found although you really should let if have a full run-through with all the different test patterns. One interesting feature of this tool is the ability to further tinker with the memory timings inside the tool to see how aggressive you can set your system while still retaining compatibility. I lowered mine down to 2.5-3-3-6 and left it run for another 45 minutes. There were still no errors and I might have been able to take it further but at this point I just wanted to get back using the machine.
Pushing the limits of 32-bit
A 32-bit processor can only directly address 4GB of RAM and I remembered reading something about a /3GB boot.ini switch to adjust the way Windows maps the memory. An investigation of this quickly revealed that unless my applications were specially compiled for 3GB mode and I wanted individual applications to use more than 2GB of RAM then it wasn’t necessary.
Intel added a facility called PAE which extends the paging system to support 36-bits allowing up to 128GB of RAM on server versions of Windows however each application still has the 4GB address and 3GB RAM limitation unless it is specially written using the Address Windowing Extensions (AWE) API. If you want more than 3GB of RAM you really should be looking at 64-bit processing and if you’re a Windows desktop user Windows XP Professional x64 edition.
While PAE looks like a pretty useless facility to most of us it is however the basis of a hardware mechanism to prevent applications from being exploited by buffer-overflow vulnerabilities by marking pages as either data or code. This facility is called Data Execution Prevention (DEP) or sometimes no-execute (NX). Alas the feature is not enabled on models of chip that use socket 478 :( and implementing this in software is a little slow…
To come…. cooling with intelligent fans and the Aerocool control panel!