Problem description
It's commonly heard that you cannot revert a Windows Server 2003 back to Uniprocessor after upgrading to Multiprocessor - and then upgrade to Multiprocessor again. There are some "hacks" that involve manually replacing system files or editing .inf files, but these are, of course, unsupported. The solution described here involves no hacks, no scripting, no manual file replacement, no file editing, and even no command line! It only uses supported mechanisms available on the GUI, so I guess it should be a supported operation.
Warning: The solution described here has only been tested on Windows Server 2003 machines on ACPI VMs.
Common pitfalls
It's considered good practice to start with uniprocessor machines and, only if needed, upgrade them to SMP. This is usually done by powering off the VM, adding a second CPU and powering it on. Windows Server 2003 does, then, detect the second CPU and convert it to an ACPI Multiprocessor PC by itself, and all sems to be OK. The problem is, if we ever need to downgrade back to ACPI Uniprocessor PC, we will no longer be able to; if we go back to one CPU, the machine won't "autoconfigure" itself again; it will remain as ACPI Multiprocessor PC. When this happens, the only options we have are either:
- "Update Driver" to the Advanced Configuration and Power Interface (ACPI) PC HAL/Kernel. Although all seems to work (and, as far as I know, there are no reports of problems arising from its use), there is a lot of FUD about doing this; an official clarification from Microsoft would be nice to have. Moreover, if we install this HAL/Kernel, we won't be able to "Update Driver" to the multiprocessor HAL/Kernel again.
The solution
The trick, if it can be called so, it to use the Roll Back Driver feature on the Device Manager instead of Update Driver. It must, however, be used with caution, and there are some operations that must be done previously or it won't work. Step-by-step, here's how it's done:
- Upgrade to SMP is complete!
- Downgrade to Uniprocessor is complete!
These two operations may now be repeated over and over again.
How to handle machines that already have the SMP HAL/Kernel
The "roll back" trick only works if - expectedly - there's something to "roll back" to. When we install a uniprocessor VM, shut it down, add a second CPU and let plug-n-play do its magic, Windows doesn't make a copy of the previous Kernel/HAL to which we can revert. Also, when we create an SMP VM or P2V an SMP server - which were both installed with the Multiprocessor kernel - there's no Uniprocessor to roll back to. So, the lack of a Uniprocessor HAL/Kernel to which to roll back happens in two scenarios:
- if the Kernel and HAL have been upgraded "by themselves", by just adding a second CPU and rebooting the machine.
However, if you're comfortable with running with the Advanced Configuration and Power Interface (ACPI) PC Hal/Kernel instead of ACPI Uniprocessor PC, here's what you can do:
- Downgrade to Uniprocessor is complete!
- Rollback to Multiprocessor is complete!
Again, these operations may be repeated as many times as you like.
Last thoughts
If you're building a physical Windows 2003 server with only one single-core Intel CPU, you might want to disable HyperThreading before installation, manually select ACPI Multiprocessor PC after installation and only then enable HyperThreading, so you can later revert to ACPI Uniprocessor PC if needed.
The most important thing to keep in mind is that the VM should never be powered on with 2 CPUs and the Uniprocessor HAL, or Windows will upgrade to Multiprocessor by itself and there will be no way back to ACPI Uniprocessor PC.
Paulo
It's commonly heard that you cannot revert a Windows Server 2003 back to Uniprocessor after upgrading to Multiprocessor - and then upgrade to Multiprocessor again. There are some "hacks" that involve manually replacing system files or editing .inf files, but these are, of course, unsupported. The solution described here involves no hacks, no scripting, no manual file replacement, no file editing, and even no command line! It only uses supported mechanisms available on the GUI, so I guess it should be a supported operation.
Warning: The solution described here has only been tested on Windows Server 2003 machines on ACPI VMs.
Common pitfalls
It's considered good practice to start with uniprocessor machines and, only if needed, upgrade them to SMP. This is usually done by powering off the VM, adding a second CPU and powering it on. Windows Server 2003 does, then, detect the second CPU and convert it to an ACPI Multiprocessor PC by itself, and all sems to be OK. The problem is, if we ever need to downgrade back to ACPI Uniprocessor PC, we will no longer be able to; if we go back to one CPU, the machine won't "autoconfigure" itself again; it will remain as ACPI Multiprocessor PC. When this happens, the only options we have are either:
- "Update Driver" to the Advanced Configuration and Power Interface (ACPI) PC HAL/Kernel. Although all seems to work (and, as far as I know, there are no reports of problems arising from its use), there is a lot of FUD about doing this; an official clarification from Microsoft would be nice to have. Moreover, if we install this HAL/Kernel, we won't be able to "Update Driver" to the multiprocessor HAL/Kernel again.
The solution
The trick, if it can be called so, it to use the Roll Back Driver feature on the Device Manager instead of Update Driver. It must, however, be used with caution, and there are some operations that must be done previously or it won't work. Step-by-step, here's how it's done:
- Upgrade to SMP is complete!
- Downgrade to Uniprocessor is complete!
These two operations may now be repeated over and over again.
How to handle machines that already have the SMP HAL/Kernel
The "roll back" trick only works if - expectedly - there's something to "roll back" to. When we install a uniprocessor VM, shut it down, add a second CPU and let plug-n-play do its magic, Windows doesn't make a copy of the previous Kernel/HAL to which we can revert. Also, when we create an SMP VM or P2V an SMP server - which were both installed with the Multiprocessor kernel - there's no Uniprocessor to roll back to. So, the lack of a Uniprocessor HAL/Kernel to which to roll back happens in two scenarios:
- if the Kernel and HAL have been upgraded "by themselves", by just adding a second CPU and rebooting the machine.
However, if you're comfortable with running with the Advanced Configuration and Power Interface (ACPI) PC Hal/Kernel instead of ACPI Uniprocessor PC, here's what you can do:
- Downgrade to Uniprocessor is complete!
- Rollback to Multiprocessor is complete!
Again, these operations may be repeated as many times as you like.
Last thoughts
If you're building a physical Windows 2003 server with only one single-core Intel CPU, you might want to disable HyperThreading before installation, manually select ACPI Multiprocessor PC after installation and only then enable HyperThreading, so you can later revert to ACPI Uniprocessor PC if needed.
The most important thing to keep in mind is that the VM should never be powered on with 2 CPUs and the Uniprocessor HAL, or Windows will upgrade to Multiprocessor by itself and there will be no way back to ACPI Uniprocessor PC.
Paulo