Чому збільшення «кількості логічних процесорів» для VM, розміщеного Hyper-V, збільшує продуктивність VM?


9

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

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

Характеристики моєї поточної установки приблизно:

  • Хост Hyper-V має 32 ГБ оперативної пам’яті, 24 логічних процесори (неправильне слово?), Кілька ТБ простору.

  • Відеомагнітофонам виділено 6 ГБ оперативної пам’яті, 1 або 4 ядра, кілька сотень ГБ місця і працює 2008 R2.

У минулому налаштуваннях Hyper-V я переживав подібну річ.

Відповіді:


20

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

Саме той шар абстракції між фізичною машиною і віртуальною машиною змушує його працювати не так, як ви описуєте. ВМ не знає, скільки ядер має фізична машина. VM не "бачить" фізичні процесори (або ядра) на фізичній машині. Гіпервізор надає VM скільки коли-небудь віртуальних процесорів, а гостьова ОС використовує ці віртуальні процесори для планування додаткових одночасних потоків ... Загальна кількість віртуальних процесорів, які гіпервізор передає віртуальним машинам, навіть може перевищувати кількість фізичних процесорів / сердечники в машині.

Сказав інший спосіб, віртуальна машина, коли присвоюється одному vCPU, планує свої потоки так, ніби має лише один процесор. Не має значення, скільки ядер знаходиться в базовій фізичній машині. (Хоча варто відзначити, що фізична машина може запланувати цей потік VM на одному фізичному ядрі для одного кванту потоку або відрізку часу, а потім запустити його на іншому фізичному ядрі наступного разу, коли його планується запустити. У віртуальної машини є Не знаю, що щось із цього відбувається, але все, що він знає, це те, що він може запланувати лише один потік, один за одним, оскільки він має лише один віртуальний процесор.)

І давайте будемо дуже зрозумілі щодо наших умов тут. Ви призначаєте vCPU або віртуальні процесори VM, а не "ядра". Ядра (маю на увазі, ви маєте на увазі фізичні опрацювальні одиниці, які розділяють один фізичний сокет) не дорівнюють vCPU. Між ними існує шар абстракції. Якщо для VM призначено лише 1 vCPU, призначений для нього, він може запланувати за один раз лише один потік. Ось чому ваш VM працює швидше з 2 -4 віртуальними процесорами, призначеними для нього - тому що він тепер може запланувати більше одного потоку для одночасного запуску.

Однак, безумовно, існує закон зменшення прибутку тут, оскільки надмірна кількість віртуальних процесорів приносить більший і більший накладні витрати в таких речах, як синхронізація тощо.

Існують невеликі відмінності між тим, як гіпервізори Hyper-V і VMware планують потоки віртуальних машин для виконання, і вони відрізняються своїм підходом до "перепідписки" на фізичні ресурси, але це хороша загальна концепція для початку.


7
@ Flapjack00 Ні ... це точно протилежне тому, що я щойно сказав. І давайте будемо дуже зрозумілі щодо наших умов тут. Ви призначаєте vCPU або віртуальні процесори VM, а не "ядра". Ядра (маю на увазі, ви маєте на увазі фізичні опрацювальні одиниці, які ділять один сокет) не мають рівних vCPU. Між ними існує шар абстракції. Якщо для VM призначено лише 1 vCPU, призначений для нього, він може запланувати за один раз лише один потік.
Ryan Ries

1
Ах! Отже, у такому випадку VM, налаштований на 4 vCPU, міг запланувати 4 потоки одночасно. Якщо припустити, що мій хост має достатньо vCPU, ці 4 потоки можна буде обробити одночасно?
Blackjack00

1
@ Flapjack00 "Якщо припустити, що у мого хоста є достатня кількість vCPU" - У хоста немає vCPU, VM. У хості є ядра (або, правильніше, логічні процесори - одне ядро ​​може мати кілька логічних процесорів, як, наприклад, з Hyper-Threading), до яких присвоюються vCPU.
BlueRaja

2
@Dan, це проблема, специфічна для VMware. Це не впливає на Hyper-V.
Джейк Ошинс

1
"X vCpu вимагають блокування Y CPU", що було видалено VMware в ESX 3.5, тому це вже не стосується жодного сучасного гіпервізора. Зважаючи на це, ви повинні бути обережними щодо того, щоб не призначати непотрібні ресурси вашим VM, а vCpu особливо важливі. Занадто багато їх, і ви втратите загальну продуктивність.
pauska

3

Обсяг призначених віртуальних процесорів має значення. Програмне забезпечення, що працює в VM, не знає про те, що він знаходиться в VM, і що хост здатний більше, ніж те, що VM представлено. Отже, якщо ви працюєте з програмним забезпеченням, яке може скористатися декількома ядрами процесора, у ВМ, якому призначено лише одне ядро, програмне забезпечення планує лише одне ядро ​​для виконання його завдань, а також VM буде використовувати лише одне ядро ​​хоста на Час. Після того, як ви надасте VM більше ядер, програмне забезпечення може запланувати більше паралельних завдань, які CPU хостів заплануватиме для VM.

Будьте обережні, щоб не давати VM занадто багато, щоб не викликати суперечки, якщо один VM має більше віртуальних ядер, ніж хост, VM буде змагатися проти себе, а у випадку, коли банди заплановані гіпервізори, як vmware, VM ніколи взагалі нічого не зможете виконати (звичайно, можливість перерозподілу блокується керуючим шаром).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.