Виртуализация: типы, принципы работы и особенности

Виртуализация: типы, принципы работы и особенности Полезное

Виртуализация — это технология, которая делит один физический компьютер на несколько изолированных виртуальных сред, работающих так, будто каждая — отдельная машина со своим процессором, памятью и диском. Распределяет ресурсы железа между этими средами и держит их в изоляции особая программа — гипервизор.

Ниже разберу два типа гипервизоров (type-1 и type-2), принцип работы виртуальной машины, роль аппаратной поддержки Intel VT-x и AMD-V, а также ключевое отличие виртуальных машин от контейнеров. Команды-примеры даны как есть: их вывод зависит от вашей системы, это отмечено рядом.

Гипервизор и два его типа

Гипервизор — это слой, который создает виртуальные машины и распределяет между ними ресурсы физического сервера: такты процессора, оперативную память, диск, сеть. Он же не дает одной виртуальной машине залезть в память или данные соседней.

Гипервизоры делят на два типа по классификации, которую еще в 1970-х предложил Роберт Голдберг. Различие — в том, на что опирается гипервизор: прямо на железо или на уже установленную операционную систему.

Признак Type-1 (аппаратный, bare-metal) Type-2 (хостовый, hosted)
Где работает прямо на железе поверх обычной ОС (хоста)
Роль сам является минимальной ОС обычное приложение внутри хоста
Накладные расходы ниже, ресурсы идут гостям выше: часть съедает хостовая ОС
Где применяют серверы, дата-центры, облака десктоп, тесты, учеба
Примеры VMware ESXi, Microsoft Hyper-V, Xen, KVM VirtualBox, VMware Workstation, Parallels Desktop

Type-1 запускается первым, до всякой операционной системы, и сам выделяет ресурсы гостям — поэтому он быстрее и его выбирают для серверов. Type-2 удобнее на своем компьютере: поставил как обычную программу и запустил вторую ОС в окне.

Отдельно стоит KVM. Это модуль ядра Linux, который превращает уже работающий Linux в гипервизор. Формально хост есть, но гости обращаются к железу почти напрямую, поэтому KVM обычно относят к type-1, а не к type-2 — это пограничный случай, где строгая классификация Голдберга размывается.

Как работает виртуальная машина

Виртуальная машина (ВМ) — это набор файлов и настроек, который гипервизор подает гостевой операционной системе как настоящий компьютер. Гость видит виртуальный процессор, виртуальную память, виртуальный диск (обычно это один большой файл-образ на хосте) и виртуальную сетевую карту.

Ключевой принцип — перехват привилегированных команд. Обычные вычисления гостя идут прямо на реальном процессоре, практически без потерь. Но как только гостевая ОС пытается выполнить команду, которая управляет железом напрямую (переключить режим процессора, обратиться к устройству), процессор передает управление гипервизору. Тот подставляет виртуальное поведение вместо реального железа и возвращает управление гостю.

Из этого устройства вытекают удобные свойства:

  • Снимки (snapshot): состояние ВМ можно заморозить и вернуться к нему после неудачного обновления или теста.
  • Образы и шаблоны: настроенную ВМ сохраняют один раз и разворачивают копии на разном железе.
  • Живая миграция: работающую ВМ переносят на другой физический сервер без остановки.
  • Изоляция: сбой или взлом одной ВМ не задевает соседние на том же сервере.

При этом изоляция не абсолютна. Если скомпрометирован сам гипервизор или хостовая ОС под ним (для type-2), под угрозой все запущенные на них ВМ — это цена общего фундамента.

Аппаратная поддержка: Intel VT-x и AMD-V

Чтобы перехват команд был быстрым, его перенесли в процессор. Аппаратная виртуализация — это набор инструкций CPU, которые позволяют гипервизору работать без медленной программной эмуляции.

Две основные технологии: Intel VT-x и AMD-V (в спецификациях AMD она же SVM). Они добавляют процессору специальный режим для гостей, из которого вызов привилегированной команды сам передает управление гипервизору.

Рядом работают смежные механизмы:

  • Виртуализация памяти: Intel EPT и AMD NPT (RVI) переводят гостевые адреса в реальные аппаратно, без участия гипервизора на каждом шаге.
  • Виртуализация ввода-вывода: Intel VT-d и AMD-Vi (IOMMU) позволяют пробросить в ВМ реальное устройство, например видеокарту, напрямую.

По тому, насколько гость знает о виртуализации, различают два подхода, а под ними лежит аппаратный слой, на который они опираются на современном железе:

  • Полная виртуализация: гостевая ОС не подозревает, что виртуализирована; сегодня это опирается на VT-x или AMD-V.
  • Паравиртуализация: гость знает про гипервизор и общается с ним через специальные интерфейсы (драйверы virtio, режим Xen PV) — это быстрее для диска и сети.
  • Аппаратная поддержка (отдельный уровень, а не третий вариант выбора): тот самый слой инструкций CPU, на котором держатся оба подхода на современном железе.

Без включенной поддержки в UEFI/BIOS (пункты Intel VT-x или SVM Mode) type-1 гипервизоры и часть type-2 либо не запустятся, либо будут работать через медленную эмуляцию.

Виртуальные машины и контейнеры: в чем разница

Контейнеры часто называют «легкими виртуальными машинами», но механизм у них другой, и путать их не стоит. Виртуальная машина виртуализирует железо и несет полноценную гостевую ОС со своим ядром. Контейнер виртуализирует операционную систему: процессы изолированы друг от друга, но ядро у них общее с хостом.

Признак Виртуальная машина Контейнер
Что изолирует целую ОС со своим ядром процессы; ядро общее с хостом
Размер образа гигабайты обычно мегабайты
Время старта десятки секунд доли секунды
Изоляция сильнее (отдельное ядро) слабее (общее ядро)
Какой гость любая ОС, даже Windows на Linux только под ядро хоста
Инструменты VMware, Hyper-V, KVM Docker, Podman, LXC

Отсюда практический выбор. Нужна другая ОС целиком, максимальная изоляция или запуск Windows на Linux — берут виртуальную машину. Нужно быстро и плотно упаковать много одинаковых сервисов одной платформы — берут контейнеры. На практике их часто совмещают: контейнеры запускают внутри виртуальных машин в облаке, получая и плотность, и изоляцию.

Важная оговорка про ядро: контейнер работает только под ядро хоста. Поэтому Docker на Windows и macOS под капотом поднимает небольшую Linux-ВМ и уже в ней запускает Linux-контейнеры — без виртуализации это не работает.

Виды виртуализации по задаче

Виртуализируют не только серверы целиком. Ниже — ориентир по задачам, а не полный каталог.

Что виртуализируют Зачем Примеры инструментов
Серверы несколько ВМ на одном железе, консолидация нагрузки VMware vSphere, Proxmox VE
Сеть виртуальные сети и коммутаторы поверх физической (SDN) VLAN, Open vSwitch
Хранилище набор физических дисков как единый гибкий пул LVM, программно-определяемое хранилище (SDS)
Рабочие столы (VDI) ОС пользователя крутится на сервере, доступ по сети Citrix Virtual Apps, VMware Horizon

Общий смысл во всех случаях один: отделить логический ресурс от конкретного железа, чтобы его было проще делить, переносить и масштабировать.

Как проверить поддержку виртуализации

Прежде чем поднимать ВМ, стоит убедиться, что процессор и система готовы. Команды ниже — справочные; вывод зависит от вашего железа и ОС, универсального результата тут нет.

Система Команда Что покажет
Linux grep -E -c '(vmx\|svm)' /proc/cpuinfo число ядер с поддержкой; 0 — нет или выключено в UEFI
Linux lscpu \| grep Virtualization тип поддержки: VT-x или AMD-V
Linux systemd-detect-virt запущена ли система внутри ВМ и под каким гипервизором
macOS sysctl kern.hv_support 1 — доступен Hypervisor.framework

Флаг vmx в выводе означает Intel VT-x, флаг svm — AMD-V. Если поддержка есть в процессоре, но команда вернула 0, ее почти наверняка нужно включить в UEFI/BIOS — искать пункт Intel Virtualization Technology (VT-x) или SVM Mode.

Выводы

  • Виртуализация делит одно физическое устройство на изолированные виртуальные среды, а распределяет ресурсы и держит изоляцию гипервизор.
  • Гипервизоры бывают двух типов: type-1 работает прямо на железе (серверы, облака), type-2 — поверх обычной ОС (десктоп, тесты); KVM — пограничный случай, его относят к type-1.
  • Быстрая работа держится на аппаратной поддержке процессора — Intel VT-x и AMD-V, плюс аппаратной виртуализации памяти (EPT/NPT) и ввода-вывода (VT-d/AMD-Vi).
  • Виртуальная машина несет целую гостевую ОС со своим ядром, а контейнер делит ядро с хостом: ВМ — сильнее изоляция, контейнер — меньше вес и быстрее старт.

Где применяется и связь с практикой

Виртуализация — это фундамент современной инфраструктуры. На ней стоят облака (вы арендуете не сервер, а виртуальную машину), тестовые стенды, изолированные среды для сборки и почти весь мир контейнеров. Инженер, который поднимает сервисы, настраивает CI/CD и катит их в облако, работает с виртуальными машинами и контейнерами каждый день.

Освойте тему на практике

Если хочется освоить это на практике — от гипервизоров и образов до контейнеров и автоматизации развертывания — посмотрите курс DevOps: практики и инструменты. Понять формат и уровень до старта помогают бесплатные открытые уроки Otus — живые занятия с преподавателями.

Смежные темы: Windows и другие ОС: принципы работы, Знакомство с Linux: установка и особенности, Процессоры: устройство и принципы работы.

FAQ

Сильно ли виртуализация замедляет работу? При аппаратной поддержке (VT-x, AMD-V) потери на вычислениях невелики — обычно единицы процентов. Заметнее они там, где много обращений к диску и сети или когда поддержка выключена в UEFI и гипервизор эмулирует железо программно.

Можно ли запустить виртуальную машину внутри виртуальной машины? Да, это называется вложенная (nested) виртуализация. Она требует поддержки со стороны гипервизора и процессора и работает медленнее обычной, поэтому применяется в основном для тестов и учебы.

Зачем виртуализация нужна для Docker на Windows и macOS? Контейнеры делят ядро с хостом, а образы обычно рассчитаны на ядро Linux. Поэтому Docker Desktop поднимает небольшую Linux-ВМ и запускает контейнеры уже в ней; на Linux-хосте такая прослойка не нужна.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)