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