There are many virtual machine software out there. Even some are included into mainline Linux.
What differentiates them, and what criteria should one ponder while choosing one?
|
There are many virtual machine software out there. Even some are included into mainline Linux. What differentiates them, and what criteria should one ponder while choosing one? |
|||
|
|
|
The more professional tools, e.g. VirtualBox (aka xVM), and VMWare support multiple snapshots, and "thin" cloning. VMWare additionally has some limited 3D acceleration, integration with Eclipse debugging (lets you debug applications inside the VM from outside the VM), virtual networking features, multimonitor support, and record/replay functionality (useful for debugging concurrency problems -- records on what core and in what sequence any instructions execute). VirtualBox and the Kernel Virtual Machine are much easier to get working because you don't have to compile a kernel driver. They're also both free, while VMWare costs ~$190. The KVM is completely open source, while only some parts of VirtualBox are. In my experience, performance in the various virtualization tools has been about the same everywhere, with a slight edge to VirtualBox and VMWare in comparison to the KVM. Your mileage may vary depending on your hardware and system configuration. Finally, if you're thinking of virtualizing a bunch of servers, consider a hypervisor based OS as your base rather than Linux, such as VMWare's ESXi, Microsoft's HyperV, or Xen. These generally offer things like live migration, memory sharing, and fault tolerance, and have less overhead. However, they generally can't be used from the computer on which they're running, instead relying on remote managment tools, such as vSphere, or System Center. All three of these hypervisors are free. VMWare charges some $3k to access all the nice features though. Microsoft's and Xen's solutions are fully featured in the free product. (Microsoft's solution doens't work very well unless you have Active Directory already deployed though) |
|||||||||||||||||
|
|
Here are a few obvious criteria I consider, from a lay standpoint. Disclaimer: I don't really know anything about virtual machines, I just use them. I have some experience using Xen, VirtualBox, Linux Containers, VMware, and Linux-Vserver. VMware is proprietary, the others are free software. All of these require special kernel support. Per Joe Brockmeier's helpful article there are roughly two different of virtualization. One where there is a full fledged guest OS running on top of your host OS. This is called Of the ones I mentioned above, Xen, VirtualBox, and VMWare are Obviously, there are trade-offs in this. The main difference is that for So, some specific issues to consider, referring back to these two types as possible. First (assuming you are running on Linux, as the question says) is your desired guest a Linux distribution or some other OS? If the former, Does the software in question require the kernel to be patched or is it natively supported by the kernel? If it requires patching, that is a major downside, as it means that the patches have to be kept in sync with the changing kernel. If the functionality is already present in the kernel, that this is not an issue. Of course, some virtual machines don't require kernel support and run in userspace. There are relatively few virtualization machines that require special kernel support and have that support in the mainline kernel. The only two I know of are Linux Containers ( The size of the user community. This is mostly an issue when it requires a patched kernel. In that case, the manpower to keep this project going outside the kernel, and make sure everything keeps working correctly may not exist. Is the virtual machine software proprietary or free software? If it is proprietary it will never be included in the Linux kernel. Of course, depending on your philosophy, you may find one preferable over the other for ideological reasons. Virtualization performance. How fast is it? Generally Does it allow memory to be shared with other processes on the system, or does it require dedicated memory? In my opinion, allowing memory to be shared is nice because it means you don't have to chop this memory off from the rest of the system. If you can share memory, you can run more virtual machines than if you can't. By definition, The level of isolation from the rest of the system. Some virtual machines differ in this. Ideally you don't want the virtual machine knowing about or interacting with the host system or other guest systems in any way. By definition, |
|||||||||||
|