Гетерогенный пул процессоров в XenServer 6

в 5:18, , рубрики: intel xeon, xenserver, виртуализация, Серверное администрирование, метки: , ,

Не так давно у заказчика появилась необходимость собрать пул виртуальных машин, который должен был состоять из серверов HP ProLiant 6 и 5 поколений. Процессоры в этих серверах: Xeon E5502 и X3353. Начиная с версии 5.5 Xen поддерживает гетерогенный пул процессоров.
Описываются 4 типа гетерогенных пулов:

  1. Добавление более производительного хоста к менеее производительным;
  2. Добавление менее производительного хоста к более производительным;
  3. Комбинация различных и взаимоисключающих хостов в пул;
  4. Комбинация различных CPU c идентичными возможностями.


Тип 1 подразумевает применение к подключаемому CPU маски, чтобы добиться совместимости с существующим пулом, который остается незамаскированным, эта опция автоматически включается в XenServer. Тип 2 подразумевает применение маски к существующему пулу, незамаскированным остается добавляемый сервер. Тип 3 подразумевает применение общей маски к существующему пулу и подключаемому хосту, чтобы добиться их совместимости. Тип 2 и тип 3 поддерживаются через XenAPI и Xe CLI. Тип 4 подходит для моделей с различными маркетинговыми названиями, но одинаковыми наборами флагов и функций.
В одном из блогов я наткнулся на видео, где 2 сервера добавляются в пул без изменения масок вручную. К сожалению, в моем случае при любых комбинациях XenServer выдавал: «This server's hardware is incompatible with the master's». Оставалось только попробовать применить маску.
Применение маски к существующему пулу влияет на работающие виртуальные машины, поэтому необходимо выбрать время для перезагрузки хостов и применения маски.
Дополнительный нюанс в том, что новые и старые процессоры не всегда можно описать как более производительные и менее производительные. Новые модели процессоров часто не используют функций, которые присутствуют в старых процессорах, что может привести к несовместимости. Поэтому не будет гарантии, что при использовании маски хоста с новейшими процессорами достаточно присоединить его к пулу, содержащему старые модели процессоров.
Поддерживаемые комбинации процессоров можно найти в Hardware Compatibility List.
Приступаем к выбору варианта маскирования.
В Citrix Xen Server необходимо определиться какие процессоры используются на хостах.
В нашем случае это были X3353 (4 cores 2.66GHz) и E5502 (2 cores 1.86GHz).
Рассмотрим атрибуты процессоров с помощью команды xe host-cpu-info в Citrix XenServer.

[host_a] # xe host-cpu-info
cpu_count                : 4
                   vendor: GenuineIntel
                    speed: 1866.734
                modelname: Intel(R) Xeon(R) CPU           E5502  @ 1.87GHz
                   family: 6
                    model: 26
                 stepping: 5
                    flags: fpu de tsc msr pae mce cx8 apic sep mtrr mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht nx constant_tsc pni vmx est ssse3 sse4_1 sse4_2 popcnt
                 features: 009ce3bd-bfebfbff-00000001-28100800
    features_after_reboot: 009ce3bd-bfebfbff-00000001-28100800
        physical_features: 009ce3bd-bfebfbff-00000001-28100800
                 maskable: full

[host_b] # xe host-cpu-info
cpu_count                : 4
                   vendor: GenuineIntel
                    speed: 2666.668
                modelname: Intel(R) Xeon(R) CPU           X3353  @ 2.66GHz
                   family: 6
                    model: 23
                 stepping: 6
                    flags: fpu de tsc msr pae mce cx8 apic sep mtrr mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht constant_tsc pni vmx est ssse3 sse4_1
                 features: 000ce3bd-bfebfbff-00000001-20000800
    features_after_reboot: 000ce3bd-bfebfbff-00000001-20000800
        physical_features: 000ce3bd-bfebfbff-00000001-20000800
                 maskable: base

Сохраняем результаты в E5502.txt и X3353.txt.
В XenServer 5.5 существует условие, что процессоры могут быть добавлены в пул только если у них одинаковый вендор, модель, семейство и значения флагов.
Начиная с версии 5.6 только значения флагов у пула серверов и подключаемого хоста должны быть идентичными для создания гетерогенного пула.
Проверить маски на совместимость можно с помощью Heterogeneous CPU Pool Self-Test Kit:

# ./compare-cpu E5502.txt X3353.txt -v

                file1: E5502.txt
                file2: X3353.txt
            pool_mask: ffffff7f-ffffffff-ffffffff-ffffffff

                CPU 1: 
           model name: Intel(R) Xeon(R) CPU           E5502  @ 1.87GHz
             features: 009ce3bd-bfebfbff-00000001-28100800
        masking level: full

                CPU 2: 
           model name: Intel(R) Xeon(R) CPU           X3353  @ 2.66GHz
             features: 000ce3bd-bfebfbff-00000001-20000800
        masking level: base

               Result: CPU 1 and CPU 2 are compatible for masking
            Mask type: 1  CPU 1 has a superset of features to CPU 2
                 Mask: 000ce3bd-bfebfbff-00000001-20000800

И наоборот, если бы добавляли X3353 к пулу с процессорами E5502:

# ./compare-cpu X3353.txt E5502.txt -v

                file1: X3353.txt
                file2: E5502.txt
            pool_mask: ffffff7f-ffffffff-ffffffff-ffffffff

                CPU 1: 
           model name: Intel(R) Xeon(R) CPU           X3353  @ 2.66GHz
             features: 000ce3bd-bfebfbff-00000001-20000800
        masking level: base

                CPU 2: 
           model name: Intel(R) Xeon(R) CPU           E5502  @ 1.87GHz
             features: 009ce3bd-bfebfbff-00000001-28100800
        masking level: full

               Result: CPU 1 and CPU 2 are compatible for masking
            Mask type: 2  CPU 1 has a subset of features to CPU 2
                 Mask: 000ce3bd-bfebfbff-00000001-20000800

Маска идентичная, но тип действия другой.
Какие же функции процессоров сравниваются? Есть 2 набора функций процессора: базовые функции и расширенные. Оба типа разделены на 2 половины, известные как ECX и EDX. Определение вариантов маскировки для данной пары процессоров требует сравнения значений функций в сочетании с уровнем маскировки данных процессоров. Для краткости XenServer хранит значения функций в шестнадцатеричном виде.
Рассмотрим функции процессоров E5502 и X3353:

|| CPU model || base_ecx || base_edx || ext_ecx || ext_edx || Masking level ||
| E5502       | 009ce3bd  | bfebfbff | 00000001  | 28100800 | full           |
| X3353       | 000ce3bd  | bfebfbff | 00000001  | 20000800 | base           |

Различия есть в Base_ecx и Ext_edx, преобразуем функции в двоичный код, чтобы увидеть конкретные различия в битах функций:

 || CPU model || base_ecx (bin)             || ext_edx (bin)                 ||
| E5502       | 000100111001110001110111101 |101000000100000000100000000000  |
| X3353       | 000000011001110001110111101 |100000000000000000100000000000  |
|             |    x  x                     |  x      x                      |
|             |    24 21                  0 |  28     21                   0 |

В процессоре E5502 в base_ecx присутствуют биты 21 и 24, которые отсутствуют в процессоре X3353. В функциях ext_edx в процессоре E5502 присутствуют биты 21 и 28, которые отсутствуют в X3353. Т.к. процессор E5502 полностью поддерживает маскировку (masking level: full), а процессор X3353 поддерживает маскировку на базовом уровне (masking level: base), то объединяющая маска возможна. Маска может быть рассчитана путем вычисления побитового И, взаимоисключающие функции процессоров будут отключены.

|| CPU model || base_ecx (bin)             || ext_edx (bin)                 ||
| E5502       | 000100111001110001110111101 |101000000100000000100000000000  |
| X3353       | 000000011001110001110111101 |100000000000000000100000000000  |
|             |    x  x                     |  x      x                      |
| Joint       | 000000011001110001110111101 | 100000000000000000100000000000 |

Переводим в шестнадцатеричный вид:

|| base_ecx || ext_edx ||
| 000ce3bd   | 20000800|

Складываем эти значения с неизмененными ext_ecx и base_edx и получаем маску объединения:
000ce3bd-bfebfbff-00000001-20000800
Посмотрев в Hardware Compatibility List, убеждаемся, что маска была правильная.
Осталось применить маску к хосту с процессором E5502:

xe host-set-cpu-features features=000ce3bd-bfebfbff-00000001-20000800 uuid=<host_uuid>

После перезагрузки хоста, у процессора E5502 те же функции, что и у X3353:

# xe host-cpu-info
cpu_count                : 4
                   vendor: GenuineIntel
                    speed: 1866.734
                modelname: Intel(R) Xeon(R) CPU           E5502  @ 1.87GHz
                   family: 6
                    model: 26
                 stepping: 5
                    flags: fpu de tsc msr pae mce cx8 apic sep mtrr mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht nx constant_tsc pni vmx est ssse3 sse4_1 sse4_2 popcnt
                 features: 000ce3bd-bfebfbff-00000001-20000800
    features_after_reboot: 000ce3bd-bfebfbff-00000001-20000800
        physical_features: 009ce3bd-bfebfbff-00000001-28100800
                 maskable: full

Physical Features при этом не изменяются.
На данный момент в матрице совместимости матрице совместимости нет новых процессоров E5-2400 и E5-2600 и маскирование новых процессоров на поколении Gen8 будет поддерживаться после выхода очередного обновления BIOS для серверов HP ProLiant:

# xe host-cpu-info
cpu_count : 32
vendor: GenuineIntel
speed: 2700.068
modelname: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz
family: 6
model: 45
stepping: 7
flags: fpu de tsc msr pae mce cx8 apic sep mtrr mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht nx constant_tsc nonstop_tsc aperfmperf pni pclmulqdq vmx est ssse3 sse4_1 sse4_2 x2apic popcnt aes hypervisor ida arat tpr_shadow vnmi flexpriority ept vpid
features: 17bee3ff-bfebfbff-00000001-2c100800
features_after_reboot: 17bee3ff-bfebfbff-00000001-2c100800
physical_features: 17bee3ff-bfebfbff-00000001-2c100800
maskable: no

Можно видеть, что функции процессора E5-2680 отличаются от функций E5502 только в base_ecx и новые процессоры поддерживают Flex Migration feature (как и должно быть), маска будет иметь вид:
009ce3bd-bfebfbff-00000001-2c100800 , но только с обновленной версией BIOS. Согласно матрице CPUпроцессоры E5-2600 поддерживаются и могут использоваться в XenServer 6.0, но пока только в гомогенных пулах.

Автор: Effi3


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js