One way to break down how people use virtualization
Virtualization is such a general technology that even when people are using it for whole machine virtualization there are any number of different ways that they can use it. Today I want to present a number of usage dimensions for this (when I started I thought it was going to be a simple four-quadrant breakdown, but the more I thought the more dimensions showed up).
So, here's some axes that you can chart virtualization usage along:
- when you power up VMs, do you leave them running for a long time or
only run them for relatively short periods and then shut them down
- are running VMs totally headless, in need of only basic text-mode
interactions with the console, or do you need full console graphics
support (perhaps even with 3d acceleration)?
(The former is typical of long-running servers, the latter is typical of virtualized desktops.)
- regardless of how long they run when powered up, are your VM images
long-lived or do you use them and then throw them away?
(Long-running VMs are necessarily long-lived, but short running ones can still be long-lived too.)
- is the basic setup for a new VM more or less constant (perhaps to
the extreme of always starting with a cloned image) or highly
variable? (Clearly there's a continuum.)
- is VM management going to be automated or will it be done by hand
at small scale?
- how much does interacting with a VM need to be like interacting with real hardware?
(Some of these axes will be more or less forced if you operate at large scale with a lot of VMs.)
One of the reasons that thinking about this can be important is that different virtualization systems have different strengths and weaknesses in these areas. Understanding your own usage means understanding what's important to you and thus what virtualization systems are a good fit for you and what ones are a terrible fit.
(For one extreme hypothetical example, if your goal is small scale virtualized desktops it would be a terrible idea to pick a package that's aimed at headless ephemeral servers, full of support for things like fast cloning and rollback, command line management, mass starts and shutdowns, and with console access as an afterthought.)