1 2 3 Previous Next 31 Replies Latest reply on Sep 4, 2009 6:16 PM by gkeiner

    How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocessor

    paulo.meireles Master

      [b]Problem description[/b][/u]

      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.[/u]

       

      [u]Warning:[/u] The solution described here has only been tested on Windows Server 2003 machines on ACPI VMs.[/b]

       

      [u]Common pitfalls[/u][/b]

      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[/i] by itself, and all sems to be OK. The problem is, if we ever need to downgrade back to ACPI Uniprocessor PC[/i], 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.[/i] When this happens, the only options we have are either:

      \- leaving the machine with the multiprocessor HAL/Kernel and decrease the number of CPUs to 1 (however, using the multiprocessor kernel on a uniprocessor machine involves some additional overhead), or

      \- "Update Driver" to the Advanced Configuration and Power Interface (ACPI) PC[/i] 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.[/u]

       

      [b]The solution[/b][/u]

      The trick, if it can be called so, it to use the Roll Back Driver[/i] feature on the Device Manager[/i] instead of Update Driver[/i]. 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:

       

      \- Start from a powered-on Uniprocessor VM.

      \- On the Device Manager, below "Computer", select ACPI Uniprocessor PC[/i], and "Update Driver" to the ACPI Multiprocessor PC[/i].

      \- When asked, power the VM down.

      \- Now - and only now! - add the second CPU to the VM configuration.

      \- Power the machine on. Check that everything is OK.

      \- Upgrade to SMP is complete!

       

      \- Power down the VM.

      \- Remove the second CPU from the VM configuration

      \- Start the VM and go to the Device Manager[/i]

      \- See properties for ACPI Multiprocessor PC[/i] and press the "Roll Back Driver" button

      \- Reboot the VM when asked.

      \- Downgrade to Uniprocessor is complete!

       

      These two operations may now be repeated over and over again.

       

      [b]How to handle machines that already have the SMP HAL/Kernel[/b][/u]

      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 OS has been installed on a SMP machine, or

      \- 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[/i] Hal/Kernel instead of ACPI Uniprocessor PC[/i], here's what you can do:

       

      \- Start from a powered-on Multiprocessor VM

      \- On the Device Manager, below "Computer", select ACPI Multiprocessor PC[/i], and "Update Driver" to Advanced Configuration and Power Interface (ACPI) PC[/i]

      \- When asked, power the VM down

      \- Remove the second CPU from the VM configuration

      \- Power the machine on. Check that everything is OK

      \- Downgrade to Uniprocessor is complete!

       

      \- Start the VM and go to the Device Manager[/i]

      \- See properties for Advanced Configuration and Power Interface (ACPI) PC[/i] and press the "Roll Back Driver" button

      \- Power down the VM when asked.

      \- Add the second CPU

      \- Power the machine on. Check that everything is OK

      \- Rollback to Multiprocessor is complete!

       

      Again, these operations may be repeated as many times as you like.

       

      [b]Last thoughts[/b][/u]

      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[/i] after installation and only then enable HyperThreading, so you can later revert to ACPI Uniprocessor PC[/i] 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.[/i][/b]

       

      Paulo

        • 1. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
          devzero Master

          \*sigh*

           

          (but a good description from you!)

           

          thanks

          roland

          • 2. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
            Michelle Laverick Virtuoso

            It is possible to do downgrade from Multi-to-Uni using Microsoft's DevCon utility...

             

            It does work - but i cannot speak for the performance...

             

            I wrote a white paper on how to achieve this:

             

            http://www.rtfm-ed.co.uk

             

            Kind Regards

            Mike Laverick

            • 3. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
              paulo.meireles Master

              Thanks, Mike! I just read your whitepaper, and it's good! I wish I had found about it sooner - it would have saved me a lot of trial and error.

               

              The driver rollback "trick", however, can't be found on your otherwise much more complete whitepaper. Feel free to incorporate it - or any of the information here - if you find it useful.

               

              Paulo

              • 4. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                Michelle Laverick Virtuoso

                Sure... I will check out your steps and incorporate them (with credits) when I have time...

                 

                Regards

                Mike

                • 5. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                  paulo.meireles Master

                  I found a Microsoft KB article with a very interesting paragraph, (http://support.microsoft.com/default.aspx?scid=kb;EN-US;811366) which reads:

                   

                  "In Windows 2000, you can change to any listed HAL type. However, if you select an incorrect HAL, the computer may not start correctly. Therefore, only compatible HALs are listed in Windows Server 2003 and Windows XP[/b]. If you run a multiprocessor HAL with only a single processor installed, the computer typically works as expected, and there is little or no affect on performance[/b]."[/i] (my emphasis)

                   

                  This seems to imply that, as soon as a HAL is visible and selected, it's "compatible" - I hope meaning it's supported to change to that HAL. It also seems to imply that it's supported to be running a single-CPU machine with the multiprocessor kernel - and that it doesn't hurt.

                   

                  Paulo

                  • 6. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                    skearney Hot Shot

                    Has anybody tried the /HAL option available in boot.ini file as referenced in this KB?

                     

                    http://support.microsoft.com/default.aspx?scid=kb;en-us;833721

                    • 7. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                      paulo.meireles Master

                      No, I haven't, but that opens interesting possibilities, like allowing to test a configuration without commiting to it. I especially like this bit: "This switch is useful to try out a different HAL before you rename the file to Hal.dll."[/i] I thought manually renaming files was unsupported, and here they are advising how to do it... Are these guys schizophrenic, or what?!

                       

                      Thanks for sharing!

                       

                      Paulo

                      • 8. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocessor
                        nsmallcomb Master

                        In my experience I have found the following to be untrue:

                         

                        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.

                         

                        It usually does not detect the second CPU...although when it does...I would agree that all seems OK

                         

                        Also, I have found that when I try to upgrade the driver to multiproc, I am not always presented with that option.  Does anybody have any thoughts on this?  Is there a specific .inf I can point the update at?

                        • 9. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocessor
                          Michelle Laverick Virtuoso

                          In my experience I have found the following to be

                          untrue:

                           

                          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.

                           

                          It usually does not detect the second CPU...although

                          when it does...I would agree that all seems OK

                           

                          Also, I have found that when I try to upgrade the

                          driver to multiproc, I am not always presented with

                          that option.  Does anybody have any thoughts on this?

                          Is there a specific .inf I can point the update at?

                           

                          For the hell of it - I did a CPU upgrade on a Win2K3 box... Without having to update the HAL or ACPI - I have 2-CPU's when I originally had just one...

                           

                          If you upgrade from 1-CPU to 2-CPU the MUI (can't speak for VirtualCenter) it warns you:

                           

                          "This virtual machine is configured with a single processor. The guest operating system may[/i] require additional tuning if this number is increased"

                           

                          Operative word here is "may" - as the automatic upgrade doesn't work with all Windows OS - and you "may" have to upgrade the ACPI manual to ACPI MultiProcessor

                           

                          If you downgrade from 1-CPU to 2-CPU the MUI warns you:

                           

                          "This virtual machine is configured with more than one processor. If you choose a single processor configuration and the guest operating system is tuned for multiple processors, it may not boot and will probably degrade the performance of other virtual machines."

                           

                          I think this is because it would be up to the operate to downgrade to ACPI Uni-Processor to make sure the HAL.DLL and ntsokernel.exe was correct for the operating system to "idle" correctly

                           

                          Regards

                          Mike

                          • 10. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                            nsmallcomb Novice

                            Thank you for suggesting the idea that I use the MUI...I typically use VirtualCenter.

                             

                            When I went into MUI to upgrade to two procs I found this message:

                             

                            This virtual machine is using legacy virtual hardware and cannot be configured with more than a single processor. To upgrade the virtual machine's hardware, click here.

                             

                            VirtualCenter provided no such message and let me change the number of processors without complaining.

                             

                            Upon clicking "here" I am prompted with:

                             

                            If this virtual machine's hardware is upgraded, it can only be powered on with ESX Server version 2.0 or later.  If you need to run this virtual machine on versions of ESX Server prior to 2.0, then click Cancel.  Upgrade virtual hardware now?

                             

                            Of course I click OK because we are running ESX 2.5.2 across the board.

                             

                            Now the plot thickens as the windows informs me that the operation timed out.  The cause for this was VirtualCenter.  Because it was open while I was working in the MUI, VC was prompting me to accept the upgrade prompt in the same way the MUI did.  After I responded affirmatively to the pending (backlogged) questions in VC, I clicked "here" again in the MUI then quickly acknowledged the same prompt in VirtualCenter.  The upgrade worked successfully in the MUI and I am now able to change it to 2 CPUs.

                             

                            I boot the VM and still can't get the OS (Windows 2003 Server SP1) to recognize both CPU's.  I tried upgrading the driver, but am not presented with the SMP option.

                             

                            I decided to use the P2V assistant on the drive.  When prompted to select the target VMware Product / Virtual Harware the "2 VCPU" options are all greyed out.  I am forced to choose a 1 VCPU option.

                             

                            Thanks for this input thus far.  Any ideas?

                            • 11. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                              Michelle Laverick Virtuoso

                              Thank you for suggesting the idea that I use the

                              MUI...I typically use VirtualCenter.

                               

                              When I went into MUI to upgrade to two procs I found

                              this message:

                               

                              This virtual machine is using legacy virtual hardware

                              and cannot be configured with more than a single

                              processor. To upgrade the virtual machine's hardware,

                              click here.

                               

                              VirtualCenter provided no such message and let me

                              change the number of processors without complaining.

                               

                              Upon clicking "here" I am prompted with:

                               

                              If this virtual machine's hardware is upgraded, it

                              can only be powered on with ESX Server version 2.0 or

                              later.  If you need to run this virtual machine on

                              versions of ESX Server prior to 2.0, then click

                              Cancel.  Upgrade virtual hardware now?

                               

                              Of course I click OK because we are running ESX 2.5.2

                              across the board.

                               

                              Now the plot thickens as the windows informs me that

                              the operation timed out.  The cause for this was

                              VirtualCenter.  Because it was open while I was

                              working in the MUI, VC was prompting me to accept the

                              upgrade prompt in the same way the MUI did.  After I

                              responded affirmatively to the pending (backlogged)

                              questions in VC, I clicked "here" again in the MUI

                              then quickly acknowledged the same prompt in

                              VirtualCenter.  The upgrade worked successfully in

                              the MUI and I am now able to change it to 2 CPUs.

                               

                              I boot the VM and still can't get the OS (Windows

                              2003 Server SP1) to recognize both CPU's.  I tried

                              upgrading the driver, but am not presented with the

                              SMP option.

                               

                              I decided to use the P2V assistant on the drive.

                              When prompted to select the target VMware Product /

                              Virtual Harware the "2 VCPU" options are all greyed

                              out.  I am forced to choose a 1 VCPU option.

                               

                              Thanks for this input thus far.  Any ideas?

                               

                              This is very interesting scenario (does that make me a sad person)

                               

                              Firstly this statement...

                               

                              This virtual machine is using legacy virtual hardware

                              and cannot be configured with more than a single

                              processor. To upgrade the virtual machine's hardware,

                              click here.

                               

                              Its the case that a P2V VM can "inherit" some of the limitations of the physical hardware - for example ability to only host one CPU or the lack of ACPI Management. This is because when you install Windows - windows selects the approrpiate HAL for that "computer type". Only by updating the the HAL can we alter this.

                               

                              There are some cases where updating the HAL is not support by Windows and therefore as consequence by VMware...

                               

                              Since W2K3 Microsoft has chosen to "hide" from the GUI the ability to change the HAL in some circumstances - obstensible to aviod BSOD. I see this as their support adopting a CYA policy...

                               

                              The only option they "offically" support is a "in place installation" - basically going through a repair installation of Windows. This always gives ACPI UniProcessor or MultiProcessor. The downside - is its a very long process, full of frightening caveats from Microsoft and could undo a lot of the system information our P2V was meant to "capture" in the first place.

                               

                              I have found a method using Microsoft DevCon to force upgrades/downgrades of WinXP/2K/3 to any HAL to support any number of processors.

                               

                              In my case I wanted upgrade W2K3 from 1-CPU to 2-CPU on non-ACPI compliant motherboard.

                               

                              I wrote a whitepaper about my experiences here:

                               

                              http://www.rtfm-ed.co.uk/docs/vmwdocs/whitepaper-upgrading-cpus-on-non-acpi-p2v.pdf

                               

                              Perhaps you might find reading this useful... it outlines the DevCon method I meantioned earlier - and includes some useful MS KB Links as well...

                               

                              Regards

                              Mike Laverick

                              url=http://www.rtfm-ed.co.ukRTFM Education[/url]

                              url=http://www.rtfm-ed.co.uk/?page_id=7Have you RTFM'd today?[/url]

                              • 12. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                                nsmallcomb Novice

                                Thank you Mike for your comments.

                                 

                                I think I found VMware's difinitive answer on page 29 of the P2V manual. (http://www.vmware.com/pdf/p2v21_manual.pdf) It says that the upgrade from Windows 2003 uniprocessor to smp is not supported:

                                 

                                Unsupported. No SMP upgrade path available through Device Manager.

                                 

                                I'll have a look at your "unsupported" solution.

                                • 13. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                                  Michelle Laverick Virtuoso

                                  Yup...

                                   

                                  It's the exact same problem. I wish I'd realised sooner that it was! So it goes, as Kurt Vonnegut says...

                                   

                                  You basically have two choices... an "in place (re)install" which could be quite dangerous - or this unsupported method. Using DevCon you can go in any direction with respect to CPU upgrades and downgrades & differences in motherboard support. Like any unsupported work around don't expect VMware or Microsoft to touch this with a barge pole.

                                   

                                  I looked into this issue because I was curious - and always bugs me when MS remove options because I'm considered to stupid to let loose on something (I'm sure this isn't why they do it - it just feels like I am being treated a like a teenager who can't be trusted with Dad's gadgets!)

                                   

                                  I think the biggest worry with processor DOWNgrades is what the performance will be like... especially CPU times and if the VM "idles" as expect when it is not busy processing threads...

                                   

                                  Let us know how you get on...

                                   

                                   

                                  Kind Regards

                                  Mike

                                  • 14. Re: How to repeatedly upgrade Windows 2003 to SMP and revert to uniprocesso
                                    nsmallcomb Novice

                                    My machine is ACPI. I mod'd the last three lines of your script to read:

                                     

                                    devcon sethwid @ROOT\PCI_HAL\0000 := +ACPIAPIC_MP   > nul

                                    devcon sethwid @ROOT\ACPI_HAL\0000 := + ACPIAPIC_MP  > nul

                                    devcon update %windir%\inf\hal.inf ACPIAPIC_MP    > nul

                                     

                                    Here is the output from your script:

                                     

                                    ====================================================

                                    ==Upgrading Standard PC to Multiprocessor PC ======================

                                    ====================================================

                                     

                                    Please Wait

                                    No hardware ID's modified.

                                    '!MPS_UP' is not recognized as an internal or external command,

                                    operable program or batch file.

                                    ROOT\ACPI_HAL\0000                                          :

                                    Modified 1 hardware ID(s).

                                    '!MPS_UP' is not recognized as an internal or external command,

                                    operable program or batch file.

                                    devcon: Invalid use of sethwid.

                                    For more information type: devcon help sethwid

                                    devcon failed.

                                    Done!

                                     

                                    ====================================================

                                    ==Script Completed=======================================

                                    ====================================================

                                     

                                    ====================================================

                                    ==Press any key to reboot the Virtual Machine=======================

                                    ====================================================

                                    1 2 3 Previous Next