Experiments in Virtualization

Virtualization is so hot right now… (although it can’t be that hot, because my spell-checker doesn’t even recognize it as a word.)
The concept is that as hardware gets faster and faster, we’ve actually reached the point of diminishing returns on all but the most grueling of tasks (HD Video rendering is the only other thing I’ve seen that really taxes a modern PC.) Now we’ve got hardware that can support not just one environment without breaking a sweat, but 2 or 3.
At work we have a server running VMWare’s ESX Server that’s currently running 16 “virtual” computers at once. None of this is that new — what is new is the way processors are being built with this kind of thing in mind. Intel’s Core2Duo is made for virtualization, and nothing proved this to me faster than Parallels Workstation.
I have a fairly recent Dell Laptop, based on a the Centrino chipset — essentially a P4, at 1.3GHz with 2GB of RAM. It runs Windows and VisualStudio adequately. For awhile, I was given the use of a MacBook Pro, running a CoreDuo. The thing screamed running its native OS — OS X 10.4, but when I booted up Windows XP inside a Parallels virtual machine, I was astonished to find that Windows actually ran faster virtualized on my MacBook then it did on my Dell. I used it for my day-to-day development, rendering video in one machine, while compiling code in another. And I was sold.
A colleague of mine has taken this concept to its logical extreme, and I won’t pretend to have his knowledge on the subject. Rather, if you’re interested, you should read his posts.

  • Build Machine Virtualization discusses how he eliminated the need for frequent hardware replacement and streamlined our company’s build process using VMWare.
  • Development Machine Virtualization discusses how he’s created specific environments for different development tasks, while still adhering to our I.T. departments onerous rules.

The latter article is the one I’d like to build on with my own thoughts here. My set-up, briefly…
I’m using a desktop computer — not a laptop, as my afore-mentioned Dell left a bad taste in my mouth. The desktop is a Dell as well, since I.T. gives us no other choices, but despite being as ugly as sin cosmetically, its a very nice machine:
Processor: Intel Core2Duo @ 2.4Ghz with a 1Ghz FSB
RAM: 4GB @ 800Mhz (although Windows XP only recognizes 3GB)
Hard Drive: 250GB SATA II 7200RPM
Operating System: Windows XP SP2 – I.T. Core Load
The real beauty of this set-up is that the OS referred to above, which I consider to be less than satisfactory (at the least, they should have used Windows XP 64-Bit), really doesn’t matter — it could even be Ubuntu. Its only the host OS. As Shawn recommends, I’m running a very light-weight collection of apps, that I’m happy to let I.T. manage for me. I’ve got Windows and Office, plus a messaging client and FireFox, and various Remote Desktop/VNC clients. That’s it. Add VMWare, and from here, I can have the world…

Currently I’m running two “virtual” computers running Windows XP, one running Windows Server 2003, and one running Mac OS X…
My Development VM gets 1GB of RAM, and has a 50GB pre-allocated virtual hard drive. I took a snap-shot when I started, but I realised later I could have achieved the same thing, just by copying the VM directory off to an external archive hard drive. Either way, if anything gets messed up in Windows (which, lets admit, happens fairly frequently) I can just revert the whole system to a working state with a couple mouse clicks.
My Test VM gets 512MB of RAM, more if it needs it, and a 15GB growable hard drive. This is a “clean” install of Windows XP, updated with nothing installed on it. I run the latest version of the software I’m developing on this.
Whenever I want to test how a specific build of my software behaves when installed on a customer’s computer, I can snapshot back to its “clean” state, and run the Setup program.
My Server VM is a machine I took from our Green Bay office while there. They had a virtual server configured with a replica of a customer’s configuration, and all I had to do was copy it to a portable hard drive and carry it with me. It has a pre-allocated hard drive, and gets 512MB of RAM — more if needed.
My OS X VM lets me run Mail.app (my preferred mail client), PhotoShop and other nice programs that only Mac has to offer. It should be noted that performance on this machine is not stellar — but that’s only due to a lack of driver support, since Virtualizing Mac OS X is not supported.
The coolest of these virtual machines is the Development VM — it was made from an actual physical computer. A little app called VMWare Converter can run on a machine, and create a VM out of it. So doing, I was able to switch from my old computer to my new one in a matter of hours, instead of the day or two it normally takes to get Windows, VisualStudio + Orcas, SQL Client Tools, .NET 1.0-3.0, and TortoiseSVN up and running on a fresh box.
The performance on any 3 of these machines running at the same time is equal-to, or better-than a physical computer only a year or two old. With two monitors, and an RDP connection to another headless server I have running behind me, I can juggle 5 computers at once, (6 if you count the host) with more than adequate performance.
I’ll point you again to Shawn’s articles if the benefits of this set-up aren’t self-evident. I was initially a little unsure that the VMs would be responsive enough for my daily use, but VMWare and the Core2Duo have proven to be a stellar team…