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

    Не так давно у заказчика появилась необходимость собрать пул виртуальных машин, который должен был состоять из серверов 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, но пока только в гомогенных пулах.
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      При pool-join всегда же была функция --force, которая позволяла на свою собственную задницу натворить что угодно.
        0
        Как оказалось, в случае с новыми процессорами E5-2680 эта функция не работает, поэтому решил разобраться почему.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое