Всё о виртуализации

Итак, сегодня мы поговорим о виртуализации. Суть её — одновременная работа нескольких операционных систем на одном компьютере, которые в режиме реального времени разделяют аппаратные ресурсы.
Несмотря на то, что многими эта технология воспринимается как новая и даже инновационная, идея виртуализации была предложена еще фирмой IBM, задолго до появления Windows. Но победа процессорный архитектуры x86 фирмы Intel, не поддерживающей виртуализацию, незаслуженно вытеснила эту технологию из широкой IT-практики.

Дело в том, что в архитектуре x86 все аппаратные устройства (контроллеры жестких дисков, видеоконтроллеры, таймеры и прочее) проектировались на работу только с одной ОС. Решением данной проблемы стала эмуляция виртуальных устройств для каждой операционной системы, с последующей трансляцией к аппаратному обеспечению. Однако такое решение не отличается высоким быстродействием. Помимо этого, серьезные препятствия для виртуализации ставила система работы процессора платформы x86: «кольцевая» структура распределения привилегий (выполняемые команды в процессоре x86 делились на 4 уровня привилегий) приводила к тому, что некоторые команды процессора, а именно те, которые относились к нулевому кольцу, не могли быть вызваны из гостевой ОС, поскольку только ядро основной ОС имело доступ к этим командам. Отсюда невозможность полноценной работы гостевой ОС.

Схема виртуализации

Существует метод программной виртуализации, называемый «ring-deprivileging». Согласно этому методу гипервизор выполняется в нулевом кольце. Гостевые операционные системы выполняются в кольцах 2,3,4 и свободно могут выполнять непривилегированные инструкции. Попытки выполнить привилегированные инструкции этими ОС запрашивают доступ к нулевому кольцу процессора и вызывают исключения, которые перехватываются гипервизором, выполняются от имени гипервизора, и возвращаются гостевой системе. Однако в платформе x86 некоторые привилегированные инструкции на пользовательском уровне выполняются по разному, в зависимости от контекста, что опять же не дает использовать технику «ring-deprivileging» для виртуализации на архитектуре x86.

На данный момент весь рынок виртуализации для платформы x86 можно поделить согласно методу виртуализации, на следующие классы:

  1. Программная паравиртуализация
  2. Программная полная виртуализация
  3. Аппаратная виртуализация
  4. Только набирающая обороты технология виртуализации уровня операционной системы — виртуализация ресурсов.

Основным действующим лицом в любой технологии виртуализации является так называемый гипервизор: программная прослойка между гостевыми операционными системами и аппаратным обеспечением. Реализация этого гипервизора может быть разной. Даже в технологиях аппаратной виртуализации управление аппаратными действиями процессора занимается специальная программа — гипервизор. Теперь подробнее по всем четырем методам:

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

Паравиртуализация является решением по обходу так называемых «плохих» команд процессора, то есть тех команд ядра операционной системы, которые не поддаются виртуализации. Для этого ядро гостевой системы перед началом работы модифицируется таким образом, чтобы заменить «плохие» команды на запросы к гипервизору, который транслирует запросы к процессору. По аналогии с сетевыми технологиями, в данном случае гипервизор можно сравнить с прокси-сервером. Однако применение данной технологии долгое время было ограничено закрытостью исходного кода проприетарных операционных систем. Однако с введением изготовителями процессоров технологий аппаратной виртуализации, стало возможно запускать немодифицированные ОС на системах паравиртуализации на процессорах, поддерживающих аппаратную виртуализацию.

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

В 1998 году компания VMWare выпустила программный комплекс полной виртуализации, который был основан на бинарной трансляции кода. Код гостевой операционной системы принимался гипервизором и проверялся на наличие проблемных команд. Логика гипервизора при этом либо переводила команды на выполнение от имени гипервизора, либо заменяла определенным образом команды. Технология полной виртуализации дала возможность реализовать виртуализацию проприетарных операционных систем, как Windows, MacOS, где нет возможности модифицировать ядро системы. Однако следует отметить, что полная трансляция и модификация бинарного кода — весьма ресурсоемкая операция, поэтому такая полная виртуализация не отличается высокой производительностью.

Виртуализация и кластеризация

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

Для преодоления проблем с виртуализацией процессорных ресурсов, компании Intel и AMD ввели в свои новые процессоры новый режим процессора — так называемый «гостевой» режим. Благодаря этому, гостевой операционной системе на аппаратном уровне предоставлялась возможность выполнять привилегированные команды в нулевом кольце процессора. Это значительно повысило производительность решений на базе виртуализации, ведь теперь гипервизору не нужно было выполнять ресурсозатратные действия по контролю за кодом гостевой ОС. Конечно, гипервизор сохранился, но большое количество его функций с введением аппаратной виртуализации просто исчезли. Технологии аппаратной виртуализации фирм Intel и AMD называются соответственно Intel VT и AMD SVM. Наличие или отсутствие поддержки аппаратной виртуализации является одним из пунктов описания любого современного процессора. Стоит отметить, что далеко не все новые процессоры поддерживают аппаратную виртуализацию. К примеру, популярный процессор Intel Q6600 поддерживает технологию Intel VT, а Q8200 — нет.

Кроме технологий аппаратной виртуализации процессорных ресурсов, технологии аппаратной виртуализации сделали возможным прямой доступ гостевых операционных систем к аппаратным устройствам, к примеру, жестким дискам, напрямую через канал DMA. Однако из-за этого уменьшается количество устройств, которые можно назначить гостевой ОС, и ухудшается её переносимость .

Аппаратная виртуализация, до и после

Несмотря на казалось бы очевидный выигрыш от аппаратной виртуализации, мнение многих специалистов далеко не так радужно. Некоторые считают, что аппаратная виртуализация — рекламный ход производителей процессоров. Специалисты из VMWare усмотрели существенный минус в технологиях аппаратной виртуализации — их несовместимость с виртуализацией инструкции MMU (Memory Management Unit) — инструкции, осуществляющей доступ процессора к памяти и управляющей адресацией. Производители решения на базе аппаратной виртуализации, например Innotek и Xen, признаются, что используют возможности виртуализации, предоставляемый производителями процессоров, только в случаях, когда этот шаг действительно увеличивает производительность, и бывает это далеко не всегда. Возможно это связано с тем, что решения программной виртуализации хорошо проработаны и оптимизированы. Однако, нельзя не отметить один важный прорыв, достигнутый с помощью технологий аппаратной виртуализации — возможность запускать немодифицированные операционные системы в качестве гостевых ОС в системах паравиртуализации.