We have worked with virtual servers extensively, both in the context of cloning entire environments, and in the context of insufficient machines (the live environment is 9 servers, and we have 5 machines in the QA lab, and we're not willing to re-use dev boxes as QA servers, THAT is a nightmare for deployment)
In my experience, project managing deployments onto virtual servers is a very good way of pre-testing deployments onto live machines, mostly because you can save a base state in a way that you cannot do when uninstalling windows - in other words, you can have a clean windows, or windows + SQL, or whatever, install by just "shut down, copy, paste, startup"
We were working MS Virtual Server and Virtual PC, not VMWare, only challenge we experienced is that the servers could not attach to the USB ports, which I understand VMWare can.
Most of our development (lots and lots of sharepoint) happens on VPCs - or at least, sharepoint resides on a VPC, and Visual Studio on a local box, one place we've found performance problems.
But have a look at this post from MSDN blogs about performance:
VPC instances can be optimized a number of ways
1. Have a processor that supports hardware virtualization. It does matter! See the diagram below:
2. As you could see, there's an option in the VPC settings that allows hardware-assisted virtualization if your processor supports it. Unfortunately, in my case even my notebook PC does not support that. My processor configuration is as follows:
According to Scott's blog, and I quote him:
If you're running Intel, refer to this table at Intel to see if your chip supports VT. All the Core Duos support VT except the ones that end in "E" like the Intel Core Duo processor T2300E .
3. In no particular order, you should check the Intel Virtualization Technology (VT) web site to find out what processor supports hardware-assisted virtualization, also known as "Virtualization Inside" (cool name). Also check out AMD virtualization technology. I do not take sides, as I have processors from both AMD and Intel.
4. My home PC has an AMD Athlon 64 X2 Dual-Core processor and it supports hardware-assisted virtualization. Whenever I am preparing my demo on a VPC image, I work from home (a valid reason to my boss that I have to work from home)
5. Memory allocation: In the above VPC instance, I had 1.6GB of memory allocated to my VPC instance. In my home PC, I allocate 2GB, or more if I do not run many applications in the background. Size does matter.
6. Do not run your VPC on the same hard disk as your host OS. Run your VPC on an external HDD that has a high RPM speed. Or if you PC has two separate physical HDDs, run and store your VPC on the HDD that is not where your host OS is installed. I am using an external Maxtor HDD with an external power source. Do not use those tiny 2.5" pocket HDD that draws power from another USB port. The power from another USB port is not enough to juice it up, besides most likely the RPM speed of the pocket HDD is low.
7. I compress the folder which contains my VPC image. The reason behind this is not just because I want to optimize my storage space, but even more importantly is the fact that I want to reduce the amount of disk reads from the HDD. It's better to let my CPU work hard rather than my HDD work hard. Everyone knows that the weakest link in terms of the performance of a PC is the HDD.
8. This is how I compress the folder, right-mouse click on the folder and choose Properties:
9. You should also compact your VPC image (I don't do this as often as I should though). Here's how:
10. If you are running your VPC on Windows Server 2003, for instance, use Microsoft Virtual Server 2005 R2 instead.
If you want to read more about VPC optimization, you may check out the following blogs:
The Virtual PC Guy