Таблица снизу это обзор текущих систем виртуализации с позиции того, насколько большую часть хост системы виртуальные машины используют напрямую:
Матрешка виртуализации ========================================================================================== Используется Название Примеры: совместно с хостом ========================================================================================== ничего Эмуляция QEMU, Boсsh ------------------------------------------------------------------------------------------ CPU Виртуализация KVM, VmWare, XEN, Hyper-V ------------------------------------------------------------------------------------------ Аппаратура Intel VT-d, SR-IOV Может использоваться совместно с системой виртуализации (kvm) ------------------------------------------------------------------------------------------ Драйвера Паравиртуализация XEN, VirtIO, VMWare tools ------------------------------------------------------------------------------------------ Ядро OS Контейнеры LXC, Solaris Zones, OpenVZ, Linux VServer ==========================================================================================
В первой графе - слои системы "компьютер + ОС" - чем ниже, тем более высокий уровень (что-то типа уровней ISO для сетевого стека ). Средняя графа - название модели виртуализации. Третья графа - типичные примеры. Чем ниже, тем больше компонентов гостевые системы используют от хост-системы напрямую, тем меньше нагрузка на гипервизор и тем выше скорость работы.
Я немного расскажу о контейнерах вообще и LXC (LinuX Containers) в частности. Контейнеры (или виртуализация уровня операционной системы)- это группы процессов, изолированные от остальной системы, возможно с наложенными ограничениями, и имеющие доступ только к некоторой части ресурсов. Процессы из контейнера "видят" и могут напрямую взаимодействовать только с процессами из того же контейнера, им доступна только часть аппаратуры, а корень файловой системы контейнера с помощью chroot сдвинут в глубь файловой системы хоста (например, в /var/lib/lxc/my_container_1). Виртуализация всех необходимых подсистем ядра (таблицы монтирования, PID, маршруты IP, etc) позволяет контейнеру выглядеть как "нормальная" виртуалка.