Назад | Перейти на главную страницу

Почему можно развернуть гипервизор внутри гипервизора?

Почему гипервизор, который якобы должен быть на физическом оборудовании, можно развернуть в виртуальной машине?

Например, XenServer (фактический гипервизор) можно развернуть на виртуальной машине ESX?

Почему это возможно (хотя это не очень хорошая идея по многим причинам, но все же работает).

Кроме того, почему люди говорят, что гипервизору необходимо физическое оборудование (с архитектурной точки зрения, а не по очевидным причинам производительности).

Спасибо

Голый металл гипервизор (например, ESX, Hyper-V) - это просто операционная система, предназначенная для управления и мониторинга доступа к оборудованию. Естественно, что гипервизор на виртуальной машине будет контролировать и отслеживать доступ к оборудованию, к которому у него есть доступ. Это работает, потому что виртуальное оборудование выглядит точно так же, как реальное оборудование.

Паравиртуализация (например, Xen), с другой стороны, не передает аппаратную архитектуру виртуальным гостям, а скорее предоставляет API для использования ресурсов. Таким образом, обычные операционные системы (и гипервизоры) не смогут работать в паравиртуализированной системе.

Вы не можете запустить Hyper-V ни на одной виртуальной машине. Он должен работать непосредственно на оборудовании. Вы можете установить роль Hyper-V в некоторых системах виртуализации, но вы не можете запустить виртуальную машину. Однако вы можете запустить программу Hyper-V Manager.

Это зависит от типа гипервизора. Есть гипервизоры, которые можно развернуть внутри других гипервизоров. Есть много ошибок, и аппаратная поддержка в 64-битной версии не очень хороша. Я должен подчеркнуть, что вы никогда не сделаете это, кроме как для тестирования - даже в этом случае это полезно только для тестирования определенных функций (например, vMotion или HA на стороне VMware). Это не дает вам никакого представления о том, насколько хорошо программное обеспечение работает в производственной среде.

Во-первых, вам нужно понять уровни привилегий x86 (кольца): http://en.wikipedia.org/wiki/Ring_(computer_security)

Обычно операционная система (с ее привилегированным доступом к оборудованию) будет работать в кольце 0, а ее программы пользовательского уровня (которые должны проксировать взаимодействие оборудования через ОС) будут работать в кольце 3. Когда программа выполняет системный вызов, она передает сообщение в операционную систему с просьбой запустить определенную функцию в ее пространстве Ring 0 и вернуть ее результаты программе Ring 3.

Когда вы полностью реализуете виртуализацию в программном обеспечении (без аппаратной помощи, такой как Intel VT-x или AMD-V), вы, по сути, проверяете уровни привилегий кода внутри работающей виртуальной машины. В VMware этот метод называется двоичной трансляцией. Любой код, работающий в кольце 3, продолжает работать в кольце 3 без изменений. Все, что работает в кольце 0, вместо этого выполняется в кольце 1, при этом доступ к оборудованию кольца 0 осуществляется через виртуальное оборудование гипервизора. Виртуальное оборудование - это просто набор программного обеспечения, которое сообщает ОС хоста что-то делать в пространстве Ring 0.

Определенное оборудование не поддерживает двоичную трансляцию, потому что оно не поддерживает уровни звонка, необходимые для этого. Примечательно, что кольца 1 и 2 не существуют в 64-битных режимах большинства современных процессоров x86 (некоторые процессоры AMD поддерживают их, а Intel - нет). Поэтому двоичная трансляция обычно ограничивается 32-разрядной гостевой ОС.

Поскольку вы уже используете кольцо 1, когда используете гипервизор с двоичной трансляцией, вы не можете запустить гипервизор BT внутри другого. (Хорошо, так что гипотетически кто-то мог бы написать гипервизор, который использует Ring 2, когда он сам виртуализируется. Это такой крайний случай, что я не думаю, что кто-то это делал.)

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

Аппаратные расширения, с другой стороны, работают противоположно двоичной трансляции - они обеспечивают суперпривилегированный уровень гипервизора или кольцо -1 (расположенный на один уровень ниже кольца 0), который выполняет весь код кольца 0 без изменений. Когда используются эти наборы команд, Ring -1 обеспечивает среду, в которой операции Ring 0 виртуальной машины перехватываются и обрабатываются гипервизором без какого-либо анализа выполняющегося кода.

Вы не можете запустить два гипервизора, используя аппаратные расширения одновременно, даже если вы пытаетесь запускать их бок о бок. Например, вы не можете запустить Windows XP Mode в Windows 7, если вы уже используете VirtualBox для запуска виртуальной машины с поддержкой аппаратной виртуализации.

Это оставляет нас с тем, что вы можете запустить гипервизор двоичной трансляции внутри гипервизора, используя аппаратную виртуализацию, но не наоборот. Кроме того, гипервизор в гипервизоре, как правило, может запускать только 32-разрядные гостевые системы, но влияние на производительность часто не так существенно, как предполагалось в некоторых других плакатах. (Приложения, которым требуется интенсивный доступ к памяти, такие как серверы баз данных, все равно будут страдать, потому что им придется пройти через два набора виртуальных таблиц страниц.) Большинство гипервизоров обнаруживают, когда они запускаются внутри другого гипервизора, и отказываются запускаться. Некоторые гипервизоры отлично подходят для тестирования; вы можете запустить несколько экземпляров VMware ESXi, например, под VMware Workstation (но вы можете использовать режим BT только на любых виртуальных машинах ESXi, размещенных на VMware Workstation).

Xen не выполняет двоичную трансляцию - он либо использует аппаратную виртуализацию, либо выполняет паравиртуализацию. Возможно запускать Xen с паравиртуализацией под другим гипервизором, но вы не можете запускать виртуальные машины Xen-under-ESX с использованием полной аппаратной виртуализации таким образом.

Надеюсь это поможет.

Почему гипервизор, который якобы должен быть на физическом оборудовании, может быть развернут внутри виртуальной машины?

НЕ МОЖЕТ - с хорошей производительностью.

Кроме того, почему люди говорят, что гипервизору необходимо физическое оборудование (с архитектурной точки зрения, а не по очевидным причинам производительности).

Почему устали круглые?

Гипервизоры обычно используют возможности виртуализации оборудования. они не поддерживаются клиентским приложением ВНУТРИ виртуального уровня. В основном у процесса есть рабочий режим для гипервизора и один для нормальной ОС, и обычная ОС не может вернуться в режим своего супервизора.

Без аппаратной виртуализации вы должны моделировать все это на практике - интерпретировать множество инструкций процессора (через программу), в результате чего они будут намного медленнее, чем на аппаратном уровне.