Что такое KVM? Виртуализация и гипервизор в Linux

Что такое KVM и для чего он нужен

Андрей Каменев
Андрей Каменев Системный админиcтратор
30 августа 2025

В статье раскроем понятие «виртуализация» и опишем один из самых популярных гипервизоров — KVM.

Изображение записи

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

Что такое виртуализация и гипервизор

Виртуализация — это возможность создавать изолированные друг от друга окружения в рамках одного физического устройства — сервера или десктопа.

Каждое такое окружение выглядит как отдельное устройство с выделенными ему ресурсами: памятью, центральным процессором и дисковым пространством. Подобное можно представить как квартиру внутри общего дома, только вместо «квартиры» мы называем это виртуальной машиной.

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

Аппаратная и программная виртуализация

В зависимости от задач применяются различные типы виртуализации: аппаратная или программная.

Аппаратная виртуализация (гипервизор, тип 1) это виртуализация на уровне железа, то есть с минимальным образом ОС, собранным со всеми необходимыми компонентами для служения одной задаче — быть гипервизором. Здесь виртуальная машина имеет доступ напрямую к аппаратному обеспечению физического сервера, а гипервизор контролирует только привилегированные команды. В отличие от программной виртуализации, данный подход позволяет получить максимальную производительность гостевых ОС и используется преимущественно в бизнес-процессах.
Программная виртуализация (гипервизор, тип 2) это виртуализация на уровне операционной системы. Она работает как приложение внутри вашей установленной ОС. Подобный тип виртуализации отличается меньшей производительностью от аппаратной и используется в основном для обучения, тестирования каких-либо ОС/программ или для организации виртуальных рабочих пространств.

Подробнее о среде и средствах виртуализации мы рассказали в отдельной статье.

Сравнение гипервизоров.

Что такое KVM и для чего он нужен

KVM или Kernel-based Virtual Machine — это модуль ядра Linux, обеспечивающий виртуализацию. Он был встроен еще с версии 2.6.20 в 2007 году и поставляется во всех сборках Linux по сей день. Хотите проверить? Наберите в любом Linux-дистрибутиве команду:


      lsmod | grep kvm

Вы увидите два модуля:


      $ lsmod | grep kvm
kvm_intel             487424  0
kvm                  1404928  1 kvm_intel


В моем случае присутствуют два модуля: kvm и kvm_intel. Второй модуль kvm-intel является расширением для основного — kvm — и служит для поддержки виртуализации на процессорах фирмы Intel. Но это не значит, что поддерживается только Intel — AMD и ARM процессоры также имеют подобные модули, только называются они kvm_amd и kvm_arm.

Ранее я упоминал два типа гипервизоров: аппаратный и программный. Так вот, KVM относится к первому. Преимущество этого типа — в минимальном количестве накладных расходов (penalty) при поддержании работоспособности созданных виртуальных машин. Именно по этой причине KVM используется в бизнес-процессах, где зачастую приходится управлять множеством ВМ, обеспечивающих работу бизнес-сервисов.

Сценарии использования KVM

KVM применяется в различных сценариях. Например, он используется для виртуализации и консолидации серверов, тестирования и разработки ПО, в облачных вычислениях и виртуализации рабочих мест (VDI). На мой взгляд, одни из самых популярных сценариев применения — в следующих платформах:

  • Proxmox — платформа с открытым исходным кодом предназначенная для управления пулом виртуальных машин;
  • OpenStack — комплекс взаимосвязанных сервисов, предназначенный для создания облачной инфраструктуры. 

Компоненты KVM-систем

KVM-система состоит из нескольких компонентов.

  • Сами kvm-модули ядра Linux. Однако одного голого модуля недостаточно для запуска виртуальной машины (VM), поэтому нам нужен эмулятор.
  • QEMU — эмулятор I/O-устройств (процессора, дисков, памяти и т.д), который позволяет запускать операционные системы одной архитектуры на другой. Например, ARM на x86. 
  • libvirt — это, можно сказать, библиотека API, которая позволяет управлять гипервизорами посредством утилит CLI (интерфейса командной строки) или GUI (графического интерфейса).
  • virsh — поставляемый вместе с libvirt родной инструмент управления виртуальными машинами посредством командной строки.
  • Virtual Machine Manager (VMM) — дополнительный инструмент управления виртуальными машинами, но уже через GUI.

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

Создание KVM происходит посредством обращения к KVM API. Под капотом вспомогательных утилит вроде virt-install это выглядит примерно так (не запускайте этот блок кода — мы разбираем его для примера):


      // Открываем /dev/kvm для обращения 
int kvm_fd = open("/dev/kvm", O_RDWR);
int version = ioctl(kvm_fd, KVM_GET_API_VERSION, 0);
printf("KVM version: %d\n", version);

// Создаем VM
int vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, 0);

// Выделяем память для VM
#define RAM_SIZE 0x10000
void *mem = mmap(NULL, RAM_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
struct kvm_userspace_memory_region mem = {
	.slot = 0,
	.guest_phys_addr = 0,
	.memory_size = RAM_SIZE,
	.userspace_addr = (uintptr_t) mem,
};
ioctl(vm_fd, KVM_SET_USER_MEMORY_REGION, &mem);

// Выделяем VCPU
int vcpu_fd = ioctl(vm_fd, KVM_CREATE_VCPU, 0);

Ну правда, красота?  И это мы еще только выделили ресурсы под VM, не запуская ее. Такие подробности можно найти в трейсе работы утилиты virt-install, о которой пойдет речь дальше. 

Конечно, вряд ли кому-то захочется каждый раз писать такую «портянку», особенно когда нужно запустить много виртуальных машин и нет желания разбираться с API-вызовами. На такой случай существуют утилиты. Они упрощают настройку и управление виртуальными машинами. Утилиты помогают запустить ВМ, принимая более понятные команды, которые сама утилита затем переводит в API-вызовы. К примеру, вот так можно запустить виртуальную машину из CLI:


      virt-install \
--name myCoolVM \
--description "Test VM" \
--os-type=Linux \
--os-variant=ubuntu22.04 \
--ram=2048 \
--vcpus=2 \
--disk path=/var/lib/libvirt/images/ubuntu20_04.qcow2 ,bus=virtio,format=qcow2 \
--graphics none \
--cdrom /var/ubuntu-server-22.04-x86_64.iso \
--network bridge:br0

Помимо консольных команд, виртуальные машины можно запускать через удобный графический интерфейс, к примеру Virtual Machine Manager, который упоминался ранее. Он интуитивно понятен и не требует специальной подготовки для использования. Взгляните сами:

Простой и интуитивно понятный  Virtual Machine Manager.
Простой и интуитивно понятный  Virtual Machine Manager.

Преимущества виртуализации KVM

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

  • Производительность. KVM является гипервизором первого типа и обеспечивает производительность, близкую к «железной». С ним виртуальные машины загружаются быстро и достигают желаемых результатов производительности.
  • Безопасность. Поскольку KVM является частью исходного кода ядра Linux, он пользуется преимуществами крупнейшего в мире сообщества разработчиков открытого кода, тщательного процесса разработки и тестирования, а также постоянного обновления системы безопасности.
  • Зрелость. KVM появился в 2006 году и с тех пор продолжает активно развиваться. Более 1 000 разработчиков по всему миру внесли вклад в код KVM.
  • Экономическая эффективность. Поскольку KVM имеет открытый исходный код и доступен в виде модуля ядра Linux, он поставляется по нулевой цене из коробки, что делает его привлекательным решением для бизнеса.

Заключение

В этой статье мы разобрали основы виртуализации и гипервизор KVM. Прошлись по компонентам, немного заглянули под «капот» обращения к API KVM, рассказали про методы управления гипервизором и расписали основные сценарии использования.

Также рекомендуем изучить дополнительные статьи по теме. Они помогут чуть глубже познакомиться с гипервизорами и попрактиковаться в создании виртуальных машин.