Под одну гребенку. Режим эмуляции ЦП в Кибер Инфраструктуре

от автора

Сегодня расскажем о том, как устроена поддержка режима эмуляции ЦП для кластеров, созданных на базе Кибер Инфраструктуры.

Что такое эмуляция ЦП и зачем она нужна?

Большинство компаний создает и развивает свою инфраструктуру поэтапно, добавляя серверы по мере необходимости. Такая возможность масштабирования вычислительных сервисов является одной из ключевых особенностей решений класса HCI (гиперконвергентная инфраструктура), к которым относится и наш продукт Кибер Инфраструктура. Но так как серверы добавляются спустя какое‑то время, в них могут использоваться процессоры не тех моделей, что установлены в уже используемых серверах. В итоге мы получаем смешанное окружение, в котором по‑прежнему требуется динамическая миграция ВМ между хостами, например, для упрощения обновления кластеров и балансировки рабочих нагрузок между вычислительными узлами. А так как у процессоров будет отличающийся набор инструкций, миграция ВМ может оказаться затруднительной.

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

Поддержка режима эмуляции ЦП в Кибер Инфраструктуре

Поддержка режима эмуляции уже давно была Кибер Инфраструктуре, но на уровне CLI. В версии 6.0 мы добавили эту поддержку в веб‑консоль продукта, а также реализовали ряд доработок и улучшений.

В принципе, если назначить всем узлам кластера модель виртуального CPU qemu64 (или kvm64), то, поскольку это эмулируемая модель, ВМ будет видеть один и тот же процессор и набор инструкций независимо от производителя хостового ЦП. Следовательно, горячая миграция ВМ в таком кластере не будет ограничена. Однако использование такой модели крайне не рекомендуется, поскольку производительность ВМ с большой вероятностью будет хуже, чем при использовании более современной базовой модели ЦП (или режимов эмуляции host‑passthrough/host‑model), кроме того, ВМ будет подвержена всем аппаратным уязвимостям.

Чтобы задать режим эмуляции процессора, в консоли необходимо выбрать Настройки > Системные настройки, а затем перейти на вкладку Эмуляция процессора ВМ.

Поддерживаются следующие режимы эмуляции, определяющие, какая модель будет назначена и какие дополнительные функции будут доступны виртуальному ЦП:

Host-model (по умолчанию)

  • Модель и набор дополнительных функций виртуального ЦП подбираются таким образом, чтобы они наиболее точно соответствовали модели и дополнительным функциям ЦП вычислительного сервера, на котором размещена виртуальная машина (полное соответствие не гарантируется).

    • Этот режим обеспечивает меньший уровень производительности и безопасности, чем режим host-passthrough, но предоставляет большую степень работоспособности горячих миграций виртуальных машин в случае, когда на вычислительных серверах используются незначительно отличающиеся модели ЦП.

Host-passthrough 

  • Виртуальной машине предоставляется виртуальный ЦП такой же модели и с такими же дополнительными функциями, как у ЦП вычислительного сервера, на котором размещена виртуальная машина.

    • Данный режим обеспечивает наибольший уровень производительности и безопасности, но не гарантирует работоспособность горячих миграций виртуальных машин при использовании разных моделей ЦП на вычислительных серверах. Таким образом, режим host‑passthrough рекомендуется использовать только в том случае, когда горячая миграция ВМ не предполагается.

Custom 

  • Виртуальной машине предоставляется виртуальный ЦП указанной модели с точечным выбором дополнительных инструкций. Модель ЦП выбирается из списка моделей ЦП, совместимых со всеми вычислительными серверами (аналогично для дополнительных функций).

    • Этот режим обеспечивает наименьший уровень производительности и безопасности, но гарантирует работоспособность горячих миграций виртуальных машин, даже если на вычислительных серверах используются разные модели ЦП. Список дополнительных функций каждой модели ЦП можно получить с помощью команды vinfra service compute additional-cpu-features.

Помимо этого, поддерживается возможность глобально включать или выключать вложенную виртуализацию: создавать виртуальные машины внутри виртуальных машин, а также управлять защитой от атак класса Spectre. В последнем случае необходимо использовать режим эмуляции Custom и в поле Выберите дополнительные функции ЦП указать флаг spec-ctrl. Использование этой опции снизит производительность примерно на 15%.

Отметим, что уникальной для Кибер Инфраструктуры является возможность выбора режима эмуляции ЦП для отдельной виртуальной машины. Например, в OpenStack такая функциональность отсутствует.

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

  • для обеспечения баланса между возможностью миграции ВМ и производительностью

  • выбора модели ЦП для кластера и для конкретной ВМ

  • включения и выключения защиты от атак класса Spectre

Для заказчиков это ценно тем, что улучшается миграция ВМ между узлами неоднородного кластера и появляется возможность использования смешанного кластера с процессорами AMD и Intel.


ссылка на оригинал статьи https://habr.com/ru/articles/856934/