Настройка количества ядер процессора VMware на сокет: лучшие практики

При настройке параметров процессора для новой виртуальной машины есть несколько ключевых концепций, которые следует понять: как рассчитать количество ядер процессора на один ЦП и ядер ЦП на один сокет, и как эти настройки влияют на скорость виртуальных машин. Кроме того, важно понять, что обеспечивает лучшую производительность ВМ: ограничение количества процессоров и наличие большего количества ядер ЦП или наличие большего количества процессоров с меньшим количеством ядер?

Продолжайте читать, чтобы узнать об этих концепциях и основных принципах настройки ЦП для виртуальных машин на хостах ESXi.

Терминология

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

Сокет ЦП

A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.

ЦП

A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.

Когда тактовая частота процессоров приблизилась к тепловому барьеру, производители изменили архитектуру процессоров и начали производить процессоры с несколькими ядрами ЦП. Чтобы избежать путаницы между физическими процессорами и логическими процессорами или ядрами процессора, некоторые производители называют физический процессор сокетом.

Ядро ЦП

A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.

Гиперпоточность

Гиперпоточность – это технология, разработанная инженерами Intel, чтобы привнести параллельные вычисления в процессоры, у которых есть только одно ядро процессора. Дебют гиперпоточности состоялся в 2002 году, когда был выпущен процессор Pentium 4 HT и предназначен для настольных компьютеров. Операционная система обнаруживает одноядерный процессор с гиперпоточностью как процессор с двумя логическими ядрами (не физическими ядрами). Точно так же четырехъядерный процессор с гиперпоточностью выглядит для ОС как процессор с 8 ядрами. Чем больше потоков запущено на каждом ядре, тем больше задач можно выполнить параллельно.

Современные процессоры Intel имеют как множество ядер, так и гиперпоточность. Гиперпоточность обычно включена по умолчанию и может быть включена или отключена в BIOS. Синхронное многопоточное исполнение (SMT) от AMD – это аналог гиперпоточности для процессоров AMD.

vCPU

A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.

Использование CPU сверх его возможностей

Использование CPU сверх его возможностей – это предоставление более логических процессоров (ядер CPU физического хоста) для виртуальных машин, чем общее количество логических процессоров, доступных на физическом хосте. Использование CPU сверх его возможностей позволяет повысить гибкость и эффективность использования ресурсов, но может привести к снижению производительности, если общий спрос превышает доступную физическую мощность CPU.

NUMA

NUMA (неоднородный доступ к памяти) – это дизайн памяти компьютера, используемый в многопроцессорных компьютерах. Идея состоит в том, чтобы предоставить отдельную память для каждого процессора (в отличие от UMA, где все процессоры получают доступ к общей памяти через шину). В то же время процессор может получить доступ к памяти, принадлежащей другим процессорам, используя общую шину (все процессоры имеют доступ ко всей памяти на компьютере). Преимущество процессора заключается в том, что он может получать доступ к собственной локальной памяти быстрее, чем к другой памяти в многопроцессорном компьютере.

Эти базовые архитектуры смешаны в современных многопроцессорных компьютерах. Процессоры сгруппированы в мультиядерном пакете или узле CPU. Процессоры, принадлежащие к одному узлу, разделяют доступ к модулям памяти, как в архитектуре UMA. Кроме того, процессоры могут получать доступ к памяти с удаленного узла через общий интерконнект. Процессоры делают это для архитектуры NUMA, но с более медленной производительностью. Этот доступ к памяти осуществляется через ЦП, который владеет этой памятью, а не напрямую.

Узлы NUMA представляют собой пары CPU/память, состоящие из разъема CPU и ближайших модулей памяти. NUMA обычно настраивается в BIOS как интерливирование узлов или настройка интерливирования памяти.

Пример: Хост ESXi имеет два сокета (два ЦП) и 256 ГБ ОЗУ. У каждого ЦП 6 ядер процессора. Этот сервер содержит два узла NUMA. Каждый узел NUMA имеет 1 сокет ЦП (один ЦП), 6 ядер и 128 ГБ ОЗУ.

ESXi всегда пытается выделить память для виртуальной машины из исходного (домашнего) узла NUMA. Домашний узел может быть изменен автоматически, если изменяются нагрузки на виртуальные машины и нагрузки на сервер ESXi.

vNUMA

Виртуальная NUMA (vNUMA) – это аналог NUMA для виртуальных машин VMware. vNUMA использует аппаратные ресурсы более одного физического узла NUMA для обеспечения оптимальной производительности. Технология vNUMA предоставляет гостевой операционной системе доступ к топологии NUMA. В результате гостевая ОС осведомлена о базовой топологии NUMA для наиболее эффективного использования. Версия виртуального аппаратного обеспечения ВМ должна быть 8 или выше для использования vNUMA.

Обработка vNUMA значительно улучшилась в VMware vSphere 6.5, и эта функция больше не контролируется значением количества ядер процессора в сокете в конфигурации ВМ. По умолчанию vNUMA включен для ВМ, имеющих более 8 логических процессоров (vCPUs). Вы можете включить vNUMA вручную для ВМ, отредактировав файл конфигурации VMX ВМ и добавив строку numa.vcpu.min=X, где X – количество vCPUs для виртуальной машины.

Расчет количества ядер

Давайте выясним, как рассчитать количество физических ядер ЦП, логических ядер ЦП и другие параметры на сервере.

  • Общее количество физических ядер ЦП на хост-машине рассчитывается по формуле:

    (Количество сокетов процессора) x (Количество ядер/процессор) = Количество физических процессорных ядер

    Учитываются только сокеты процессора с установленными процессорами.

  • Если поддерживается гиперпоточность, вычислите количество логических процессорных ядер с помощью формулы:

    (Количество физических процессорных ядер) x (2 потока/физический процессор) = количество логических процессоров

  • Наконец, используйте единственную формулу для расчета доступных ресурсов процессора, которые могут быть назначены для ВМ:

    (Число сокетов CPU) x (ядра CPU) x (потоки)

Например, если у вас есть сервер с двумя процессорами, каждый из которых имеет 4 ядра и поддерживает гиперпоточность, тогда общее количество логических процессоров, которые могут быть назначены для ВМ, равно:

2(процессора) x 4(ядра) x 2(HT) = 16 логических процессоров

Один логический процессор может быть назначен в качестве одного процессора или одного ядра ЦП для ВМ в настройках ВМ.

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

  • Общее количество тактов часов, доступных для ВМ, рассчитывается следующим образом:

    (Количество логических сокетов) x (Частота ЦП)

Если вы настроите виртуальную машину на использование 2 виртуальных ЦП с 2 ядрами, когда у вас есть физический процессор с тактовой частотой 3,0 ГГц, тогда общая тактовая частота будет составлять 2x2x3=12 ГГц. Если на хосте ESXi используется перераспределение ЦП, доступная частота для виртуальной машины может быть меньше рассчитанной, если виртуальные машины выполняют ЦП-интенсивные задачи.

Ограничения на количество ЦП-ядер на сокет

Ограничения ЦП/ядра в vSphere 7.0 Update 1 и vSphere 8.0 перечислены ниже.

  • Максимальное количество виртуальных процессорных сокетов, назначенных для виртуальной машины, составляет 768. Если вы хотите назначить более 768 виртуальных процессоров, настройте виртуальную машину на использование многопроцессорных процессоров.
  • Максимальное количество процессорных ядер, которые можно назначить одной виртуальной машине, составляет 768. Виртуальная машина не может использовать больше ЦП-ядер, чем количество логических ЦП-ядер на физической машине.
  • Горячее добавление ЦП. Если у виртуальной машины 128 виртуальных ЦП или менее 128 виртуальных ЦП, то вы не можете использовать функцию горячего добавления ЦП для этой виртуальной машины и изменить конфигурацию ЦП виртуальной машины, пока виртуальная машина находится в состоянии выполнения.Ограничения на ЦП ОС. Если операционная система имеет ограничение на количество процессоров, и вы назначаете больше виртуальных процессоров для виртуальной машины, дополнительные процессоры не определяются и не используются гостевой ОС. Ограничения могут быть вызваны техническими особенностями ОС и ограничениями лицензирования ОС. Обратите внимание, что существуют операционные системы, лицензируемые на основе сокета и на основе ЦП-ядра (например, Windows Server 2019).
  • Ограничения ЦП ОС. Если операционная система имеет ограничение на количество процессоров, и вы назначаете больше виртуальных процессоров для ВМ, дополнительные процессоры не будут распознаны и использованы гостевой ОС. Ограничения могут быть вызваны техническим дизайном ОС и ограничениями лицензирования ОС. Обратите внимание, что существуют операционные системы, которые лицензируются за сокет и за ядро ЦП (например, Windows Server2019).

Ограничения поддержки ЦП для некоторых операционных систем:

  • Windows10 Pro–2 ЦП
  • Windows10 Home–1 ЦП
  • Windows10 Workstation–4 ЦП
  • Windows Server2019 Standard/Datacenter–64 ЦП
  • Windows XP Pro x64–2 ЦП
  • Windows7 Pro/Ultimate/Enterprise–2 ЦП
  • Windows Server2003 Datacenter–64 ЦП

Вы можете проверить максимальные конфигурации для используемой версии vSphere на веб-сайте VMware.

Рекомендации по конфигурации

Для старых версий vSphere мы рекомендуем использовать сокеты вместо ядер в конфигурации ВМ. Сначала вы можете не заметить значительной разницы в количестве сокетов ЦП или ядер ЦП в конфигурации ВМ для производительности ВМ. Будьте в курсе некоторых особенностей конфигурации, которые имеют значение. Помните о NUMA и vNUMA, когда вы рассматриваете установку нескольких виртуальных процессоров (сокетов) для ВМ для достижения оптимальной производительности.

Если vNUMA не настроен автоматически, скопируйте топологию NUMA физического сервера. Вот некоторые рекомендации для виртуальных машин в VMware vSphere6.5 и более поздних версиях:

  • При определении количества логических процессоров (vCPU) для виртуальной машины предпочтительнее конфигурация ядер на сокет. Продолжайте, пока количество не превысит количество ядер CPU на одном NUMA узле на сервере ESXi. Используйте ту же логику, пока вы не превысите количество памяти, доступной на одном NUMA узле вашего физического сервера ESXi
  • Иногда количество логических процессоров для конфигурации вашей виртуальной машины превышает количество физических ядер CPU на одном NUMA узле или количество RAM больше общего количества памяти, доступной для одного NUMA узла. Рассмотрите возможность разделения количества логических процессоров (vCPU) между минимальным количеством NUMA узлов для оптимальной производительности.
  • Не устанавливайте нечетное количество vCPU, если количество CPU или количество памяти превышает количество ядер CPU. То же самое относится к случаю, когда память превышает количество памяти для одного NUMA узла на физическом сервере.
  • Не создавайте виртуальную машину с количеством vCPU, превышающим количество физических ядер процессора на вашем физическом хосте.
  • Если вы не можете отключить vNUMA из-за требований, не включайте функцию vCPU Hot-Add.

Если гостевая операционная система и другое программное обеспечение, установленное на виртуальной машине, лицензируются на основе количества процессоров, настройте виртуальную машину на использование меньшего количества процессоров с большим числом ядер ЦП. Например, Windows Server 2012 R2 лицензируется на основе сокетов, а Windows Server 2016 лицензируется на основе количества ядер.

Если вы используете переполнение ЦП в конфигурации ваших виртуальных машин VMware, имейте в виду следующие значения:

1:1 до 3:1 – Проблем с запуском ВМ не должно возникнуть

  • 3:1 до 5:1 – Наблюдается снижение производительности
  • 6:1 – Подготовьтесь к проблемам, вызванным значительным снижением производительности
  • Переполнение ЦП с нормальными значениями может использоваться в тестовых и разработчических средах без рисков.

Конфигурация виртуальных машин на хостах ESXi

Сначала определите количество логических процессоров (Количество ЦП) вашего физического хоста, необходимое для корректной работы виртуальной машины с достаточной производительностью. Затем определите количество виртуальных сокетов с процессорами (Количество сокетов в клиенте vSphere) и количество ядер ЦП (Ядер на сокет) для виртуальной машины, учитывая предыдущие рекомендации и ограничения. Ниже приведена таблица, которая может помочь вам выбрать необходимую конфигурацию.

Сначала определите количество логических процессоров (количество CPU) вашего физического хоста, необходимых для виртуальной машины для корректной работы с достаточной производительностью. Затем определите количество виртуальных сокетов с процессорами (количество сокетов в клиенте vSphere) и количество ядер CPU (ядер на сокет), которые вы должны установить для ВМ, учитывая предыдущие рекомендации и ограничения. В таблице ниже может помочь выбрать нужную конфигурацию.

Если вам нужно назначить более8 логических процессоров для ВМ, логика остается той же. Для расчета количества логических CPU в клиенте vSphere умножьте количество сокетов на количество ядер. Например, если вам нужно настроить ВМ для использования2-х процессорных сокетов, каждый из которых имеет2 ядра CPU, то общее количество логических CPU составляет2*2=4. Это означает, что вы должны выбрать4 CPU в параметрах виртуального оборудования ВМ в клиенте vSphere для применения этой конфигурации.

Настройка ядер на CPU в клиенте vSphere

Давайте объясним, как настроить параметры CPU для ВМ в клиенте VMware vSphere. Введите IP-адрес вашего vCenter Server в веб-браузере и откройте клиент VMware vSphere. В навигаторе откройте Хосты и кластеры и выберите нужную виртуальную машину, которую вы хотите настроить. Убедитесь, что ВМ выключена, чтобы иметь возможность изменить конфигурацию CPU. Процесс настройки идентичен в vSphere6.x,7.0 и8.0.

  1. Щелкните правой кнопкой мыши ВМ и в контекстном меню нажмите Изменить настройки, чтобы открыть настройки виртуальной машины.
  2. Расширьте раздел CPU в вкладке Виртуальное железо окна Редактировать настройки.
  3. CPU. Нажмите на выпадающее меню в строке CPU и выберите общее количество необходимых логических процессоров для этой ВМ. В этом примере мы выбираем 4 логических процессора для ВМ Ubuntu (blog-Ubuntu1).
  4. Ядра на сокет. В этой строке нажмите на выпадающее меню и выберите необходимое количество ядер для каждого виртуального сокета (процессора).
  5. Горячая замена CPU. Если вы хотите использовать эту функцию, установите флажок Включить горячую добавку CPU. Имейте в виду ограничения и требования.

  6. Резервирование. Выберите гарантированное минимальное распределение тактовой частоты процессора (частоты, МГц или ГГц) для виртуальной машины на узле ESXi или кластере.
  7. Лимит. Выберите максимальную тактовую частоту для процессора ВМ. Эта частота является максимальной частотой для виртуальной машины, даже если эта ВМ является единственной ВМ, работающей на узле ESXi или кластере с большим количеством свободных ресурсов процессора. Установленный лимит действителен для всех виртуальных процессоров ВМ. Если ВМ имеет 2 одноядерных процессора, и лимит составляет 1000 МГц, то оба виртуальных процессора работают с общей тактовой частотой одного миллиона циклов в секунду (500 МГц для каждого ядра).
  8. Акции. Этот параметр определяет приоритет потребления ресурсов виртуальными машинами (Low, Normal, High, Custom) на хосте ESXi или ресурсном пуле. В отличие от параметров Резерв и Лимит , параметр Акции применяется к ВМ только в случае недостатка ресурсов ЦП внутри хоста ESXi, ресурсного пула или кластера DRS.

    Доступные варианты для параметра Акции :

    • Low – 500 акций на виртуальный процессор
    • Normal – 1000 акций на виртуальный процессор
    • High – 2000 акций на виртуальный процессор
    • Custom – задать пользовательское значение

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

  9. Аппаратная виртуализация. Установите этот флажок, чтобы включить вложенную виртуализацию. Этот вариант полезен, если вы хотите запустить ВМ внутри ВМ для тестирования или образовательных целей.
  10. Счетчики производительности. Эта функция используется для того, чтобы позволить приложению, установленному виртуальной машине, отлаживаться и оптимизироваться после измерения производительности ЦП.
  11. Аффинность планирования. Эта опция используется для назначения ВМ на определенный процессор. Введенное значение может быть таким: «0, 2, 4-7».
  12. I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.

Если вы используете автономный хост ESXi и используете VMware Host Client для настройки ВМ в веб-браузере, принцип конфигурации такой же, как для VMware vSphere Client.

Настройка ядер на ЦП в VMware Workstation

Если вы подключаетесь к серверу vCenter или хосту ESXi в VMware Workstation и открываете настройки ВМ виртуальной машины vSphere, вы можете редактировать основную конфигурацию виртуальных процессоров.

  1. Щелкните ВМ > Настройки, выберите вкладку Аппаратное обеспечение и щелкните Процессоры.
  2. Выберите количество виртуальных процессоров (сокетов) и количество ядер на процессор.

На следующем скриншоте вы видите конфигурацию процессора для той же виртуальной машины Ubuntu, которая была сконфигурирована ранее в клиенте vSphere.

Общее количество ядер процессора (логические ядра физических процессоров на хосте ESXi или кластере) автоматически рассчитывается и отображается ниже. В сравнении, в интерфейсе клиента vSphere вы устанавливаете общее количество ядер процессора (опцию ЦП), выбираете количество ядер на процессор, а затем количество виртуальных сокетов рассчитывается и отображается.Настройка процессоров ВМ в PowerCLI

Настройка процессоров ВМ в PowerCLI

Если вы предпочитаете использовать интерфейс командной строки для настройки компонентов VMware vSphere, используйте PowerCLI для редактирования конфигурации CPU виртуальных машин. Давайте выясним, как редактировать конфигурацию CPU виртуальной машины для ВМ, которая является Ubuntu 19 в PowerCLI. Команды используются для ВМ, которые выключены.

  1. Чтобы настроить ВМ для использования двух одноядерных виртуальных процессоров (используются два виртуальных сокета), используйте команду:

    get-VM -name Ubuntu19 | set-VM -NumCpu 2

    Введите другое число, если вы хотите установить другое количество процессоров (сокетов) для ВМ.

  2. В следующем примере показано, как настроить ВМ для использования двух двухъядерных виртуальных процессоров (используются 2 сокета):

    $VM=Get-VM -Name Ubuntu19

    $VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}

    $VM.ExtensionData.ReconfigVM_Task($VMSpec)

    $VM | Set-VM -NumCPU 2

  • После применения новой конфигурации ЦП к виртуальной машине эта конфигурация сохраняется в файле конфигурации VMX виртуальной машины. В нашем случае мы проверяем файл Ubuntu19.vmx, расположенный в каталоге VM на хранилище данных (/vmfs/volumes/datastore2/Ubuntu19/). Строки с новой конфигурацией ЦП находятся в конце файла VMX.

    numvcpus = “2”

    cpuid.coresPerSocket = “2”

  1. Если вам нужно уменьшить количество процессоров (сокетов) для ВМ, используйте ту же команду, что и раньше, с меньшим количеством. Например, чтобы установить один процессор (сокет) для ВМ, используйте эту команду:

    get-VM -name Ubuntu19 | set-VM -NumCpu 1

Основное преимущество использования PowerCLI заключается в возможности настройки нескольких ВМ массово. Автоматизация задач важна и удобна, если количество виртуальных машин для настройки высоко. Используйте командлеты VMware и синтаксис Microsoft PowerShell для создания сценариев.

Заключение

Производительность приложений, работающих на виртуальной машине, зависит от правильной конфигурации ЦП и памяти. В VMware vSphere 6.5 и последующих версиях установите больше ядер в ЦП для виртуальных машин и используйте подход с количеством ядер ЦП на сокет. Если вы используете версии vSphere, более старые, чем vSphere 6.5, настройте количество сокетов без увеличения количества ядер ЦП для виртуальной машины из-за различного поведения vNUMA в более новых и старых версиях vSphere. Учтите лицензионную модель программного обеспечения, которое вам необходимо установить на виртуальную машину. Если программное обеспечение лицензируется на ЦП, настройте больше ядер на ЦП в настройках виртуальной машины.

При использовании виртуальных машин в VMware vSphere, не забудьте использовать инструменты резервного копирования VMware. Используйте NAKIVO Backup & Replication для резервного копирования ваших виртуальных машин, включая виртуальные машины с несколькими ядрами на ЦП. Регулярное резервное копирование помогает защитить ваши данные и восстановить данные в случае бедствия.

Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/