Сегодня расскажем о том, как устроена поддержка режима эмуляции ЦП для кластеров, созданных на базе Кибер Инфраструктуры.
Что такое эмуляция ЦП и зачем она нужна?
Большинство компаний создает и развивает свою инфраструктуру поэтапно, добавляя серверы по мере необходимости. Такая возможность масштабирования вычислительных сервисов является одной из ключевых особенностей решений класса 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.