15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
10.11.2023

Технология виртуализации KVM: архитектура, преимущества и практическое применение

Kernel-based Virtual Machine (KVM) — это решение полной виртуализации, встроенное непосредственно в ядро Linux в виде загружаемого модуля. Оно превращает само ядро Linux в гипервизор Type-1 (bare-metal), используя аппаратные расширения CPU — Intel VT-x или AMD-V — для выполнения гостевых рабочих нагрузок с производительностью, близкой к нативной, и строгой аппаратной изоляцией.

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

Как работает KVM: основная архитектура

Ядро Linux как гипервизор

Когда модуль kvm.ko (и специфичный для CPU модуль — kvm-intel.ko или kvm-amd.ko) загружается, ядро Linux получает возможности гипервизора, не заменяя и не обходя ОС. Ядро продолжает управлять планированием, памятью и драйверами устройств, но также получает возможность запускать изолированные гостевые среды — виртуальные машины (ВМ).

Каждая ВМ работает в защищённом контексте выполнения. Аппаратные расширения CPU обеспечивают разделение привилегий между ядром хоста (ring 0) и гостевым кодом, предотвращая прямой доступ любого гостя к памяти или аппаратному состоянию хоста или их повреждение.

QEMU: уровень эмуляции устройств

KVM обеспечивает виртуализацию CPU и памяти, но самостоятельно не эмулирует периферийное оборудование. Именно здесь в архитектуру входит QEMU (Quick Emulator). KVM и QEMU работают как тесно связанная пара:

  • KVM управляет виртуализацией CPU через аппаратные расширения и виртуализацией памяти через Extended Page Tables (EPT на Intel) или Nested Page Tables (NPT на AMD).
  • QEMU эмулирует виртуальные аппаратные устройства — сетевые карты, контроллеры хранилищ, USB-шины, адаптеры дисплея — и предоставляет интерфейс управления в пространстве пользователя для каждой ВМ.

Эта комбинация часто называется QEMU/KVM. Каждая ВМ отображается как стандартный процесс QEMU в таблице процессов хоста, что означает прямое применение нативной изоляции процессов Linux, cgroups и пространств имён для управления ресурсами ВМ.

VirtIO: паравиртуализированный ввод-вывод для максимальной пропускной способности

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

На практике ВМ, использующая сетевой интерфейс VirtIO (virtio-net), достигает значительно более высоких показателей пакетов в секунду и меньших задержек по сравнению с эмулируемым адаптером e1000. Тот же принцип применяется к блочному хранилищу (virtio-blk, virtio-scsi) и балансировке памяти (virtio-balloon).

Современные дистрибутивы Linux включают драйверы VirtIO по умолчанию. Гостевые системы Windows требуют пакета драйверов VirtIO Win, который поддерживается Red Hat и доступен бесплатно.

Управление памятью: KSM и Huge Pages

KVM интегрируется с двумя важными функциями управления памятью ядра Linux:

  • Kernel Same-page Merging (KSM): Ядро сканирует страницы памяти ВМ и объединяет идентичные страницы в единую страницу с копированием при записи. На хосте, запускающем множество похожих ВМ (например, с одинаковой базовой ОС), KSM может снизить общее потребление физической памяти на 20–40%, обеспечивая более высокую плотность ВМ.
  • Transparent Huge Pages (THP) и Hugetlbfs: Выделение гостевой памяти с использованием огромных страниц размером 2 МБ или 1 ГБ снижает нагрузку на TLB в CPU, улучшая производительность при работе с памятью. В производственных развёртываниях гостевая память часто закрепляется в hugetlbfs для предсказуемых задержек.

KVM vs. другие гипервизоры: техническое сравнение

ХарактеристикаKVMVMware ESXiHyper-VXen
Тип гипервизораType-1 (через ядро Linux)Type-1 (bare-metal)Type-1 (bare-metal)Type-1 (bare-metal)
ЛицензияОткрытый исходный код (GPL)Проприетарная (доступен бесплатный уровень)Проприетарная (входит в состав Windows Server)Открытый исходный код (GPL)
Виртуализация CPUIntel VT-x / AMD-VIntel VT-x / AMD-VIntel VT-x / AMD-VIntel VT-x / AMD-V
Паравиртуализированный ввод-выводVirtIOVMware PVSCSI / VMXNET3Hyper-V Synthetic AdaptersXen PV drivers
Живая миграцияДа (через virsh migrate)Да (vMotion)Да (Live Migration)Да
Переподписка памятиДа (KSM, ballooning)Да (TPS, ballooning)Да (Dynamic Memory)Да
Инструменты управленияlibvirt, virt-manager, Proxmox, oVirtvCenterSCVMM, Hyper-V ManagerXenCenter, XCP-ng
Поддержка гостевых ОСLinux, Windows, BSD, macOS (ограниченно)Linux, Windows, BSDLinux, WindowsLinux, Windows, BSD
Интеграция с облакомНативная (OpenStack, oVirt)VMware CloudAzureОграниченная
Накладные расходыОчень низкиеНизкиеНизкиеНизкие

Ключевые преимущества виртуализации KVM

Нативная интеграция с Linux и совместимость с инструментарием

Поскольку KVM является модулем ядра, а не отдельным программным стеком, он наследует всю экосистему Linux. Стандартные инструменты — systemd, cgroups v2, perf, ftrace, iptables/nftables, tc — работают непосредственно с процессами KVM и связанными с ними ресурсами. Это означает, что системный администратор, уже владеющий Linux, нуждается в минимальном дополнительном обучении для управления инфраструктурой на базе KVM.

Управление обычно осуществляется через libvirt — стабильный уровень API, абстрагирующий сложность KVM/QEMU. Инструменты virsh, virt-manager и virt-install предоставляют интерфейсы CLI и GUI. Платформы Proxmox VE и oVirt строят полноценное управление уровня датацентра поверх libvirt и KVM.

Характеристики производительности

Преимущество KVM в производительности обусловлено несколькими архитектурными решениями:

  • Аппаратно-ускоренное выполнение CPU: Гостевой код выполняется непосредственно на физическом CPU в режиме VMX non-root. Гипервизор перехватывает только привилегированные инструкции (VM exits), а не каждую инструкцию.
  • Прямой доступ к памяти: Физическая память гостя отображается с использованием EPT/NPT, что устраняет накладные расходы программных теневых таблиц страниц, присутствовавших в более старых подходах к виртуализации.
  • Путь ввода-вывода VirtIO: Как описано выше, паравиртуализированные драйверы устраняют накладные расходы эмуляции устройств для сети и хранилища.

Независимые тесты стабильно показывают, что KVM обеспечивает 95–99% производительности bare-metal CPU для вычислительно-интенсивных рабочих нагрузок, при этом производительность ввода-вывода приближается к уровню bare-metal при использовании VirtIO и правильных бэкендов хранилища (например, NVMe с io_uring).

Модель изоляции безопасности

KVM опирается на несколько уровней изоляции:

  • Аппаратные кольца привилегий: CPU обеспечивает разделение гостя и хоста на аппаратном уровне.
  • SELinux/AppArmor sVirt: Каждый процесс ВМ помечается уникальным контекстом SELinux, предотвращая доступ процесса QEMU одной ВМ к файлам памяти другой ВМ даже при эксплуатации уязвимости на уровне процесса.
  • Фильтрация Seccomp: Процессы QEMU могут быть изолированы с помощью seccomp для ограничения набора доступных системных вызовов, уменьшая поверхность атаки самого процесса гипервизора.

Эта многоуровневая модель безопасности делает KVM надёжной основой для многопользовательских хостинговых сред.

Живая миграция и высокая доступность

KVM поддерживает живую миграцию — перемещение работающей ВМ с одного физического хоста на другой без простоя. Процесс работает путём итеративного копирования изменённых страниц памяти на целевой хост, пока ВМ продолжает работать, с последующей краткой финальной синхронизацией и переключением. В сочетании с общим хранилищем (Ceph, NFS, iSCSI) или миграцией хранилища это обеспечивает:

  • Плановое обслуживание оборудования без прерывания сервиса
  • Балансировку нагрузки между физическими хостами
  • Автоматическое переключение при отказе в кластерах высокой доступности (с использованием Pacemaker/Corosync или Proxmox HA)

Гибкость в выборе гостевых операционных систем

KVM поддерживает любую операционную систему, способную работать на оборудовании x86-64, включая все дистрибутивы Linux, серверные и настольные версии Windows, FreeBSD, OpenBSD и другие. С добавлением прошивки OVMF UEFI гостевые системы KVM могут загружаться в режиме UEFI с поддержкой Secure Boot, что является требованием для определённых развёртываний Windows 11 и защищённых конфигураций Linux.

Реальные сценарии использования и граничные случаи

Облачная инфраструктура

KVM является гипервизорной основой OpenStack — доминирующей платформы облака с открытым исходным кодом — и используется крупными облачными провайдерами. Когда вы создаёте экземпляр VPS Хостинга, существует высокая вероятность того, что он работает на стеке на базе KVM, учитывая доминирование KVM в индустрии Linux-хостинга.

Проброс GPU для высокопроизводительных рабочих нагрузок

Технически продвинутым, но всё более распространённым сценарием использования является проброс PCI (с использованием VFIO — Virtual Function I/O). Это позволяет назначить физический GPU исключительно одной ВМ, предоставляя ей прямой, неопосредованный доступ к аппаратному обеспечению GPU. В результате достигается производительность GPU, близкая к нативной, внутри ВМ, что критически важно для:

  • Машинного обучения и обучения моделей ИИ
  • Рендеринга с ускорением GPU
  • Научных вычислительных рабочих нагрузок

Это архитектура, лежащая в основе услуг GPU Хостинга, где выделенные ресурсы GPU предоставляются арендаторам через KVM с проброcом VFIO, а не через программную эмуляцию.

Вложенная виртуализация

KVM поддерживает вложенную виртуализацию — запуск гипервизора KVM внутри гостевой системы KVM. Это включается путём передачи флагов CPU vmx (Intel) или svm (AMD) гостевой системе. Вложенная виртуализация полезна для:

  • Конвейеров CI/CD, которым необходимо запускать ВМ для тестирования
  • Учебных сред для администраторов виртуализации
  • Запуска Kubernetes с изоляцией узлов на основе ВМ (например, Kata Containers)

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

Виртуализация выделенных серверов

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

Панели управления веб-хостингом на KVM

Экземпляры KVM VPS являются стандартной основой для хостинга на базе панелей управления. VPS с cPanel работает на гостевой системе KVM, обеспечивающей изоляцию на уровне ОС, требуемую моделью безопасности cPanel, тогда как уровень гипервизора гарантирует соблюдение ограничений ресурсов (CPU, RAM, дисковый ввод-вывод) на аппаратном уровне, а не только с помощью средств управления на уровне ОС.

Распространённые проблемы и операционные соображения

Ограничения переподписки CPU: KVM позволяет количеству vCPU превышать число физических потоков CPU (переподписка). Хотя это хорошо работает для смешанных рабочих нагрузок с низким одновременным спросом на CPU, агрессивные коэффициенты переподписки (выше 4:1) для CPU-интенсивных рабочих нагрузок вызывают значительную конкуренцию при планировании и всплески задержек. Отслеживайте steal time в метриках гостевой ОС как индикатор.

Учёт топологии NUMA: На многосокетных серверах несоответствие выделения памяти ВМ и vCPU одному узлу NUMA приводит к штрафам за межузловой доступ к памяти NUMA. Используйте numactl и конфигурацию <numatune> libvirt для привязки ВМ к конкретным узлам NUMA.

Выбор бэкенда хранилища: Выбор бэкенда хранилища существенно влияет на производительность ввода-вывода ВМ. Образы raw-дисков на NVMe с io_uring и cache=none обеспечивают наилучшую производительность. Образы QCOW2 с настройками по умолчанию вносят накладные расходы копирования при записи; используйте preallocation=metadata или preallocation=full для рабочих нагрузок, чувствительных к задержкам.

Сетевой мост vs. macvtap: Для простых конфигураций сетевой мост Linux прост в использовании. Для сценариев с высокой пропускной способностью macvtap в режиме VEPA или bridge, либо SR-IOV с назначением VF, могут значительно увеличить сетевую пропускную способность и снизить нагрузку на CPU хоста.

Согласованность снимков: Внутренние снимки QCOW2 не гарантируют состояние согласованности приложений. Для баз данных и других приложений с сохранением состояния используйте приостановку на уровне гостя через QEMU Guest Agent (qemu-guest-agent) перед созданием снимков для обеспечения согласованности файловой системы и приложений.

KVM в контексте управляемого хостинга

Для команд, которым нужна мощь KVM без необходимости непосредственного управления уровнем гипервизора, управляемые хостинг-провайдеры абстрагируют эту сложность. Среда Панелей управления VPS, построенная на KVM, предоставляет пользователям root-доступ к полностью изолированной гостевой системе, тогда как провайдер прозрачно обеспечивает обслуживание гипервизора, устранение аппаратных сбоев и живые миграции.

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

Контрольный список технических решений

Используйте этот контрольный список, чтобы определить, является ли KVM подходящим уровнем виртуализации для вашей среды:

  • Тип рабочей нагрузки: KVM оптимален для серверных рабочих нагрузок общего назначения, баз данных, веб-приложений и контейнеризованных сред. Для масштабной виртуализации рабочих столов оцените, добавляют ли ценность специализированные VDI-платформы.
  • ОС хоста: KVM требует хоста на Linux. Если ваша инфраструктура ориентирована на Windows, Hyper-V может снизить операционные трудности.
  • Требования к производительности: Если вам нужно более 95% производительности bare-metal CPU, убедитесь, что в гостевых системах установлены драйверы VirtIO и настроены привязка CPU и выравнивание NUMA.
  • Рабочие нагрузки GPU: Если арендаторам требуется выделенный доступ к GPU, убедитесь, что IOMMU включён в BIOS/UEFI и что проброс VFIO поддерживается вашим оборудованием.
  • Инструменты управления: Для одиночных хостов или небольших развёртываний достаточно virt-manager или Cockpit с плагином Machines. Для многохостовых кластеров рассмотрите Proxmox VE или oVirt.
  • Бэкенд хранилища: Предпочитайте raw-образы или QCOW2 с preallocation=full на NVMe для рабочих нагрузок, чувствительных к задержкам. Используйте Ceph RBD для распределённого, высокодоступного хранилища.
  • Уровень безопасности: Включите sVirt (SELinux/AppArmor) и изоляцию seccomp для процессов QEMU в любой многопользовательской среде.
  • Вложенная виртуализация: Включайте только при необходимости; она добавляет накладные расходы и увеличивает поверхность атаки.

Часто задаваемые вопросы

В чём разница между KVM и контейнером, таким как Docker?

KVM виртуализирует полное аппаратное обеспечение, предоставляя каждой ВМ собственное ядро, пространство памяти и виртуальные устройства. Контейнеры Docker совместно используют ядро хоста и применяют пространства имён Linux и cgroups для изоляции. KVM обеспечивает более строгую изоляцию и поддерживает любую гостевую ОС; контейнеры предлагают меньшие накладные расходы и более быстрый запуск для рабочих нагрузок, которые могут совместно использовать ядро.

Требует ли KVM определённых функций CPU для работы?

Да. KVM требует аппаратных расширений виртуализации — Intel VT-x или AMD-V — которые должны быть включены в BIOS/UEFI системы. Без этих расширений KVM не загрузится. Вы можете проверить поддержку, проверив наличие флагов vmx (Intel) или svm (AMD) в /proc/cpuinfo.

Может ли KVM запускать виртуальные машины Windows?

Да. KVM полностью поддерживает гостевые системы Windows от Windows XP до Windows Server 2022 и Windows 11. Для оптимальной производительности установите пакет драйверов VirtIO Win внутри гостевой системы Windows для включения паравиртуализированных сетевых драйверов и драйверов хранилища. Для Windows 11 требуется загрузка UEFI с OVMF.

Каковы накладные расходы на производительность KVM по сравнению с bare-metal?

Для CPU-интенсивных рабочих нагрузок накладные расходы KVM обычно составляют 1–5% при активных аппаратных расширениях виртуализации и использовании драйверов VirtIO. Рабочие нагрузки с интенсивным вводом-выводом могут иметь несколько более высокие накладные расходы в зависимости от конфигурации бэкенда хранилища, однако правильно настроенные среды KVM стабильно достигают 95–99% пропускной способности bare-metal.

Как KVM обеспечивает изоляцию ВМ в многопользовательской среде?

KVM обеспечивает изоляцию на трёх уровнях: аппаратном (кольца привилегий CPU и IOMMU для изоляции устройств), ядра (каждая ВМ является отдельным процессом с собственными отображениями памяти) и фреймворка безопасности (sVirt назначает уникальные метки SELinux каждому процессу ВМ и связанным с ним образам дисков, предотвращая межвиртуальный доступ даже в случае компрометации процесса QEMU).

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать