Страницы

Сохранить статью у себя в соцсети:

понедельник, 29 октября 2012 г.

§ HVM vs. Paravirt

Разница между полной виртуализацией и паравиртуальной.

Краткое объяснение чем паравиртуализация отличается от полной виртуализация.
Почему "паравиртуализация"? Просто разработчикам понадобился новый нигде неиспользуемый термин.
Полная виртуализация как правило выглядит следующим образом: на аппаратном обеспечении устанавливается гипервизор, который в свою очередь управляет виртуальными машинами. Гостевая ОС не знает, что она в данный момент виртуализирована. Это самый простой режим работы и для такого режима не требуется никаких изменений в работе ядра и ОС гостевой машины. 
При паравиртуализации, гостевая операционная система знает, что она запущена на гипервизоре, и дополнительно содержит код, который повышает эффективность взаимодействия гостевой системы и гипервизора. Код реализующий взаимодействие реализован в виде драйверов и модулей ядра в виртуальном окружении.
При полной виртуализации у гипервизора стоит задача отлавливать все запросы к ресурсам от виртуальной машины и эмулировать аппаратное обеспечение устройства которое представлено в виртуальном окружении. В большинстве случаев такая эмуляция неэффективна и очень сложна. В случае паравиртуализации гостевая ОС и гипервизор работают совместно с целью сделать эту эмуляцию эффективной и быстрой. Небольшим недостатком подхода с использованием паравиртуализации является то, что операционная система знает, что она виртуализирована и в ее работу требуется вносить изменения. В случае с KVM, ядро виртуализованной ОС должно содержать в себе virtio драйвера, а ядро хост-системы должно иметь соответствующие функции для работы с virtio.

Как уже говорилось выше, в случае полной виртуализации, гипервизор должен отлавливать запросы ввода/вывода, а затем эмулировать поведение реального аппаратного обеспечения. В таком случае достигается максимальная гибкость, (ОС не нужно модифицировать) такой подход приводит к неэффективности. В случае паравиртуализации, гостевой операционной системы известно, что она работает на гипервизоре и в ней есть драйвера, которые работают как внешний интерфейс гипервизора (frontend драйвера). В гипервизоре реализованы внутренние драйвера (backend драйвера), которые собственно и выполняют эмуляцию конкретного устройства. Эти frontend и backend драйвера как раз и реализуют технологию которая называется virtio. За счет использования такой схемы, устраняются избыточные операции при обращении к аппаратным ресурсам, в некоторых случаях даже не приходится обращаться к гипервизору и вся работа происходит внутри подсистемы virtio. Также virtio обеспечивает стандартизованный интерфейс для разработки доступа к эмулируемым устройствам, что ведет к повторному использованию кода и увеличивает эффективность. Модификация операционной системы для работы с virtio, не представляет из себя ничего сложного. Современные Linux дистрибутивы содержат в себе комплекты драйверов и инсталяторы в процессе установки автоматически определяют на каком оборудовании они запущены и в случае виртуализации устанавливают virtio-драйвера самостоятельно.

В качестве заключительного слова, можно сказать что, в плане поддержки виртуализации аппаратное обеспечение постоянно совершенствуется. В процессоры добавляются инструкции (vpid, flex_prioroty), которые повышают эффективность переключения между гостевыми операционными системами и гипервизором. Аппаратное обеспечение также продолжает совершенствоваться и для поддержки виртуализации ввода/вывода (IOMMU, DMAR, VTd) блочных и сетевых устройств. Создаются и совершенствуются технологии связанные с виртуализацией памяти (ept). И как видно, за virtio будет еще много технологий которые будут развивать виртуализацию.

На главную "Virtualizing Linux"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика