
Наш ИТ-отдел создал ВМ с выделенными 2 ЦП вместо запрошенных мной 4. Причина в том, что ВМ работает лучше с 2 ЦП, а не с 4 (по их словам). Обоснование в том, что гипервизор ВМ (в данном случае VMWare) ждет, пока все ЦП будут доступны, прежде чем задействовать любой из них. Таким образом, ожидание 4 ЦП занимает больше времени, чем ожидание 2 ЦП.
Имеет ли это утверждение смысл?
решение1
Раньше это было правдой, но теперь это уже не единственная правда.
Они имеют в виду следующее:Строгое совместное планирование.
Самое важное из всего, что в строгом алгоритме совместного планирования наличие отстающего vCPU приводит к совместной остановке всей виртуальной машины. В расслабленном алгоритме совместного планирования ведущий vCPU решает, следует ли ему совместно останавливать себя, основываясь на перекосе относительно самого медленного родственного vCPU
Сейчас,еслиу хоста всего 4 потока, поэтому было бы глупо выделять их все.Еслиу него два процессора и 4 потока на процессор, тогда вымощьне хотите выделять все содержимое одного процессора, так как ваш гипервизор должен попытаться сохранить vCPU на одном узле NUMA, чтобы ускорить доступ к памяти, а вы усложняете эту задачу, выделяя целый сокет одной виртуальной машине (см. страницу 12 этого PDF-файла выше).
Таким образом, существуют сценарии, в которых требуется меньше виртуальных ЦП.можетработают лучше, чем больше, но это не всегда так.
При всем при этом я очень редко выделяю более 3 vCPU на гостя. Каждый получает 2 по умолчанию, 3, если это большая нагрузка, и 4 для таких вещей, как SQL Servers или действительно тяжелые пакетные обработки VM, или терминальный сервер с большим количеством пользователей.
решение2
Это во многом зависит от базового гипервизора и администраторов, которые его запускают. Позвольте мне объяснить:
- Это плохая практика — просто произвольно давать вам 4 процессора, просто потому что вы их запросили. Вообще говоря, выдуматьвам нужно 4; но мониторинг ресурсов говорит, что вам нужен только 1.
- VMware ESXi напримертребует блокировки всех pCPU, когда vCPU делает запрос на ресурсы CPU; поэтому на этом гипервизоре это плохо для производительности. KVM не выполняет блокировку, как ESXi; он использует базовый планировщик ядра, но все равно в долгосрочной перспективе может создать конкуренцию за CPU.
- Если вы изначально создаете системы с 4 ЦП, вы на самом деле не масштабируетесь вширь, а вверх (что является плохой практикой, особенно на виртуальных машинах). Возможно, вам стоит проверить, как вы проектируете то, над чем работаете, чтобы его можно было масштабировать до современных облачных инфраструктур.
Чему вы можете научиться из этого? Всегда создавайте виртуальные машины с минимальными ресурсами и увеличивайте их по мере необходимости. Всегда масштабируйте в сторону уменьшения, а не увеличения, и вы сможете запустить свое приложение где угодно.
Из-за блокировки, которая может возникнуть при использовании гипервизора, действительно, 2 ЦП могут быть быстрее, чем 4 ЦП.
решение3
Да, в целом это утверждение имеет смысл. Однако это то, что вам следует протестировать для вашей конкретной конфигурации и рабочей нагрузки. Иногда больше ЦП лучше, если вы действительно можете извлечь из этого выгоду. Однако, если у вас на самом деле нет такого большого параллелизма, виртуальная машина, настроенная с меньшим количеством ЦП, часто будет работать немного лучше, поскольку она избегает замедлений из-за пауз в состоянии готовности ЦП.
Я уменьшил vCPU на ряде наших виртуальных машин и увидел улучшение пропускной способности на большинстве из них. Несколько машин стали хуже и нуждались в увеличении vCPU.