Почему увеличение «числа логических процессоров» для виртуальной машины, размещенной на Hyper-V, увеличивает производительность этой виртуальной машины?

9

Насколько я понимаю, виртуальные машины (если они Relative Weightравны) получают равную долю процессора.

Когда виртуальной машине дается некоторое время на обработку, не должно иметь значения, видит ли виртуальная машина одно ядро ​​для использования или несколько ядер, поскольку независимо от обработки происходит массив процессоров на хосте Hyper-V. Однако, когда я устанавливаю Number of logical processorsзначение от 1 до 4 в Hyper-V для конкретной виртуальной машины, я вижу огромное увеличение производительности.

Спецификации на моей текущей установке примерно:

  • Хост Hyper-V имеет 32 ГБ ОЗУ, 24 логических процессора (неверное слово?), Несколько ТБ места.

  • Виртуальным машинам выделяется 6 ГБ ОЗУ, 1 или 4 ядра, несколько сотен ГБ пространства и работает 2008 R2.

Я испытывал подобное на прошлых установках Hyper-V.

Blackjack00
источник

Ответы:

20

Виртуальные машины в каждом известном мне гипервизоре могут использовать дополнительные виртуальные процессоры, на которых можно планировать дополнительные параллельные потоки выполнения.

Это именно тот уровень абстракции между физической машиной и виртуальной машиной, который заставляет ее работать не так, как вы описали. ВМ не знает, сколько ядер имеет физическая машина. Виртуальная машина не «видит» физические процессоры (или ядра) на физическом компьютере. Гипервизор дает виртуальной машине столько виртуальных процессоров, а гостевая ОС использует эти виртуальные процессоры для планирования дополнительных параллельных потоков ... Общее количество виртуальных процессоров, которые гипервизор передает виртуальным машинам, может даже превышать количество физических процессоров / ядра в машине.

Другими словами, виртуальная машина, когда ей назначается один виртуальный ЦП, планирует свои потоки так, как если бы у нее был только один ЦП. Не имеет значения, сколько ядер находится в базовой физической машине. (Хотя стоит отметить, что физическая машина может запланировать, что один поток ВМ на одном физическом ядре для одного кванта потока или кванта времени, и затем запустить его на другом физическом ядре в следующий раз, когда планируется запустить. Виртуальная машина имеет хотя понятия не имею, что это происходит, все, что он знает, это то, что он может планировать только один поток за раз, один за другим, потому что у него только один виртуальный процессор.)

И давайте будем очень ясно о наших условиях здесь. Вы назначаете виртуальные ЦП или виртуальные ЦП виртуальным машинам, а не «ядрам». Ядра (под которыми я предполагаю, что вы имеете в виду физические процессоры, которые совместно используют один физический сокет) не равны виртуальным ЦП. Между ними есть слой абстракции. Если виртуальной машине назначен только 1 виртуальный ЦП, она может запланировать запуск только одного потока за раз. Вот почему ваша виртуальная машина работает быстрее с назначенными ей 2-4 виртуальными процессорами - потому что теперь она может планировать одновременную работу нескольких потоков.

Тем не менее, здесь определенно существует закон убывающей отдачи, поскольку чрезмерное количество виртуальных процессоров приводит к более высоким и высоким накладным расходам в таких вещах, как синхронизация и т. Д.

Существуют небольшие различия в том, как гипервизоры Hyper-V и VMware планируют выполнение потоков виртуальных машин, и они различаются по своему подходу к «переподписке» физических ресурсов, но это хорошая общая концепция для начала.

Райан Райс
источник
7
@ Flapjack00 Нет ... это полная противоположность тому, что я только что сказал. И давайте будем очень ясно о наших условиях здесь. Вы назначаете виртуальные ЦП или виртуальные ЦП виртуальным машинам, а не «ядрам». Ядра (под которыми я предполагаю, что вы имеете в виду физические процессоры с одним сокетом) не равны виртуальным ЦП. Между ними есть слой абстракции. Если виртуальной машине назначен только 1 виртуальный ЦП, она может запланировать запуск только одного потока за раз.
Райан Райс
1
Ах! Таким образом, в этом случае виртуальная машина, настроенная на 4 виртуальных ЦП, может планировать 4 потока одновременно. Предполагая, что на моем хосте достаточно vCPU, эти 4 потока могут обрабатываться одновременно?
Блэкджек00
1
@ Flapjack00 «Предполагая, что на моем хосте достаточно vCPU» - на хосте нет vCPU, а на виртуальной машине. Хост имеет ядра (или, точнее, логические процессоры - одно ядро ​​может иметь несколько логических процессоров, как с Hyper-Threading), которым назначаются виртуальные ЦП.
BlueRaja
2
@ Дэн, это проблема, специфичная для VMware. Это не влияет на Hyper-V.
Джейк Ошинс
1
«X vCpu требует Y-процессорных блокировок», которые VMware удалила в ESX 3.5, так что это больше не относится ни к одному современному гипервизору. Тем не менее, вы должны быть осторожны, чтобы не назначать ненужные ресурсы вашим виртуальным машинам, а vCpu особенно важны. Слишком много, и вы потеряете производительность в целом.
pauska
3

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

Будьте осторожны, чтобы не давать ВМ слишком много, чтобы не вызывать конфликта, если у одной ВМ больше виртуальных ядер, чем у хоста, ВМ будет бороться против себя, а в случае запланированных гипервизорами банд, таких как vmware, ВМ будет никогда не иметь возможности выполнить что-либо вообще (конечно, опция перераспределения заблокирована уровнем управления).

dyasny
источник