My company has a number of different types of hardware, for servers as well as workstations. Also, we build new systems (especially servers) rarely enough that imaging is of limited utility, because the image is bound to be out of date by the time we want it again.
We're thinking about installing a virtualization tool (almost certainly VMWare ESXi) on the hardware, but only installing one VM on each machine. This way, we get the benefits of hardware abstraction, but still have consistent performance. We could "image" any existing machine just by copying the VM (or, for the first time, using a P2V tool); load the image whenever we want in VMWare Server for trivially easy updating, and have the benefit of snapshots; and simple deployment to heterogeneous hardware.
The question is: what sort of performance hit can we expect? I've found lots of studies online comparing the performance of N virtual machines running on one computer for various values of N, but none that compare it to bare-metal. I seem to recall hearing once that Xen could cause a 20-40% degradation in IO performance, which (if that's true, and if ESX is similar) would hit our SQL servers pretty hard.
Does anyone know about virtualized vs. bare-metal performance of Windows Server on ESX, when there's only one VM so it's not competing for resources?
Besides performance, can anyone think of other downsides to this sort of setup?
Well if you are running on ESXi without licensing it then you will be limited to using 4 cores at the moment. That may not be a big deal but it's worth noting that limiting factor in case it's relevant to you.
The general performance degradation for server workloads on current generation hardware is in the order of a few percent - you are unlikely to be able to notice it but you might be able to measure it. A 20-40% degradation in performance for any major component (CPU, RAM, Storage, other IO) would be unacceptable in my book, I've never seen it happen.
You'll need to allocate some percentage of resources for management overhead though, that's a couple of hundred MB of RAM potentially (depending on the size and type of the Guest OS).
I've done this for a handful of customers who weren't interested in wide scale virtualization - generally to enable older Windows 2000 servers to run on current gen hardware where there are no longer drivers available for W2K - without any issues. I still think it's relatively wasteful, but if you don't mind that part then go for it.
So your question covered a lot of ground judging by the answers you have received so far. I am going to include some links that will help move you in the right direction, but to answer your specific question - you should expect a performance hit when running MSSQL much greater than for other applications. My organization is currently running approximately 15 vm hosts across 3 vsphere clusters with approximately 250 guests machines and I can tell you that as a general rule we only see a few percent, say 5 or less difference in physical to virtual - particularly with servers moving off of older hardware.
**However, with SQL server we typically see between 10%-20% difference. And yes, this is in a scenario like you describe with a SQL server physical being converted to a vmware guest on a physical host running nothing else. We have tested this extensively in house for several reasons which are more in depth than this answer warrants. Suffice it to say your mileage may vary but you should be cautious about moving any SQL servers with a heavy load without testing first or the willingness to move them back if necessary. Also note that Snapshots are only good when the data isn't changing at a rapid pace. It is not fun to Snapshot a SQL server only to find out a week later that it has 200GB worth of snapshot files.
You will find many sources saying you can get near native performance including this paper from VMWare using ESX 3.5. And you can tune the system to get as near to their results as possible using information such as this presentation from VMWorld, but in the end with a SQL Server you will most likely end up at least 10-15% from native, and believe me we tried.
This is really not a good use case for virtualization. It's more to manage, it's more to troubleshoot, it's more to update, it's more attack surface, it complicates backups, it complicates networking, it complicates support calls, it degrades performance, and there's almost zero benefit for all the compromises. Every single thing you're hoping to achieve can be achieved more sanely without virtualization.
You need to think about exactly what you're hoping to accomplish through "the benefits of hardware abstraction," because that's exactly what drivers were designed for. This isn't 2002 anymore -- if you've designed appropriately, Linux and Windows can basically have their hard drives plugged into new hardware and just go when you hit the power button.