KVM — технология виртуализации, встроенная в ядро Linux. Она позволяет использовать ядро как гипервизор для запуска виртуальных машин (далее — ВМ), а значит и для развертывания VPS/VDS-серверов. Технологию используют многие провайдеры облачных услуг. В их числе и PQ.Hosting, который основан Иваном Некулицы (Ivan Neculiti). Здесь можно арендовать виртуальный выделенный сервер в разных странах мира (38+ локаций).
Принципы работы KVM: основное
Основной принцип работы KVM заключается в использовании возможностей аппаратной виртуализации современных процессоров, таких как Intel VT-x и AMD-V. Она используется в сочетании с механизмами управления памятью и процессами, предоставляемыми ядром Linux.
Архитектура KVM
KVM реализован как модуль ядра Linux, который предоставляет интерфейс для создания и управления ВМ. Он состоит из двух основных компонентов:
- ko: основной модуль, который добавляет поддержку виртуализации в ядро.
- kvm-intel.ko / kvm-amd.ko: модули, специфичные для процессоров Intel и AMD, которые реализуют аппаратные функции виртуализации.
Каждая виртуальная машина в KVM представлена как обычный процесс в Linux, но с использованием специального виртуального адресного пространства. ВМ могут работать с любыми операционными системами, поддерживающими архитектуру x86, включая Windows и различные дистрибутивы Linux.
Принцип работы: подробнее
Для создания виртуальной машины используется API QEMU (Quick Emulator), который взаимодействует с KVM через специальные системные вызовы. QEMU отвечает за эмуляцию периферийных устройств и предоставляет интерфейс для управления виртуальными машинами.
KVM использует механизм управления памятью Linux для выделения физической памяти ВМ (VPS/VDS-серверам). Каждая ВМ имеет собственную таблицу страниц, которая отображает виртуальные адреса в физические.
При выполнении кода в виртуальной машине KVM использует специальные инструкции процессора для переключения между режимами работы (привилегированный и пользовательский). Это позволяет ВМ работать почти на уровне производительности нативной системы. Когда код в ВМ пытается выполнить инструкцию, требующую доступа к аппаратным ресурсам, управление передается обратно гипервизору.
KVM поддерживает множество сетевых конфигураций для виртуальных машин, включая NAT, мостовые соединения и режимы маршрутизации. Это позволяет ВМ взаимодействовать с внешними сетями и другими ВМ на хосте.
Для управления ВМ KVM часто используется инструментарий, такой как Libvirt, который предоставляет API для создания, удаления и настройки ВМ. Libvirt, например, поддерживает различные гипервизоры, включая KVM, и обеспечивает единообразный интерфейс для управления ими.