Открыть сервис

Kernel-based Virtual Machine

Kernel-based Virtual Machine (KVM) — это модуль операционной системы Linux, реализующий функции гипервизора (монитора виртуальных машин) и позволяющий запускать изолированные виртуальные машины (гостевые ОС) с использованием аппаратных средств виртуализации процессоров архитектуры x86, поддерживающих технологии Intel VT (VMX) и AMD-V (SVM). KVM является частью основного ядра Linux с 2007 года и представляет собой open-source решение, распространяемое под лицензией GPL v2.

История

Разработка KVM была начата израильской компанией Qumranet в 2006 году. Первый публичный анонс состоялся в октябре 2006 года, а в феврале 2007 года код модуля был включён в основную ветку ядра Linux (версия 2.6.20). В 2008 году компания Red Hat приобрела Qumranet, после чего KVM стал одним из ключевых компонентов стратегии Red Hat в области виртуализации. С этого момента развитие KVM осуществляется при активном участии сообщества разработчиков ядра Linux и компаний, таких как Red Hat, IBM, Google, Oracle и Canonical.

В 2008 году KVM был принят в качестве основного гипервизора для платформы Red Hat Enterprise Virtualization (RHEV). В 2012 году Red Hat объявила о прекращении поддержки собственного гипервизора Xen в пользу KVM. С тех пор KVM является стандартным гипервизором в дистрибутивах Red Hat Enterprise Linux, CentOS, Fedora, Ubuntu, Debian и многих других.

Архитектура и принцип работы

KVM не является полноценным гипервизором в классическом понимании, а представляет собой модуль ядра, который превращает Linux в гипервизор первого типа (bare-metal). В отличие от гипервизоров второго типа, работающих поверх операционной системы, KVM использует ядро Linux в качестве хостовой ОС, что позволяет использовать все возможности ядра — управление памятью, планировщик процессов, драйверы устройств, сетевой стек и файловые системы.

Компоненты

Архитектура KVM включает несколько ключевых компонентов:

  • Модуль ядра kvm.ko — основной модуль, реализующий интерфейс управления виртуализацией через специальный символьный файл /dev/kvm. Он предоставляет API для создания виртуальных машин, управления памятью и обработки прерываний.
  • Модуль kvm-intel.ko или kvm-amd.ko — платформозависимые модули, реализующие поддержку аппаратных расширений Intel VT и AMD-V соответственно.
  • Пользовательское пространство — управление виртуальными машинами осуществляется через эмулятор QEMU (Quick Emulator), который работает в пользовательском пространстве. QEMU эмулирует устройства (диски, сетевые карты, видеокарты, контроллеры USB) и обрабатывает ввод-вывод гостевой ОС.

Процесс создания виртуальной машины

  1. Пользователь запускает процесс QEMU, который открывает файл /dev/kvm и получает файловый дескриптор.
  2. Через вызовы ioctl QEMU создаёт виртуальную машину (структуру kvm_vm) и один или несколько виртуальных процессоров (структуры kvm_vcpu).
  3. QEMU выделяет гостевую память с помощью системных вызовов mmap, а затем регистрирует её в KVM.
  4. Для каждого виртуального процессора KVM создаёт отдельный поток в ядре, который выполняет гостевой код непосредственно на физическом процессоре, используя аппаратные режимы VMX (Intel) или SVM (AMD).
  5. При возникновении событий, требующих вмешательства хоста (например, обращение к несуществующей памяти, прерывание от эмулируемого устройства), управление передаётся обратно в QEMU, которое обрабатывает событие.

Режимы выполнения

KVM поддерживает три режима выполнения гостевого кода:

  • Гостевой режим (Guest mode) — процессор выполняет код гостевой ОС напрямую, без участия гипервизора. Это основной режим, обеспечивающий максимальную производительность.
  • Режим ядра (Kernel mode) — при возникновении событий, требующих вмешательства гипервизора (например, обработка прерываний, управление памятью), управление передаётся модулю KVM, который работает в контексте ядра хоста.
  • Пользовательский режим (User mode) — для операций, которые не могут быть выполнены в ядре (например, эмуляция сложных устройств), управление передаётся процессу QEMU в пользовательском пространстве.

Классификация и типы

KVM не имеет собственной классификации, но может быть классифицирован по типу гипервизора и способу использования:

  • По типу гипервизора — гипервизор первого типа (bare-metal), так как работает непосредственно на аппаратном обеспечении, используя ядро Linux в качестве минимальной операционной системы.
  • По способу управления — управляемый через QEMU (наиболее распространённый вариант), а также через специализированные инструменты, такие как libvirt, virt-manager, oVirt, OpenStack и другие.
  • По поддерживаемым архитектурам — изначально разработан для x86, но впоследствии портирован на архитектуры ARM, PowerPC, MIPS, RISC-V и S390.

Характеристики и возможности

KVM поддерживает широкий набор функций, характерных для современных гипервизоров:

  • Поддержка множества гостевых ОС — Linux, Windows (включая Windows 10/11 и Windows Server), FreeBSD, Solaris, Haiku, ReactOS и другие.
  • Аппаратная поддержка виртуализации — использование Intel VT-x/EPT и AMD-V/RVI для ускорения операций с памятью и управления процессором.
  • Виртуализация памяти — поддержка гостевой физической памяти, управляемой через EPT (Extended Page Tables) или NPT (Nested Page Tables), что позволяет избежать двойного преобразования адресов.
  • Виртуализация устройств — эмуляция стандартных устройств (IDE, SATA, SCSI, virtio, e1000, rtl8139) через QEMU, а также паравиртуализация с помощью драйверов virtio для повышения производительности.
  • Миграция на лету (Live Migration) — возможность перемещения работающей виртуальной машины между физическими хостами без прерывания её работы.
  • Снапшоты (Snapshots) — создание точек сохранения состояния виртуальной машины (память, диски, состояние процессора) для последующего восстановления.
  • Поддержка NUMA — оптимизация размещения гостевых процессоров и памяти для многопроцессорных систем с неоднородным доступом к памяти.
  • Поддержка контейнеров — KVM может использоваться совместно с контейнерными технологиями (например, Kata Containers), обеспечивая изоляцию на уровне ядра.

Применение

KVM является одним из наиболее распространённых гипервизоров в мире, используемым в различных сферах:

  • Корпоративные облачные платформы — KVM является основой для многих облачных инфраструктур, включая OpenStack, oVirt, Proxmox VE, а также коммерческие продукты Red Hat OpenStack Platform и Red Hat Virtualization.
  • Виртуализация серверов — в дата-центрах KVM используется для консолидации серверов, снижения энергопотребления и упрощения управления инфраструктурой. По данным отчётов, KVM занимает значительную долю рынка виртуализации серверов, уступая только VMware vSphere.
  • Разработка и тестирование — разработчики используют KVM для создания изолированных сред для тестирования программного обеспечения, отладки ядер и эмуляции различных конфигураций.
  • Образовательные цели — KVM применяется в учебных заведениях для изучения операционных систем, сетевых технологий и администрирования.
  • Домашние и малые серверы — благодаря бесплатности и интеграции с Linux, KVM популярен среди энтузиастов и владельцев небольших серверов.

Критика и ограничения

Несмотря на широкое распространение, KVM имеет определённые ограничения и подвергается критике:

  • Зависимость от аппаратной поддержки — KVM требует наличия аппаратных расширений виртуализации (Intel VT или AMD-V) на процессоре хоста. На системах без такой поддержки (например, старые процессоры или некоторые ARM-устройства) KVM не работает.
  • Производительность ввода-вывода — при использовании эмуляции устройств через QEMU производительность ввода-вывода может быть ниже, чем у гипервизоров с собственными драйверами (например, VMware ESXi). Однако использование паравиртуализации virtio значительно снижает этот недостаток.
  • Сложность конфигурации — настройка KVM вручную (без использования инструментов управления) требует глубоких знаний архитектуры Linux и виртуализации, что может быть сложно для начинающих администраторов.
  • Отсутствие встроенного управления — KVM не предоставляет собственного графического интерфейса или панели управления; для этого используются сторонние инструменты, такие как virt-manager, oVirt или OpenStack.

Интересные факты

  • KVM является одним из немногих гипервизоров, полностью интегрированных в ядро основной операционной системы, что позволяет использовать все возможности Linux без дополнительных накладных расходов.
  • В 2018 году KVM был сертифицирован для работы с операционной системой Windows 10 и Windows Server 2019 в рамках программы Microsoft Windows Server Virtualization Validation Program (SVVP).
  • KVM используется в проекте Google Compute Engine — облачной платформе Google, которая предоставляет виртуальные машины на базе KVM.
  • В 2020 году компания Red Hat выпустила Red Hat Enterprise Linux 8, в котором KVM стал единственным поддерживаемым гипервизором.

Источники

  • Red Hat. «KVM Virtualization in Red Hat Enterprise Linux 8». Red Hat Customer Portal, 2020.
  • Linux Kernel Organization. «KVM — Kernel-based Virtual Machine». The Linux Kernel Documentation, 2023.
  • QEMU Project. «QEMU User Documentation». QEMU Official Website, 2023.
  • OpenStack Foundation. «KVM Hypervisor Support». OpenStack Documentation, 2023.
  • IBM. «KVM for IBM z Systems». IBM Knowledge Center, 2022.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →