Определение простыми словами
Полная виртуализация (Full Virtualization) — технология, при которой гипервизор эмулирует полный набор аппаратных ресурсов: процессор, память, диски, сетевые адаптеры. Гостевая операционная система не знает, что работает в виртуальной среде, и не требует никаких изменений своего ядра или драйверов. Это принципиальное отличие от паравиртуализации, где гостевая ОС адаптирована для работы с гипервизором.
Современная полная виртуализация опирается на аппаратные расширения процессора — Intel VT-x (для процессоров Intel) и AMD-V (для AMD). Без этих расширений гипервизор вынужден перехватывать и эмулировать привилегированные инструкции программно, что даёт значительные потери производительности. С аппаратной поддержкой накладные расходы минимальны — обычно 2–5% для CPU-нагрузок.
Сравнение
| Характеристика | Полная виртуализация | Паравиртуализация | Контейнеризация |
|---|---|---|---|
| Модификация гостевой ОС | Не требуется | Требуется (патч ядра) | Не требуется |
| Изоляция | Полная (своё ядро) | Полная (своё ядро) | Частичная (общее ядро хоста) |
| Производительность I/O | Высокая (с virtio) | Высокая | Максимальная (нативная) |
| Поддержка ОС | Любая x86/x86-64 | Только адаптированные | Только Linux-совместимые |
| Примеры | KVM, VMware ESXi, Hyper-V | Xen (HVM off), старый OpenVZ | Docker, LXC |
Кейсы использования
- Запуск Windows-сервера на Linux-хосте — гостевая ОС не требует изменений, подходит для лицензионных систем.
- Хостинг VPS/VDS — провайдеры предоставляют клиентам изолированные виртуальные машины с гарантированными ресурсами и полным root-доступом.
- Тестирование Legacy-систем — запуск устаревших ОС (Windows XP, CentOS 6) без модификации на современном железе.
- Dev/staging-окружения — воспроизведение продакшн-среды с точным соответствием ОС и конфигурации.
- PCI DSS и compliance-окружения — жёсткая изоляция между арендаторами через отдельные ядра ОС.
Негативный пример: Развёртывание 500 микросервисов на отдельных полностью виртуализированных ВМ — избыточно по потреблению памяти и времени старта. Для таких сценариев эффективнее контейнеры (Docker, Kubernetes), где накладные расходы на изоляцию минимальны.
Технические детали
Ключевой механизм полной виртуализации — перехват привилегированных инструкций (trap-and-emulate). При включённых аппаратных расширениях процессор переключается между режимами VMX root (гипервизор) и VMX non-root (гостевая ОС) через VM exit/entry. Типичная конфигурация KVM с QEMU:
apt install qemu-kvm libvirt-daemon-system
virt-install --name myvm --ram 2048 --vcpus 2 --disk size=20 --cdrom /path/to/ubuntu.iso --os-variant ubuntu22.04
virsh list --all
virsh start myvm
virsh console myvm
Для проверки поддержки аппаратной виртуализации на хосте:
grep -Ec '(vmx|svm)' /proc/cpuinfo
lscpu | grep Virtualization
kvm-ok
Производительность дискового I/O существенно возрастает при использовании драйверов virtio вместо эмулируемых IDE/SCSI. Для сетевых интерфейсов аналогично — virtio-net даёт пропускную способность, близкую к физической, с задержками от 50 мкс против 200+ мкс у эмулируемого e1000.
🔥 Где это применяется
Частые вопросы
Чем полная виртуализация отличается от паравиртуализации?
При полной виртуализации гостевая ОС работает без изменений — гипервизор эмулирует реальное железо. Паравиртуализация требует модификации ядра гостевой ОС для прямого взаимодействия с гипервизором через специальный API (гипервызовы). Это даёт паравиртуализации чуть меньшие накладные расходы, но ограничивает список поддерживаемых ОС.
Нужна ли аппаратная поддержка (VT-x/AMD-V) для полной виртуализации?
Технически нет — исторически использовалась программная эмуляция (binary translation). Однако без VT-x или AMD-V производительность падает в 5–20 раз. Все современные серверные процессоры поддерживают эти расширения, поэтому на практике полная виртуализация всегда работает с аппаратным ускорением.
Можно ли запустить Windows внутри Linux-хоста через полную виртуализацию?
Да, это один из классических сценариев. KVM+QEMU на Linux-хосте запускает Windows как гостевую ОС без каких-либо изменений установочного образа. При использовании драйверов VirtIO и агента QEMU Guest Agent производительность сопоставима с физическим сервером.
В чём разница между полной виртуализацией и контейнерами?
Виртуальные машины с полной виртуализацией имеют собственное ядро ОС и полную аппаратную изоляцию — это надёжнее с точки зрения безопасности. Контейнеры (Docker, LXC) используют ядро хоста, потребляют меньше памяти и стартуют за миллисекунды, но изоляция слабее. Для мультиарендных сред и compliance-требований предпочтительнее ВМ.