Программная виртуализация — метод создания виртуальных машин, при котором гипервизор полностью эмулирует физическое оборудование в программном коде. Гостевая ОС запускается как если бы работала на реальном железе, не зная о виртуализации. Гипервизор перехватывает все привилегированные инструкции (ring 0) и выполняет их вместо гостевой ОС, транслируя в безопасные вызовы. Это принципиально отличается от аппаратной виртуализации, использующей расширения CPU (Intel VT-x, AMD-V).
Как работает
Ключевая техника программной виртуализации — бинарная трансляция (binary translation). Гипервизор динамически перекомпилирует машинный код гостевой ОС: непривилегированные инструкции выполняются напрямую, привилегированные — заменяются безопасными эквивалентами. VMware использовала эту технику до 2006 года, до повсеместного распространения Intel VT-x.
Альтернативный подход — паравиртуализация: гостевая ОС модифицируется и знает о виртуализации, используя специальный API (hypercalls) для взаимодействия с гипервизором. Xen и ранние версии KVM применяли паравиртуализацию для дисков и сети (virtio-драйверы) даже при наличии аппаратной виртуализации CPU.
QEMU — наиболее известный программный эмулятор: он может эмулировать x86, ARM, MIPS, RISC-V и другие архитектуры полностью программно, без аппаратной поддержки. Это позволяет запускать ARM-ОС на x86-хосте. В связке с KVM: KVM использует аппаратную виртуализацию для CPU, а QEMU — для эмуляции устройств (диски, сеть, USB).
История
Первые работы по виртуализации появились в IBM в 1960-х годах для мейнфреймов. Виртуализация x86-архитектуры через программную эмуляцию была реализована VMware (основана в 1998 году) — компания разработала технику бинарной трансляции для x86, который изначально не поддерживал виртуализацию. Intel анонсировала VT-x в 2005 году (Pentium 4, Prescott), AMD — AMD-V в том же году. К 2006 году аппаратная виртуализация стала стандартом, и роль чистой программной эмуляции снизилась до нишевых сценариев (тестирование разных архитектур).
Виды программной виртуализации
- Полная эмуляция — QEMU без KVM: эмулирует всё оборудование, медленно, но работает на любом процессоре.
- Бинарная трансляция — VMware Workstation (до VT-x): динамическая перекомпиляция привилегированных инструкций.
- Паравиртуализация — Xen PV, KVM с virtio: гостевая ОС знает о виртуализации, использует оптимизированные драйверы.
На что обращать внимание
Программная виртуализация значительно медленнее аппаратной: накладные расходы достигают 30–50% для CPU-интенсивных задач. В продакшн-хостинге используется только аппаратная виртуализация (KVM, VMware ESXi). Программная нужна для: кроссплатформенного тестирования, эмуляции встраиваемых систем, анализа вредоносного ПО в изолированной среде.
Типичные ошибки и ограничения
Программную виртуализацию часто путают с паравиртуализацией. Паравиртуализация — это модифицированная гостевая ОС с hypercall-интерфейсом, она эффективнее программной эмуляции (накладные расходы 5–15%). Полная программная виртуализация (QEMU без KVM) несёт накладные расходы 30–50% для CPU-задач. Ещё одна ошибка — запуск QEMU без аппаратного ускорения KVM: убедитесь, что процессор поддерживает Intel VT-x или AMD-V и что модуль kvm_intel/kvm_amd загружен (lsmod | grep kvm). Без этого производительность ВМ будет неприемлемой для любых задач.