Программа-распределитель
Гипервизор — программный слой, который позволяет запустить несколько независимых операционных систем на одном физическом компьютере. Он выдаёт каждой виртуальной машине долю процессорного времени, память, виртуальные диски и сетевые адаптеры, а также следит, чтобы гости не вмешивались друг в друга.
Для гостя всё выглядит как отдельный компьютер. О том, что под ним общая аппаратура, операционная система обычно не знает.
В облаках гипервизоры дополнены системой оркестрации, которая автоматически размещает машины по серверам, учитывая загрузку и требования клиентов.
Тип 1 и тип 2
Гипервизор первого типа устанавливается прямо на железо и служит основой системы. Примеры: VMware ESXi, Microsoft Hyper-V в серверном режиме, Xen. К этому же классу относят KVM, встроенный в ядро Linux. Такие решения применяют в дата-центрах и облаках, потому что они эффективны и надёжны.
Гипервизор второго типа работает как обычная программа внутри хостовой ОС, например VirtualBox или VMware Workstation. Он удобен на рабочем компьютере для тестов, но добавляет лишний слой и менее производителен.
Для настольного использования гипервизор второго типа удобен: он позволяет проверить неизвестную программу в отдельной виртуальной машине или запустить другую операционную систему без переразметки диска.
Как гость получает процессор
Современные процессоры имеют аппаратную поддержку виртуализации: Intel VT-x и AMD-V. Гостевой код выполняется непосредственно на процессоре, а гипервизор перехватывает только привилегированные операции. Поэтому потеря производительности невелика.
Оперативная память гостей отображается через таблицы страниц, а для ввода-вывода применяют паравиртуальные драйверы, такие как virtio, чтобы ускорить работу диска и сети. Эти драйверы знают, что работают в виртуальной среде, и общаются с гипервизором напрямую.
Загрузку виртуальных машин можно ограничивать, задавая лимиты: сколько ядер и какой объём памяти выдать, и допускать ли динамическое изменение этих значений на лету.
Практическое значение
Виртуализация позволяет плотнее загружать оборудование, быстро создавать копии систем, делать снимки состояния и переносить машины между серверами. На этом построены VPS и публичные облака. Изоляция позволяет размещать клиентов на одном железе, хотя и с общей физической основой, отчего ошибки гипервизора считаются особо серьёзными.
Контейнеры решают похожую задачу другим путём: они не эмулируют железо, а делят ядро. Различие подробно описано на странице про Docker.
Сегодня почти каждый пользователь косвенно работает с гипервизорами, поскольку большинство сайтов и сервисов запущено на виртуальных машинах.
Из-за нагрузки на память, сеть и диск число виртуальных машин на одном сервере ограничено, и планирование ёмкости — обязательная часть эксплуатации.
Заблуждения и проверка: Гипервизор
Заблуждение: виртуальная машина всегда заметно медленнее. Для вычислительных задач разница обычно небольшая, а для дискового и сетевого ввода-вывода она зависит от драйверов. Другое заблуждение — что вложенная виртуализация работает везде. Она требует включения на уровне хоста.
Проверить, включена ли аппаратная поддержка на Linux, можно поиском флагов vmx или svm в /proc/cpuinfo, а на Windows смотреть вкладку «Производительность» в диспетчере задач, где есть строка «Виртуализация». Она включается в настройках BIOS или UEFI.
Снимки, миграция и изоляция
Снимок фиксирует состояние диска и, при необходимости, памяти виртуальной машины, чтобы можно было вернуться к нему. Это удобно перед обновлением, но снимки не заменяют резервные копии: они лежат на том же хранилище и замедляют работу, если их накопилось много.
Живая миграция позволяет переместить работающую машину на другой физический сервер практически без остановки: память копируется поэтапно, а в финале происходит короткое переключение. Так администраторы обслуживают оборудование без простоя клиентов.
Изоляция обеспечивается тем, что гость не имеет прямого доступа к памяти соседей. Побег из виртуальной машины на хост — редкий, но серьёзный класс уязвимостей, поэтому своевременное обновление гипервизора критично.