Какие процесcоры получает виртуальная машина внутри Hyper-V?

Недавно коллеги прислали ссылки на интересный спор признаных специалистов по разным системам виртуализации Антона Жбанкова и Андрея Маркелова, о том какие процессоры виртуальная машина получает при работе под Red Hat Enterprise Virtualization и vSphere. Получается, что внутри старых версий RHEV виртуальная машины получала по умолчанию процессор Pentium II. Это не позволяло виртуальным машинам задействовать инструкции новых поколений процессоров и вело к неэффективной работе. В случае использования более новой версии RHEV появляется возможность выбрать более современную модель процессоров.

В связи с этим возникает вопрос, а как обстоят дела с процессорами виртуальных машин при использовании Hyper-V?

Представим, что у нас есть физический хост Hyper-V со следующими характеристиками процессора, ОЗУ и материнской платы:

cpuz-host cpuz-host_1 cpuz-host_2 cpuz-host_3 cpuz-host_4

Теперь представим что мы хотим объединить этот физический хост еще с одним или несколькими хоставми в кластер Failover Cluster. Если все узлы кластера у нас одиаковые, то мы автоматически получим внутри виртуальной машины Windows 7 следующие характеристики виртуального оборудования.

 

cpuz_guest_full cpuz_guest_full1 cpuz_guest_full2 cpuz_guest_full3

 

Виртуальная машина получает такой же процессор как и хостовая ОС. Изменения видны лишь в материнской плате. ОС внутри виртуальной машины может воспользоваться всеми преимуществами оптимизированных инструкций современных процессоров.

Рассмотрим следующий случай. Представим, что в кластере у нас есть физические узлы с разными версиями процессоров. Такое явление хоть и не сильно распространено, но все же встречается. Происходит это, потому что обычно мало кто закупает все узлы кластера сразу. С течение лет узлы, добавляемые в кластер Hyper-V, могут начать различаться. Стоит отметить, что в кластер можно объединять только процессоры одного производителя. Либо Intel, либо AMD. Для того чтобы виртуальная машина могла мигрировать с помощью Live migration c одного физического узла на другой, отличающийся процессором, необходимо чтобы внутри виртуальной машины был процессор инструкции которого могут быть реализованы процессорами обоих физических узлов участвующих в миграции. То есть некий общий знаменатель возможностей процессоров узлов кластера. Для получения такого “общего” процессора виртуальная машина должна быть помечена специальным флагом под названием “Migrate to physical computer with different processor version”. Установить этот флаг можно в свойствах виртуальной машины. В результате она автоматически получит немного другой процессор и следующие виртуальные компоненты.

 

virtual_machine_properties_migrate_diffrent_processor cpuz_migrate cpuz_migrate1 cpuz_migrate2 cpuz_migrate3

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

Перейдем к другому случаю. Что если нам в целях совместимости в виртуальной машине, нужно запустить какую либо устаревшую версию ОС. Все очень просто в свойствах виртуальной машины ставим флаг “Run an older operating system such as Windows NT”. После этого модель процессора в виртуальной машине снова поменяется. Никаких больше процессоров Intel Core 2 Quad получаем более старый и простой процессор Intel Core 2. Впрочем, старые операционные системы все равно не могут воспользоваться преимуществами новых процессоров, так что Intel Core 2 как раз то что надо для таких ОС.

 

virtual_machine_properties_windows_nt cpuz_guest_nt cpuz_guest_nt_1 cpuz_guest_nt_2 cpuz_guest_nt_3

 

Как видите никакой магии в этом процессе нет. Все достаточно просто, понятно и надежно. Hyper-V автоматически подбирает наиболее подходящий с точки зрения быстродействия и возможностей процессор для виртульной машины.