Hyper-V в Windows Server 2008 R2 и режим совместимости процессора

С появлением Live Migration в Windows Server 2008 R2 и возможностью переноса запущенной виртуальной машины с одного узла на другой встает вопрос — одинаковы ли используемые в серверах процессоры? Если отличаются, то насколько? Не повредит ли это работе приложений в виртуальной машине при переносе с более нового процессора на более старый? Поддерживается ли построение кластера из разных серверов, где процессоры могут отличаться поколением и своими возможностями?

Все эти вопросы нам помогает разрешить новая возможность, которая появилась в Windows Server 2008 R2 и называется «режим совместимости процессора для виртуальной машины». Она позволяет перемещать виртуальную машину между серверами с процессорами одного производителя, но совершенно разных поколений. Действительно, режим совместимости не поможет перемещать запущенную виртуальную машину между процессорами производства Intel и AMD. Это происходит из-за совершенно различных механизмов адресации памяти. Зато режим совместимости процессора позволит вам переносить виртуальную машину, например, между процессорами Intel Pentium IV, Intel Core 2 Duo и Intel Core i7 — так, что никакое приложение, запущенное в виртуальной машине, не пострадает. Как же это реализовано?

В нормальном состоянии когда включается виртуальная машина, гипервизор исследует возможности процессора, на котором происходит запуск. Полученный набор будет разрешён для использования виртуальному процессору и доступен ОС и приложениям, запущенным внутри виртуальной машины. Этот набор неизменен до выключения конкретной виртуальной машины. Но когда для заданной виртуальной машины вы включаете режим совместимости процессора, гипервизор производит действие, которую можно обозначить как «нормализацию» набора инструкций процессора. В результате набор инструкций приводится к подмножеству возможностей, общих для всех процессоров текущего производителя, поддерживающих Hyper-V. Это позволяет смело переносить запущенную виртуальную машину с текущего сервера на любой другой, если производитель процессоров в исходном и целевом серверах совпадает. Ведь при работе ВМ виртуальный процессор будет использовать лишь ограниченый набор инструкций, присутствующий на всех процессорах, на которых работает Hyper-V. Все прочие инструкции физического процессора «скрываются» от виртуального процессора путем перехвата инструкции CPUID и очисткой тех битов в ответе процессора, которые обозначают «лишние» инструкции.

На самом деле, идея не нова. Intel и AMD сами реализовали аппаратный способ маскировки инструкций: технологии Flex Migration и Extended Migration соответственно. Однако они появились лишь в самых последних моделях процессоров, так что Microsoft предлагает использовать программный метод как более гибкий. Гибкость программного подхода к маскировке инструкций заключается в том, что он может включаться индивидуально для каждой виртуальной машины и не требует изменений в BIOS сервера. Для этого режима нет никаких особенных аппаратных требований. Вы можете пользоваться им на любой системе Windows Server 2008 R2, где работает Hyper-V. При этом режим совместимости процессора виртуальной машины в Hyper-V полностью поддерживает и аппаратные технологии Flex и Extended Migration при их наличии.

Во время тестирования этой технологии члены команды виртуализации Microsoft собрали четырехузловой кластер, состоящий из серверов с процессорами четырех различных поколений: Pentium 4 VT, Core 2 Duo, Core 2 Quad и Core i7 (Nehalem). Затем был написан сценарий, который примерно раз в 15 секунд в цикле переносил виртуальную машину с узла на узел при помощи Live Migration. За неделю примерно по такой схеме было произведено около 110 000 операций Live Migration одной виртуальной машины.

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

  • Для процессоров Intel скрываются следующие наборы инструкций и технологии: SSSE3, SSE4.1, SSE4.2, POPCNT, Misaligned SSE, XSAVE, AVX.
  • Для процессоров AMD скрываются следующие наборы инструкций и технологии: SSSE3, SSE4.1, SSE4.A, SSE5, POPCNT, LZCNT, Misaligned SSE, AMD 3DNow!, Extended AMD 3DNow!.

Очевидно, что в будущем при включении данного режима все новые инструкции, которые появятся в следующих поколениях процессоров Intel и AMD, также будут скрываться от виртуальных процессоров.