Как выдаются процессоры виртуальной машине в VMware ESXi?

«Как выдаются процессоры виртуальной машине в VMware ESXi?» — вопрос из категории Виртуализация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В VMware ESXi виртуальные процессоры (vCPU) назначаются виртуальной машине (ВМ) через её конфигурацию. vCPU — это виртуальное представление физического ядра или потока ЦП гипервизора.

Основные параметры конфигурации vCPU в vSphere Client/Web Client:

  1. Количество vCPU: Общее число виртуальных процессоров для ВМ. Например, 4 vCPU.
  2. Количество ядер на сокет (Cores per Socket): Определяет топологию процессора, видимую гостевой ОС. Например, 4 vCPU можно представить как 2 сокета × 2 ядра.
    • Зачем это нужно? Для лицензирования ПО внутри гостевой ОС (некоторые лицензии привязаны к сокетам) и для оптимизации работы приложений, чувствительных к NUMA.

Управление ресурсами ЦП (на вкладке "Ресурсы" ВМ):

  • Резервирование (Reservation): Гарантированная доля физической мощности ЦП (в МГц), которая всегда будет выделена ВМ. Например, 2000 МГц.
  • Лимит (Limit): Максимальная доля ЦП (в МГц), которую может использовать ВМ. По умолчанию — неограниченно.
  • Доли (Shares): Относительный приоритет при конкуренции за ресурсы ЦП между ВМ. Значения: Low, Normal, High, Custom.

Практические рекомендации из опыта:

  • Не завышайте количество vCPU. Назначение ВМ больше vCPU, чем ей реально нужно, может привести к увеличению времени CPU Ready (ожидания в очереди планировщика гипервизора) и снижению общей производительности. Начинайте с минимального необходимого количества.
  • Соотношение vCPU к физическим ядрам. Для высокопроизводительных ВМ (СУБД, серверы приложений) старайтесь не превышать соотношение 4-6 vCPU на одно физическое ядро на хосте, чтобы избежать contention.
  • Используйте резервирование для критически важных ВМ, чтобы гарантировать их производительность.
  • Мониторинг. Всегда отслеживайте метрики CPU Ready (должно быть < 5%) и CPU Usage в vCenter или через esxtop.

Пример настройки через PowerCLI:

Get-VM "App-Server" | Set-VM -NumCpu 4 -CoresPerSocket 2 -CpuReservationMhz 2000 -CpuLimitMhz 8000 -CpuSharesLevel High