KVM (для виртуальной машины на основе ядра) - это решение для полной виртуализации Linux на оборудовании x86, содержащее расширения виртуализации (Intel VT или AMD-V).

KVM был разработан и создан Qumranet, который позже был приобретен Red Hat.

KVM - очень изящная реализация виртуализации для x86, поскольку исходный код содержал менее 10000 строк кода. Он реализован как модуль ядра и использует ряд функций ядра Linux вместо их реализации (например, ядро ​​заботится о планировании виртуальных машин), в отличие от xen, где все эти функции нужно было позаботиться. гипервизором. Таким образом, повторное использование кода - это то, на что полагается KVM.

Ниже приведены способы, как KVM виртуализирует различные компоненты реального ПК.

Виртуализация ЦП: за виртуализацией ЦП отвечает технология Intel VT или AMD-V, а KVM добавляет связующий код для эффективного использования этих технологий. KVM загружает и сохраняет несколько регистров, когда виртуальная машина запланирована или когда она закрывается соответственно.

Виртуализация ввода-вывода: KVM выполняет виртуализацию ввода-вывода с помощью qemu, который имитирует устройства. KVM также поддерживает сквозные устройства, где виртуальная машина может напрямую обращаться к устройствам ввода-вывода с помощью IOMMU.

Виртуализация памяти: более ранняя разработка виртуализированной памяти KVM с использованием таблиц теневых страниц, которая представляет собой программный подход к виртуализации памяти. Синхронизация таблиц теневых страниц с таблицами страниц, принадлежащими ОС, требует больших затрат. Позже Intel и AMD представили свои собственные версии вложенных таблиц страниц, которые в основном представляют собой аппаратный подход к виртуализации памяти.