Перейти к содержанию

Процессоры

Информация

Для просмотра детальной информации о процессорах ВМ необходимо в разделе Виртуальные машины выбрать целевую ВМ и в открывшемся окне перейти в раздел Процессоры.

В разделе Процессоры указана следующая информация:

  • Количество сокетов - количество сокетов ВМ.
  • Количество ядер на сокет - количество ядер на сокет ВМ.
  • Потоков на ядро - количество потоков на ядро ВМ.
  • Общее количество потоков - общее количество потоков ВМ.
  • Максимальное количество потоков - максимальное количество потоков ВМ.
  • Режим определения - режим эмулирования CPU.
  • Модель - эмулируемая модель процессора.
  • Приоритет vCPU ВМ - приоритет виртуальных процессоров.
  • Частота.
  • Кол-во минимально гарантированных vCPU - количество минимально гарантированных виртуальных процессоров.
  • Приоритет виртуальных процессоров (vCPU).
  • Дополнительные функции vCPU.

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

Настройку процессоров можно выполнить с помощью кнопки Изменение настроек процессоров, которая позволяет изменить следующие параметры:

  • количество vCPU и максимальное количество vCPU. При нажатии кнопки Изменение количества vCPU в открывшемся окне необходимо указать имеющееся количество и максимальное количество процессоров, после чего подтвердить операцию, нажав кнопку OK;

  • топология процессоров. При нажатии кнопки Изменение топологии vCPU в открывшемся окне необходимо задать количество сокетов, ядер на сокет и потоков, после чего подтвердить операцию, нажав кнопку OK;

  • модель процессора. При нажатии кнопки Режим определения модели отображается оптимальный процессор, а также раскрывающийся список выбора режима определения процессора. Необходимо выбрать режим, после чего подтвердить операцию, нажав кнопку OK;

  • привязка виртуальных процессоров к физическим ядрам. При нажатии кнопки Изменение привязок vCPU в открывшемся окне необходимо заполнить привязку процессоров ВМ к физическим, после чего подтвердить операцию, нажав кнопку OK;

  • приоритеты выделения процессорного времени ВМ. При нажатии кнопки Изменение приоритета vCPU в открывшемся окне необходимо выбрать из раскрывающегося списка базовый приоритет процессора, детальный приоритет процессора, гарантированное количество vCPU, после чего подтвердить операцию, нажав кнопку Сохранить;

  • изменение частоты vCPU. При нажатии кнопки Изменение частоты vCPU в открывшемся окне необходимо указать частоту в МГц, после чего подтвердить операцию, нажав кнопку Сохранить;

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

Рекомендуемое максимальное количество vCPU

Не рекомендуется создавать ВМ c количеством vCPU больше, чем физических ядер на хосте.

Note

Например, если в сервере 2 процессора по 28 физических ядер, то рекомендуемый максимум vCPU равен 56.

Горячее добавление vCPU

Параметр "Максимальное количество vCPU" стоит ставить больше, если планируется увеличивать количество vCPU при включенной ВМ. При изменении max_cpu_count топология подстраивается под этот параметр, то есть включенная ВМ видит именно max_cpu_count vCPU, но при этом только на cpu_count vCPU подключается питание, а (max_cpu_count - cpu_count) vCPU видятся неактивными (без питания).

Топология процессора

Изменение топологии процессора предназначено для удовлетворения требований ОС ВМ. Некоторые ОС не умеют работать с многоядерными процессорами, некоторые ограничивают количество сокетов CPU, а некоторые ОС ограничивают количество ядер на сокет.

Модель процессора

Модель процессора может влиять на функциональность ОС ВМ и на возможность миграции ВМ внутри кластера.

Доступные функции узла можно посмотреть во вкладке узла Оборудование - Процессоры.

Модель (архитектура) CPU виртуальной машины может быть:

  • default - назначаются виртуальные процессоры. Если ОС ВМ чувствительна к набору инструкций центрального процессора, то использование виртуальных процессоров может не удовлетворять требованиям ОС ВМ. Доступные функции берутся из модели процессора qemu64;

  • host-model - модель, аналогичная физическому, с незначительными ограничениями. Доступные функции берутся из узла, где находится ВМ;

  • host-passthrough - фактическая трансляция полного комплекта инструкций и модели физического процессора. Доступные функции берутся из узла, где находится ВМ;

  • custom - выбор модели процессора из списка. Необходимо учитывать предоставляемые наборы инструкций выбираемой модели и ограничения для ОС ВМ перед сменой типа процессора на custom. Доступные функции берутся из известного набора инструкций для каждого процессора, определённого в гипервизоре.

Привязка процессоров ВМ к физическим ядрам

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

Внимание!

Эту опцию рекомендуется применять только к высоко нагруженным ВМ, миграция которых невозможна.

Для привязки vCPU необходимо перейти во вкладку Процессоры – Настройка – Привязка. В окне Привязка процессора можно получить информацию о количестве виртуальных процессоров на ВМ и физических процессоров на узле. Далее требуется указать номер виртуального процессора и через двоеточие номер физического процессора сервера виртуализации.

Если необходимо указать привязку нескольких виртуальных процессоров, каждую пару привязки нужно указать через пробел.

Пример

Для привязки vCPU0 и vCPU1 к node_cpu4 и node_cpu5 необходимо указать 0:4 1:5. Нумерация процессоров начинается с 0 (node_cpu0).

Параметр 0:0 привязывает ВМ к одному процессору

vcpu_binding.png

Приоритет выделения процессорного времени

Приоритет выделения процессорного времени ВМ может понизить или повысить приоритет выделения ресурсов для ВМ.

Есть 2 параметра приоритета процессорного времени ВМ: cpu_priority (LOW, MEDIUM, HIGH) и cpu_shares (от 2 до 10000 (макс. ВМ на кластер)).

По умолчанию приоритет cpu_priority у ВМ средний (MEDIUM), что означает, что через nice на каждый процесс ВМ на узле ставится приоритет 10. Низкий (LOW) приоритет соответствует 19, высокий (HIGH) приоритет соответствует 1.

По умолчанию приоритет cpu_shares у всех ВМ 1024, что означает, что гипервизор считает ВМ одинаково приоритетными. Изменение cpu_shares от 2 до 10000 позволяет изменить относительную приоритезацию процессорного времени ВМ относительно других ВМ. Настраиваемый параметр cpu_shares учитывается для ВМ в целом, при этом количество vCPU не учитывается. Таким образом, стоит увеличить cpu_shares по мере увеличения количества vCPU.

Стоит обратить внимание, что это относительная расстановка приоритетов, а не абсолютная мера времени. Как таковая, приоритезация действительно вступает в силу только в том случае, если перегружены процессоры узла, так что vCPU от разных ВМ конкурируют друг с другом за процессорное время узла. Таким образом, изменение cpu_shares не даёт N единиц процессорного времени. То есть в периоды, когда 2 ВМ нуждаются в процессорном времени, а свободного времени недостаточно для удовлетворения обоих, доступное свободное процессорное время будет выделено ВМ, соответствующим соотношению общих ресурсов.

Тест приоритета cpu_shares

Тест на производительность на разных ВМ (выполняется одновременно). На рисунке показаны 3 процесса ВМ (см. столбец %CPU).

cpu_shares_3_vms.png

С приоритетом - 1024 (%CPU - 50):

cpu_shares_1024.png

С приоритетом - 512 (%CPU - 25):

cpu_shares_512.png

Время выполнения теста согласуется с приоритетом.

vNUMA

На данный момент по умолчанию у ВМ есть всегда только один vNUMA узел, к которому относятся все vCPU. Сделано так для того, чтобы можно было "на лету" добавлять планки оперативной памяти и дополнительные vCPU.

Пример одной vNUMA в ВМ с 32 vCPU: image

При включении настройки трансляции топологии vNuma (Настройки контроллера), если у ВМ максимальное количество vCPU больше 8, то количество vNuma узлов ВМ равно количеству Numa узлов узла. Максимальное количество vCPU и оперативная память делятся поровну между vNuma узлами ВМ.

NUMA

Для управления резервацией и распределением процессов вычислительного узла можно задействовать сервис numad. Включение/отключение его работы происходит через Настройки контроллера. Настройка действует сразу на все узлы под управлением данного контроллера. При включении настройки через некоторое время включится сервис numad, смотреть его журналы можно командой log numad.

Просмотр текущей статистики по numa осуществляется через команду numastat, для ВМ numastat -p qemu.

Посмотреть id включенной ВМ можно командой vm info {vm_name or vm_id}.

NUMA и KSM

Рекомендуется при включении сервиса numad отключить параметр "режим дедуплицирования памяти между NUMA nodes" (Merge across nodes) в Настройках KSM узла.

Ограничение частоты vcpu

VMware - ограничение ресурсов виртуальных машин

Имеем виртуальную машину со следующими характеристиками: vmware_cpu_1.png Параметры Limit, Reservation и Shares для пулов ресурсов в VMware vSphere / ESX устанавливаются следующим образом: vmware_cpu_0.png Этими тремя параметрами определяется потребление виртуальными машинами оперативной памяти и процессорных ресурсов хоста VMware ESX.

Limit: определяет ограничение потребления физических ресурсов виртуальной машиной (в пределах хоста ESX) или пулом (в пределах кластера) при любых обстоятельствах. Если поставить виртуальной машине Limit в 333 МГц, то именно с такой максимальной производительностью и будет работать ее vCPU, даже если на хосте с физическими процессорами по 3400 МГц больше никаких машин нет. При этом, если для виртуальной машины установлен Limit в 333 МГц, то оба ее процессора в совокупности не получат более 333 миллионов циклов CPU в секунду, оставшиеся свободные циклы в эту секунду планировщик ESX будет просто ждать.

Reservation: определяет сколько ресурсов процессора будет гарантировано виртуальной машине при работе.

Shares: определяет приоритезацию потребления виртуальных машин между собой в пределах хоста ESX или пула ресурсов. В отличие от Limit и Reservation, Shares имеют значение только тогда, когда ощущается нехватка ресурсов VMware ESX. Есть три стандартные настройки Shares - Low, Normal и High. Чем больше значение Shares - тем больше машина получит ресурсов в пределах пула или отдельного хоста ESX. Можно задать значение Custom и самому расставить соотношение приоритетов, ресурсы будут раздаваться относительно этих значений. Shares вступает в действие при нехватке ресурсов CPU.

vmware_cpu_2.png

Выполнены два теста с параметром Limit = Unlimited и Limit = 333MHz. Видно, что скорость выполнения теста при уменьшении тактовой частоты уменьшается пропорционально.

Linux - ограничение ресурсов виртуальных машин

Completely_Fair_Scheduler

Совершенно честный планировщик CFS (completely fair scheduler). Cgroup ЦПУ предоставляет два типа контроля ресурса ЦПУ:

  • cpu_shares: Содержит некое целое значение, которое определяет относительную долю времени ЦПУ, доступного имеющимся в этой cgroup задачам. Например, задачи в двух cgroups, которые имеют установленными в 100 cpu_shares получат равное время ЦПУ, однако задачи в cgroups, которые обладают cpu_shares, установленным в 200 получат в два раза больше времени ЦПУ чем те задачи, в cgroup которых cpu.shares установлен равным 100.

  • vcpu_quota: Определяет общее значение времени в микросекундах, на протяжении которого все задачи в cgroup способны работать за один период (определяется через vcpu_period). Как только все задачи в некой cgroup использует всё заданное этой квотой время, они останавливаются на тот промежуток времени, который определяется значением периода и не допускается к исполнению в следующем периоде.

  • vcpu_period: Это период, из которого выделяются квоты ЦПУ для cgroup (vcpu_quota), а значения параметров квоты и периода действуют на основе применения к каждому ЦПУ.

Например:

  • Чтобы позволить соответствующей cgroup быть способной выполнять доступ к отдельному ЦПУ на 0.2 секунды на протяжении каждой секунды, установите vcpu_quota в 200000, а vcpu_period в 1000000.

  • Чтобы позволить некому процессу задействовать отдельный ЦПУ на 100%, установите vcpu_quota в 1000000 и vcpu_period равным 1000000.

  • Чтобы допускать некому процессу использовать 100% два ЦПУ, установите vcpu_quota_ равной 2000000, в то время как vcpu_period равным 1000000.

Для контейнеров все тоже самое (docker resource_constraints.

Для виртуальных машин используем команду

virsh + schedinfo domain [[--config] [--live] | [--current]] [[--set] parameter=value]...

  • --live устанавливает параметр в работающую ВМ;
  • --config повлияет на ВМ на следующем старте.

Для того же самого теста. Если quote в 10 раз меньше period, планировщик отдает 10 раз меньше времени этой ВМ.

Дефолтные значения для планировщика

linux_cpu_3.png linux_cpu_5.png

Устанавливаем vcpu_quota=10000

linux_cpu_4.png linux_cpu_6.png

В xml-описании ВМ сделаны следующие записи

linux_cpu_7.png

Пример изменения частоты и результаты

Изменим частоту физического и виртуального процессора на 1000Мгц.

vcpu_1000_mhz.png

Тест показывает результат:

vcpu_1000_mhz_perftest.png

Если изменим частоту виртуального процессора на 333Мгц, то тест покажет результат:

vcpu_333_mhz_perftest.png

То есть планировщик отдает только ⅓ процессорного времени для этой ВМ относительно изначальной частоты 1000Мгц.