Улучшенная совместимость с vMotion.

Опубликовано: 21 Апреля, 2023


Введение


Вы могли заметить, что Intel и AMD время от времени выпускают новые процессоры. Каждое новое поколение процессоров отличается от предыдущих включением архитектурных изменений и новых функций процессора. Поскольку операционные системы развертываются на серверах, использующих эти новые процессоры, эти операционные системы используют различные функции процессора. В мире традиционных полностью физических серверов это не так критично. Вы устанавливаете свою операционную систему и двигаетесь дальше. Однако если вы пытаетесь смешивать и сочетать хост-серверы VMware ESX/ESXi с процессорами разных поколений в одном кластере, могут возникнуть проблемы.


Например, предположим, что у вас есть кластер из трех хостов VMware на базе Intel Penryn, и вы добавляете сервер с процессором на базе Intel Nehalem. Если вы не предпримете специальных шагов, вы не сможете использовать vMotion для перемещения виртуальных машин на хосты с несовместимыми функциями. Это может стать серьезным препятствием для обеспечения высокой доступности, поскольку некоторые виртуальные машины нельзя будет перенести на некоторые хосты.


Чтобы кластер VMware со смешанными процессорами мог поддерживать vMotion для любых и всех хостов, хосты должны быть настроены на какой-то наименьший общий знаменатель. Это задача Enhanced vMotion Compatibility (EVC), которая позволяет переносить работающие виртуальные машины между разными поколениями процессоров. После того как вы включили функцию EVC в кластере ESX, каждый хост настраивается для представления только функций ЦП выбранного типа процессора. Включив EVC, вы гарантируете совместимость ЦП для vMotion, даже если фактические поколения процессоров различаются от хоста к хосту. Для каждой виртуальной машины, работающей в кластере, виртуальным машинам доступны идентичные функции ЦП. Это процесс, который действительно позволяет использовать vMotion.


Почему это так важно? Давайте немного конкретнее. Представьте себе такой сценарий: у вас есть кластер из трех хостов, состоящий из всех процессоров на базе Nehalem. Все виртуальные машины, работающие в этом кластере, видят, что ЦП может использовать функцию ЦП AES, которая, согласно Википедии, имеет следующую функцию:



Теперь предположим, что вы решили добавить в кластер дополнительный сервер, который у вас есть, но этот новый сервер имеет процессоры на базе Penryn. Если бы вам разрешили vMotion VM, работающей в системах Nehalem, в систему Penryn, внезапно работающие виртуальные машины немедленно увидели бы, что функция просто исчезла. С точки зрения стабильности это не принесет пользы. Таким образом, должен быть какой-то механизм для выравнивания игрового поля — EVC.


Используя EVC, вы можете поэтапно добавлять новые хосты вместо того, чтобы заменять их все сразу, чтобы поддерживать согласованность архитектуры. На протяжении всего процесса вы можете поддерживать существующие механизмы доступности, такие как vMotion, поскольку для виртуальных машин функции процессора кажутся одинаковыми на всех хостах.


Одна вещь, которую EVC не делает, — это возможность использовать виртуальные машины vMotion между процессорами AMD и Intel. По крайней мере, вы должны убедиться, что все ваши хосты ESX используют процессоры одного и того же производителя. Кроме того, vCenter в любом случае не позволит вам пытаться смешивать поставщиков процессоров.


Давайте графически посмотрим, что EVC может сделать для вас. На рисунке 1 ниже вы видите следующее:



  • На верхнем рисунке показан кластер из трех серверов с двумя серверами на базе Intel Core2 и одним сервером на базе Core i7. Поскольку наименьшим общим знаменателем являются системы Xeon Core2, этот кластер работает в режиме Xeon Core2, поэтому vMotion будет работать между всеми тремя хостами. Для виртуальных машин, работающих в кластере, EVC в основном блокирует функции, доступные только для Core i7, от доступа к виртуальным машинам.
  • На среднем рисунке один из оставшихся серверов Core2 был заменен блоком Core i7. Однако, поскольку в кластере все еще есть сервер Xeon Core2, кластер по-прежнему не может использовать более продвинутые функции процессора i7, если вам нужна совместимость vMotion на всех трех хостах.
  • На третьем рисунке последний оставшийся хост Core2 был заменен хостом на базе i7, поэтому статус EVC кластера теперь можно повысить до статуса Core i7, поскольку это самый новый наименьший общий знаменатель. После того, как вы заменили все хосты, вы можете повысить режим EVC кластера. Однако вы должны сначала выключить, а затем включить каждую виртуальную машину в кластере, прежде чем они смогут увидеть любые новые функции ЦП, доступные благодаря повышению режима EVC. Перезагрузка виртуальной машины недостаточна, так как характеристики процессора определяются при включении виртуальной машины.


Изображение 27340
Рисунок 1:
Как работает EVC


Чтобы получить доступ к режиму EVC вашего кластера, откройте vCenter и щелкните правой кнопкой мыши свой кластер. В контекстном меню выберите «Изменить настройки». Откроется окно, показанное на рис. 2 ниже. Вы заметите, что этот кластер уже настроен для режима Intel Xeon 45nm Core 2 EVC, который позволяет допускать в кластер любой процессор с функциями этой линейки процессоров, включая процессоры Penryn, Nehalem и Westmere.



Изображение 27341
Рис. 2.
Этот кластер настроен для режима Core 2.


Нажав кнопку «Изменить режим EVC», вы можете изменить базовый набор функций процессора, которому разрешен вход в кластер. Или вы можете полностью отключить EVC, результаты которого показаны на рис. 3. Обратите внимание, что повторное включение EVC после его отключения может потребовать перезапуска виртуальных машин.



Изображение 27342
Рисунок 3:
Отключение EVC


На главной странице EVC вы также видели кнопку с надписью Current CPUID Details. Если вы нажмете эту кнопку, вы получите экран, подобный показанному на рисунке 4. Если вы хотите узнать больше о CPUID, вот хорошая статья на эту тему. Был день в мире VMware, когда вам приходилось создавать маски процессора, чтобы скрыть функции от виртуальных машин, и для этого вам нужно было знать CPUID. EVC значительно упрощает этот процесс.



Изображение 27343
Рисунок 4:
Детали CPUID


Теперь, возвращаясь к изменению режима EVC, в vSphere 4.1 у вас будет четыре варианта Intel, из которых можно выбрать, если на вашем хосте установлены процессоры Intel. Помните, что вы должны выбрать наименьший общий знаменатель, чтобы все хосты в кластере могли взаимодействовать. В документации VMware приведены функции, доступные для каждого типа процессора:


Режимы Intel EVC предоставляют следующие функции:



  • Intel Xeon Core2. Все функции процессоров Intel Core2.
  • Intel Xeon 45 нм Core2. Все функции ЦП Intel Core2 и дополнительные функции ЦП, включая SSE4.1
  • Intel Xeon Core i7. Все функции ЦП Intel Core2 и дополнительные функции ЦП, включая SSE4.2 и POPCOUNT.
  • Intel Xeon 32 нм Core i7. Применяет базовый набор функций процессоров Intel Xeon 32nm Corei7 (Westmere) ко всем узлам в кластере. По сравнению с режимом Intel Xeon Corei7 этот режим EVC предоставляет дополнительные функции ЦП, включая AES и PCLMULQDQ. Процессоры Intel i3/i5 Xeon Clarkdale Series, которые не поддерживают AESNI и PCLMULQDQ, не могут быть допущены к режимам EVC выше, чем режим Intel Xeon Corei7.


Изображение 27344
Рис. 5.
Варианты Intel EVC


Если вы попытаетесь выбрать вариант EVC, который не будет работать для некоторых хостов в кластере, вы получите сообщение об ошибке. На рис. 6 вы увидите, что моя попытка установить для режима EVC статус Core i7 приводит к тому, что три хоста не могут поддерживать этот режим EVC — esx4, esx5 и esx6.



Изображение 27345
Рисунок 6.
Три хоста не соответствуют требованиям


Точно так же, если я попытаюсь выбрать слишком низкий режим EVC, у меня также могут возникнуть проблемы с виртуальными машинами, которые в данный момент работают. Например, на рисунке 7 вы заметите, что когда я пытаюсь установить режим EVC на Core 2 (Merom) — в отличие от 45-нм Core 2 (Penryn) — я получаю ошибки, указывающие на то, что некоторые работающие виртуальные машины используют возможности процессора более высокого уровня. Чтобы настроить кластер на этот более низкий уровень, мне нужно отключить все затронутые виртуальные машины.


На самом деле, когда я первоначально установил EVC в Вестминстере, мне пришлось отключить виртуальные машины, работающие на хосте Core i7 (Nehalem), чтобы иметь возможность установить уровень EVC этого хоста на что-то более низкое. Как только это было завершено, я установил уровень EVC, перезапустил эти виртуальные машины и продолжил. Теперь вместо четырех кластерных серверов, разбитых на набор из трех, между которыми работала vMotion, и еще одним хостом (но все еще в кластере), все четыре сервера на равных участвуют в кластере и все поддерживают vMotion.



Изображение 27346
Рис. 7.
Некоторые машины используют расширенные функции процессора


Для полноты картины я также хотел показать вам полный список опций EVC на базе AMD Opteron. Обратите внимание на рис. 8: вам сообщают, что эти параметры недоступны, поскольку процессоры в системах, работающих в кластере, — это процессоры Intel, а не AMD.


Режимы AMD EVC предоставляют следующие функции:



  • AMD Opteron Generation 1. Все функции процессоров AMD Opteron Rev. E
  • AMD Opteron Generation 2. Все функции AMD Opteron Generation 1 и дополнительные функции ЦП, включая CMPXCHG16B и RDTSCP.
  • AMD Opteron Generation 3. Все функции AMD Opteron Generation 2 и дополнительные функции ЦП, включая SSE4A, MisAlignSSE, POPCOUNT, ABM (LZCNT)
  • AMD Opteron Generation 3 (без 3Dnow!). Применяет базовый набор функций процессоров AMD Opteron Generation 3 (Greyhound) с 3DNow! Поддержка удалена, для всех хостов в кластере. Этот режим позволяет подготовить кластеры, содержащие хосты AMD, для приема процессоров AMD без 3DNow! поддерживать.


Изображение 27347
Рис. 8.
Функции AMD EVC


Резюме


Существует нечто большее, чем просто CPUID, который определяет, будет ли операция vMotion успешной. Например, vCenter также выполняет ряд других проверок, таких как определение наличия общего хранилища на целевом и целевом узлах. Если они этого не сделают, vMotion потерпит неудачу. EVC является лишь одним из компонентов процесса.


Я также должен отметить, что EVC не будет работать в 100% случаев. Это зависит от приложений, которые ведут себя так, как они должны, используя функцию CPUID, а не какой-либо другой механизм для определения функций ЦП. Если приложение использует какой-либо другой метод и может обойти механизмы блокировки функций EVC, все ставки сняты, и операции vMotion могут завершиться ошибкой.