Предположим, у меня есть физический хост ESX с ОДНИМ четырехъядерным процессором и отключенной гиперпоточностью. Это означает, что у него всего 4 физических ядра или pCPU. Я создаю одну виртуальную машину на этом хосте VMware. Я назначаю этой виртуальной машине 1vCPU и не устанавливаю ограничения на использование ЦП.
Вопрос: Если виртуальная машина запускает приложение «убийца ЦП», которое требует все больше и больше циклов ЦП, может ли виртуальная машина в конечном итоге полностью потреблять все 4 основных физических ядра в любой момент времени?
Думаю, ответ отрицательный. Одна виртуальная машина vCPU может потреблять не более 1 физического ядра в любой момент времени. Итак, в моем примере, поскольку нет других запущенных виртуальных машин, VMware планирует запуск виртуальной машины на одном физическом ядре. Когда это физическое ядро будет использовано на 100%, загрузка ЦП виртуальной машины зафиксируется на 100%, и все. Остальные 3 ядра в основном простаивают. Верный?
Если виртуальная машина запускает приложение "убийца ЦП", которое требует все больше и больше циклов ЦП, может ли ВМ в конечном итоге полностью потреблять все 4 основных физических ядра в любой момент времени?
Нет.
Итак, в моем примере, поскольку нет других запущенных виртуальных машин, VMware планирует запуск виртуальной машины на одном физическом ядре. Когда это физическое ядро будет использовано на 100%, загрузка ЦП виртуальной машины зафиксируется на 100%, и все. Остальные 3 ядра в основном простаивают. Верный?
Да, это правильно.
Виртуализация - это не волшебство - одно ядро остается одним ядром, и если выделить один процессор, ваша виртуальная машина сможет потреблять циклы ЦП только на одно ядро.
это зависит от того, написана ли ваша программа с несколькими потоками. Например, вы можете попросить один поток вычислить что-то параллельно другому потоку, выполняющему какую-либо другую задачу.
Теперь, если у вас только одно ядро ... тогда ваши программные потоки могут выполняться только в тандеме (один за другим) ... и они вообще не будут выполняться параллельно.
Однако, если вы находитесь в мире виртуальных машин, ваше «ядро» на самом деле является вашим виртуальным ЦП. VMware достаточно умен, чтобы понять, что тандемные потоки на vCPU могут быть распределены по нескольким физическим ядрам. Предполагая, что вы не включили привязку к ЦП, и предполагая, что на данный момент есть свободные ядра, VMware сможет воспользоваться этой возможностью.