Hey Folks - We need your help. We were hoping, we could gain from your experience with implementing server virtualization. When should we be using Red Hat Virtualization, Citrix Virtualization, Xen Virtualization, Microsoft Virtualization, Oracle Virtualization and VMWare. I will be very interested in learning from your first hand experience. I will also like to know, under what situations is one virtualization preferred over the other. - Thanks for your help
Likely to be quite a long post in response, so bear with me…
First off, you have to consider the type of virtualisation being used. From the technologies you’ve listed these (broadly) are: para-virtualisation and hardware assisted virtualisation (typically seen as HVM).
Para-virtualisation: For the x86 architecture this is Xen (all flavours) strength. In this instance you have the kernel of your ‘guest’[1] operating systems modified in a way that makes it aware that it is running as a virtual instance and that it does not have exclusive access to all of the hardware all of the time. These modifications are quite extensive and therefore not trivially performed. It should be obvious that Linux and other open source operating systems enable making the required changes easy/legal/possible. For operating systems such as Windows these changes cannot be made without the express permission of Microsoft (and hence they’re not publically available).
Hardware Assisted Virtualisation: Here the guest operating system is provided with an emulated environment of all the hardware it requires to run. This way no modifications are required, and as far as the guest operating system is concerned it has exclusive access to all the resources all of the time. It’s basically in a container separated from the host and other guest operating systems.
What are the advantages of para-virtualisation?
- Fast. Because we don’t have to emulate a full environment the guest OS can run at ‘near native’ speeds[2]. The hard to virtualise instructions can be modified in the code meaning IO speed can be greatly increased.
- No vt processor required[3].
What are the advantages of HVM?
- No modification of the OS kernel is required, therefore a wider range of operating systems can be virtualised.
- No modification of the OS is required, therefore the solution is (potentially) more supportable, and certainly more familiar to the user/admin. [Technically the advantage is the same as above, but it’s important]
There is also the possibility of combining these benefits so it all becomes a bit grey. You can run HVM instances and install para-virtual drivers for disk and network IO. In theory you get the broad (and unmodified) OS advantage of HVM with the speed advantage of para-virtualisation.
So what falls where:
Xen (as available in SLES, openSUSE, Red Hat, Fedora, Citrix, and Oracle). Provides both para-virtualisation and HVM modes. Initially it was very focussed with para-virtualisation, but with the new vt processors[3] can do both.
VMware traditionally provided an HVM solution where the hardware was provided via emulation. Wouldn’t be a lie to say it’s the most mature technology for the x86 architecture. Their latest ESX releases reportedly offer para-virtualisation also. I’ve not seen/tried this though. Their Workstation (paid for) or Server (free) product are HVM only.
Virtualbox is very similar to VMware (Workstation or Server). Owned now by Sun but still open source.
KVM is a module available for the Linux kernel that allows HVM virtualisation without the need for the Xen modifications.
Microsoft provide Hyper-V which is also an HVM type solution with ‘enlightened’ operating systems that can have para-virtual drivers loaded.
Which one to use where is very much dependent upon what the function of the server is, and the OS being used. If it’s a large deployment then the management tools available also come into play.
[1] in Xen there is a very small Xen kernel that loads on the bare metal. Thus all operating systems are technically guests. In Xen these are referred to as domains, with Domain0 being the first loaded OS. Typically this would be confused with the host OS in other virtualisation environments. Domain0 is very important as it is used to manage the subsequent domains. If Domain0 crashes, then all the other domains are not available. Hence Domain0 should be as robust as possible and run as little extra software as possible.
[2] Benchmarks have shown high throughput and approximately 95% native performance.
[3] In order to host multiple operating systems on single instances of hardware, Intel and AMD made modifications to their CPUs. Typically seen as vt - although in /proc/cpuinfo you should have the vmx flag for Intel and svm flag for AMD.