I have a Dell R710 rack hosting several VM's:

  • Windows Server 2008 R2 w/ Hyper-V
  • dual Xeon 5520's @ 2.26 GHz
  • 32GB mem
  • teamed nic (4 gigabit NICs)
  • all VM's are on their own set of mirrored SAS disks

My problem is with a virtual Windows 2000 server running on the above system. This server runs IIS 6, some cgi-scripts and some asp pages. All tie into Visual FoxPro DB back-end.

My question is how can I give more horsepower to my Windows 2000 VM, or is this even possible? My Hyper-V settings for the VM starting out were:

  • 3GB mem allocated
  • default virtual cores (1)
  • 10% (ten) VM reserve
  • 100% VM limit
  • 100 relative weight (there are 2 other VM's hosted all of which are idle and are on separate SAS disks)

With this configuration if I logged in to the web services with 3 accounts I could slam the Win2000 VM to 100%. I then adjusted the Hyper-V settings for the server up and up and up until I was at:

  • 4 virtual cores
  • 100% VM reserve (or 25% of total system resources)
  • 100% VM limit
  • 1000 relative weight

The kicker is that throughout all my tests (top configuration and bottom) my rack server sat at approx. 5% CPU utilization total. Meanwhile, my Win2000 VM performed the exact same each and every time (pinned CPU with 3 accounts logged in performing the same search, or 30% CPU utilization with a single account performing a search).

I've also tried adjusting processor compatibility setting for "Run an older operating system, such as Windows NT". However, I did not try the "Migrate to a physical computer with a different processor version" setting.

Is there an inherent problem with virtualizing Windows 2000 server? Is there something else I can try to capture more CPU cycles from the host server? Ideally I would like for the host to go to 25-50% utilization when the Win2000 VM is pinning.

Some background info: these are our old legacy services which are currently being rewritten in .Net. There are most likely performance improvements to be gained in refactoring the legacy source code but this is not an option. Our shop lacks the expertise in FoxPro and the business decision has been made that the effort is better spent in a rewrite.

There is the option of purchasing a fast physical server to replace the VM. I am confident this would have a dramatic improvement. However, I would prefer to have this server virtualized as I have been burned before by a machine needing a reboot... a task easily performed from my phone for a virtualized server.

Thanks in advance for any suggestions you may have.


Both of the other answers are correct. Calling Microsoft for support with Hyper-V and Windows 2000 will result in being told that the only supported configuration involves one virtual CPU.

With that said, I suspect that you got exactly the same performance each time because Windows 2000 didn't automatically reconfigure itself as a multi-processor installation when you added virtual CPUs. Win2K was only using one CPU, even when you assigned it four.

You need to go to device manager and change the HAL from the single processor HAL to the multi-processor HAL. (Update driver on computer type.) That will trigger the installation of the multi-processor kernel, ntdll, HAL, etc. My memory says that there were about six binaries that changed.

Note that this is a one-way trip. Your Win2K VHD will be running multi-processor code indefinitely after that, even if you go back to a single virtual CPU. You might want to back up your VHD first, as these multi-processor binaries are less efficient than the single-processor ones when running single vCPU.

Lastly, please understand that the reason that Microsoft isn't supporting more CPUs for Win2K has partly to do with the fact that the Win2K kernel has no idea isn't being virtualized and it has some hard assumptions that all CPUs run all the time. Breaking this assumption by virtualizing more processors will result in less than linear performance gains (cough, cough.) You might get reasonable performance with two processors. More will probably not help.

  • Thank you very much for your comment. This is just the sort of modification I was looking for. I'll be testing it tomorrow morning. Thanks again! – JohnyD Jul 11 '11 at 13:33

First, Windows 2000 only supports a single virtual processor on Hyper-V.

Second, measuring CPU usage of the host server is not as simple as using Task Manager, since Task Manager is itself running in a virtual machine. For more information on measuring CPU usage in Hyper-V, please check out this article.

  • Thank you. The tests I ran were on the host and VM were both using perfmon, not Task Manager. Thank you for the blog article. I will run some more tests on the host using those specialized perfmon counters. – JohnyD Jul 7 '11 at 15:58

Your first problem in your little test with 4 cores is that you're running an unsupported configuration. When you run unsupported, results are difficult to predict. Check out this document from Microsoft. You can only run a single CPU while using Windows Server 2000 on Hyper V.

If you give your VM a single core and assign it 100% of that core, you've maxed out what performance you can from that system. Your other options are to deploy a physical box or deploy a hypervisor that supports SMP on Windows 2000 (like ESXi).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.