Виртуальные машины в каждом известном мне гипервизоре могут использовать дополнительные виртуальные процессоры, на которых можно планировать дополнительные параллельные потоки выполнения.
Это именно тот уровень абстракции между физической машиной и виртуальной машиной, который заставляет ее работать не так, как вы описали. ВМ не знает, сколько ядер имеет физическая машина. Виртуальная машина не «видит» физические процессоры (или ядра) на физическом компьютере. Гипервизор дает виртуальной машине столько виртуальных процессоров, а гостевая ОС использует эти виртуальные процессоры для планирования дополнительных параллельных потоков ... Общее количество виртуальных процессоров, которые гипервизор передает виртуальным машинам, может даже превышать количество физических процессоров / ядра в машине.
Другими словами, виртуальная машина, когда ей назначается один виртуальный ЦП, планирует свои потоки так, как если бы у нее был только один ЦП. Не имеет значения, сколько ядер находится в базовой физической машине. (Хотя стоит отметить, что физическая машина может запланировать, что один поток ВМ на одном физическом ядре для одного кванта потока или кванта времени, и затем запустить его на другом физическом ядре в следующий раз, когда планируется запустить. Виртуальная машина имеет хотя понятия не имею, что это происходит, все, что он знает, это то, что он может планировать только один поток за раз, один за другим, потому что у него только один виртуальный процессор.)
И давайте будем очень ясно о наших условиях здесь. Вы назначаете виртуальные ЦП или виртуальные ЦП виртуальным машинам, а не «ядрам». Ядра (под которыми я предполагаю, что вы имеете в виду физические процессоры, которые совместно используют один физический сокет) не равны виртуальным ЦП. Между ними есть слой абстракции. Если виртуальной машине назначен только 1 виртуальный ЦП, она может запланировать запуск только одного потока за раз. Вот почему ваша виртуальная машина работает быстрее с назначенными ей 2-4 виртуальными процессорами - потому что теперь она может планировать одновременную работу нескольких потоков.
Тем не менее, здесь определенно существует закон убывающей отдачи, поскольку чрезмерное количество виртуальных процессоров приводит к более высоким и высоким накладным расходам в таких вещах, как синхронизация и т. Д.
Существуют небольшие различия в том, как гипервизоры Hyper-V и VMware планируют выполнение потоков виртуальных машин, и они различаются по своему подходу к «переподписке» физических ресурсов, но это хорошая общая концепция для начала.
Количество назначенных виртуальных процессоров имеет значение. Программное обеспечение, работающее в ВМ, не знает о том, что оно находится в ВМ, и что хост способен на большее, чем то, что представлено в ВМ. Поэтому, если вы используете программное обеспечение, которое может использовать преимущества нескольких ядер ЦП, в виртуальной машине, которая имеет только одно назначенное ядро, программное обеспечение будет планировать только одно ядро для своих задач, а также виртуальная машина будет использовать только одно ядро хоста в время. Как только вы дадите ВМ больше ядер, программное обеспечение сможет планировать больше параллельных задач, которые ЦП хостов будет планировать для ВМ.
Будьте осторожны, чтобы не давать ВМ слишком много, чтобы не вызывать конфликта, если у одной ВМ больше виртуальных ядер, чем у хоста, ВМ будет бороться против себя, а в случае запланированных гипервизорами банд, таких как vmware, ВМ будет никогда не иметь возможности выполнить что-либо вообще (конечно, опция перераспределения заблокирована уровнем управления).
источник