Действительно ли виртуальная машина с 2 процессорами быстрее, чем виртуальная машина с 4 процессорами?

67

Наш ИТ-специалист создал виртуальную машину с 2 выделенными процессорами, а не с 4, которые я запрашивал. Их причина в том, что виртуальная машина работает лучше с 2 процессорами, а не с 4 (по их словам). Обоснование заключается в том, что гипервизор VM (в данном случае VMWare) ожидает доступности всех процессоров, прежде чем задействовать какой-либо из них. Таким образом, требуется больше времени для ожидания 4, а не 2 процессоров.

Имеет ли это утверждение смысл?

AngryHacker
источник

Ответы:

62

Раньше это было правдой, но больше не является исключительно правдой.

То, что они имеют в виду, является строгим совместным планированием .

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

Теперь, если на хосте только 4 потока, вам было бы глупо распределить их все. Если у него два процессора и 4 потока на процессор, то вам может не потребоваться выделять все содержимое одного процессора, поскольку ваш гипервизор должен попытаться сохранить виртуальные ЦП на одном узле NUMA, чтобы ускорить доступ к памяти, и вы усложнение этой работы путем выделения целого сокета одной виртуальной машине (см. стр. 12 этого PDF-документа выше).

Таким образом, существуют сценарии, в которых меньшее количество виртуальных ЦП может работать лучше, чем большее, но это не соответствует действительности в 100% случаев.

Учитывая все сказанное и сделанное, я очень редко выделяю более 3 виртуальных ЦП на гостя. Каждый получает по умолчанию 2, 3, если это тяжелая рабочая нагрузка, и 4 для таких вещей, как SQL-серверы или виртуальные машины с большой нагрузкой, или терминальный сервер с большим количеством пользователей.

Марк Хендерсон
источник
3
Просто в стороне - даже без препятствий виртуализации, как правило, сложно написать программное обеспечение, использующее параллелизм. Если ваши программные парни недостаточно хороши, на самом деле может быть лучше иметь четыре виртуальных хоста, на которых запущен один экземпляр программного обеспечения, каждый, чем один хост, на котором выполняются четыре потока выполнения.
Luaan
4
@Luaan На коробке установлен SQL Server, так что я предполагаю, что у них там есть хорошие парни из софта.
AngryHacker
1
@AngryHacker да SQL-сервер может очень эффективно использовать все 4 ядра, если у вас есть соответствующие MAXDOPнастройки. Однако, в зависимости от рабочей нагрузки, чрезмерно облагаемый налогом сервер SQL часто является признаком плохого проектирования базы данных - плохих индексов, отсутствие кластеризованных индексов, слишком много индексов, отсутствие оптимизации и т. Д. (Не всегда, но часто).
Марк Хендерсон
1
@Luaan Это все еще параллелизм ... просто с гораздо большей задержкой, если им нужно поговорить друг с другом. :)
Рейраб
@MarkHenderson Это довольно хорошо оптимизировано, но некоторые рабочие нагрузки слишком велики, чтобы их можно было легко обрабатывать двумя ЦП плюс кучей других запросов одновременно.
AngryHacker
15

Это во многом зависит от базового гипервизора и администраторов, которые его запускают, позвольте мне объяснить:

  1. Это плохая практика - просто произвольно давать вам 4 процессора только потому, что вы просили об этом. Вообще говоря, вы думаете , что вам нужно 4; но мониторинг ресурсов говорит, что вам нужно только 1.
  2. VMware ESXi, например, требует блокировки всех pCPU, когда vCPU делает запрос ресурсов ЦП ; так что на этом гипервизоре это плохо для производительности. KVM не блокирует, как ESXi; он использует базовый планировщик ядра, но все же в долгосрочной перспективе может создать конкуренцию ЦП.
  3. Если вы строите системы с самого начала с помощью 4 процессоров, вы на самом деле не масштабируете их, а увеличиваете их (что является плохой практикой, особенно на виртуальных машинах). Возможно, вы захотите узнать, как вы разрабатываете архитектуру того, над чем работаете, чтобы ее можно было адаптировать к современной современной облачной инфраструктуре.

Что вы можете извлечь из этого? Всегда создавайте виртуальные машины с минимальными ресурсами и увеличивайте по мере необходимости. Всегда масштабируйте, а не увеличивайте, и вы сможете запускать свое приложение где угодно.

Из-за блокировки, которая может возникнуть с гипервизором, действительно верно, что 2 процессора могут быть быстрее, чем 4 процессора.


источник
4

Да, утверждение имеет смысл в целом. Тем не менее, это то, что вы должны проверить для вашей точной конфигурации и рабочей нагрузки. Иногда лучше использовать больше процессоров, если вы действительно можете ими воспользоваться. Однако, если у вас нет такого большого параллелизма, виртуальная машина, настроенная с меньшим количеством процессоров, часто будет работать немного лучше, так как избегает замедлений из-за пауз состояния CPU.

Я сократил количество виртуальных ЦП на ряде наших виртуальных машин и увеличил пропускную способность большинства. Горстка ухудшилась, и ее нужно было увеличить по количеству vCPU.

Брайан Кноблаух
источник