Performance Best Practices for VMware vSphere 7.0. Часть 2 – ESXi General Considerations и CPU

Вторая часть моего осмысления гайда от VMware рассказывает о моментах, связанных с центральным процессором. Затрагиваются такие важные темы как Hyper-Threading, NUMA и Power Management.

ESXi General Considerations

Основные моменты, касающиеся гипервизоров:

  1. При планировании ресурсов на гипервизоре, необходимо так же учитывать нужды самого ESXi;
  2. Выделять виртуальным машинам столько ресурсов, сколько они требуют. Выделение большего, чем требуется, количества ресурсов иногда может снизить производительность машины, нежели увеличить. Так же это может сказаться на машинах, которые располагаются на том же хосте;
  3. Отключить неиспользуемое физическое оборудование. Сетевые порты, USB контроллеры, CD/DVD и т.п. Подобное оборудование может потреблять ресурсы CPU, некоторые PCI устройства могут потреблять так же ОЗУ;
  4. Неиспользуемое виртуальное оборудование в VM стоит так же отключить. Это может влиять на производительность;
  5. Рекомендуется использовать версию виртуального оборудования vHardware, которая поддерживается всеми хостами в кластере. Например, машина с версией оборудования 17 сможет запускаться только на хостах с vSphere 7.0.

ESXi CPU Considerations

Виртуализация CPU добавляет некоторые накладные расходы, в большинстве своем незначительные.

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

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

Хорошая практика – периодически наблюдать за загрузкой CPU:

  1. В случае, если load average в esxtop больше 1 – система нагружена;
  2. В целом, загрузка процессора на хосте в районе 80% является разумным пределом. Загрузка CPU на 90% соответствует серьезной перегрузке.

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

Самый простой пример – однопотоковое приложение, работающее на многопроцессорной системе.

Даже если гостевая ОС не использует все доступные ей процессоры, некоторые процессорные инструкции выполняются даже на незадействованных ядрах, создавая нагрузку на хост.

Hyper-Threading

Hyper-Threading, который так же называют SMT (simultaneous multithreading) позволяет представлять процессорное ядро, как два логических процессора, позволяющих запускать два независимых потока на одном физическом ядре одновременно.

Количество процессорных ядер в консоли vSphere будет удвоено. CPU 0 и 1 будут относиться к первому физическому ядру, 2 и 3 ко второму и так далее.

Hyper-Threading не удваивает производительность, но добавляет ее небольшой, а иногда и ощутимый прирост.

Включить использование HT можно в настройках BIOS (он должен поддерживать данную технологию). Обычно, включен по-умолчанию.

При использовании CPU Affinity (привязка vCPU виртуальной машины к ядрам процессора), не стоит привязывать машину\машины к двум логическим ядрам одного физического ядра. Например, привязать машину к ядрам 0 и 1, которые в итоге будут являться одним физическим ядром. Это может негативно сказаться на производительности.

NonUniform Memory Access (NUMA)

NUMA, или же Non-Uniform Memory Access — «неравномерный доступ к памяти», одна из первых вещей, которую стоит учитывать при определении ресурсов виртуальной машины.

Для незнакомых – у CPU есть локальная оперативная память и удаленная память, доступ к которой осуществляется через соседний процессор/процессоры (для которых эта память является «своей»).

Скорость доступа к «своей» памяти выше, чем к памяти «удаленной», поэтому в NUMA-системах стоит учитывать этот момент для минимизации доступа к удаленной памяти без необходимости.

Обычно, при правильной расстановке памяти в двухпроцессорных системах, половина памяти является для одного процессора локальной, а вторая – удаленной.

NUMA нода (не всегда, но в большинстве случаев) – один физический процессор и его локальная оперативная память.

Например, в системе с двумя 8-ядерными CPU и 256GB установленной оперативной памяти, размер NUMA ноды будет равен 8-и физическим ядрам и 128GB ОЗУ.

Более подробно я бы рекомендовал прочесть про NUMA в книге Host Resources Deep Dive.

Как уже было сказано в прошлой части, за работу NUMA в BIOS отвечает параметр Node Interleaving. Значение Disabled для данного параметра включает NUMA, соответственно ESXi начинает определять локальную и удаленную память для каждого процессора. Если параметр включен, система работает в режиме UMA, разделения на локальную и удаленную память не производится.

Виртуальные машины могут быть поделены на две категории:

  1. Виртуальная машина, количество vCPU которой равно, либо меньше, количества физических ядер одной NUMA ноды;
  2. Виртуальная машина, количество vCPU которой больше, чем есть в одной NUMA ноде. Такие машины называются Wide VM.

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

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

При использовании Hyper-Threading, виртуальная машина с количеством vCPU большим, чем количество физических ядер в процессоре, но меньшим, чем количество логических процессоров в одной NUMA ноде (количество физических ядер * 2), может получить преимущества NUMA, при включенном флаге numa.vcpu.preferHT в конфигурационном файле VM. В таком случае, виртуальная машина будет исполняться (по крайней мере стараться) в рамках одного физического процессора, за счет логических ядер HT.

Например, у нас имеется сервер с двумя процессорами по 4 ядра. Соответственно, при включении HT у нас будет доступно 8 логических ядер на каждом из CPU. При использовании параметра preferHT, и количестве vCPU 6, машина будет выполняться на одном процессоре, а не на двух, попадая при этом в рамки NUMA узла. Стоит понимать, что при этом машина не получит производительность полноценных 6 ядер.

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

Snoop Mode Selection

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

Существует 5 методов:

  1. Early Snoop (ES);
  2. Home Snoop (HS);
  3. Home snoop with Directory and Opportunistic Snoop Broadcast (HS with DIS + OSB);
  4. Cluster-on-Die (COD);
  5. Sub-NUMA cluster (SNC).

Cluster-on-Die позволяет логически разбить процессор на несколько NUMA узлов, каждый из которых состоит из нескольких ядер данного CPU.

Sub-NUMA cluster похож на COD, с отличиями в использовании LLC (last level cache, кэш 3-го уровня).

Подробнее про COD. Подробнее про SNC.

AMD EPYC Processor NUMA Settings

Настоятельно рекомендую ознакомиться с архитектурой процессоров AMD EPYC.

Во втором поколении процессоров AMD EPYC появились некоторые и обновленные настройки BIOS:

  1. NUMA Nodes per Socket (NPS) – позволяет презентовать двухсокентную систему как одну NUMA ноду (NPS0), презентовать каждый CPU как NUMA ноду (NPS1), представлять каждый CPU как две NUMA ноды (NPS2), а так же как четыре ноды (NPS4);
  2. CCX (Core Cache Complex) as NUMA Domain – Если включен, представлять каждый CCX как NUMA домен, если выключен, представлять весь CPU как NPS.

Persistent Memory (PMem) in NUMA Systems

Про PMem уже говорилось в первой части. Несмотря на то, что каждый DIMM слот, в который подключена планка PMem является локальным к своему NUMA узлу, ESXi не ассоциирует PMem с NUMA нодой автоматически. Это необходимо сделать вручную.

Host Power Management in ESXi

ESXi поддерживает следующие политики для Power Management:

  1. High performance – не использует никакие технологии энергосбережения. Обеспечивает максимальную производительность для систем, при полной утилизации процессорных ресурсов;
  2. Balanced – политика по умолчанию. Уменьшает потребление энергии процессором с минимальным, либо вообще отсутствующим влиянием на производительность;
  3. Low power – Большее сохранение электроэнергии, но и большее влияние на производительность;
  4. Custom – Настраиваемая политика.

Используемая по умолчанию политика Balanced в большинстве случаев не оказывает влияния на производительность высокоинтенсивных приложений и систем. Но, как уже говорилось ранее, она может оказать влияние на работоспособность чувствительных к задержкам приложений. В данном случае рекомендуется использовать политику «High Performance», обеспечивающую максимальную производительность без включения техник энергосбережения.

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

Все статьи по данному циклу:

Часть 1 – Hardware for Use with VMware vSphere;

Часть 2 – ESXi General Considerations и CPU;

Часть 3 – ESXi General Considerations и оперативная память;

Часть 4 – ESXi Storage Considerations;

Часть 5 – ESXi Networ Considerations;

Часть 6 – Guest Operating Systems.

Leave a Reply

Your email address will not be published. Required fields are marked *