"Віртуальні" ядра, які ви призначаєте для VM, доступні для використання при багатообробній обробці в клієнтській ОС. Якщо ви призначите лише одне ядро для VM, гостьова ОС не має шансів розподілити навантаження по декількох ядрах. Тож припустимо кілька практичних сценаріїв:
Хост з 4 процесорами, гостю призначено 1 процесор
- Хост-машина, що працює на 4 фізичних ядрах
- Клієнтській ОС в VM призначено 1 ядро
У цьому випадку гостьова ОС зможе використовувати лише одне ядро. Тому якщо ви запускаєте багатопотокове додаток, яке добре масштабує декілька ядер, воно все одно буде працювати лише на одному ядрі. Тому всі потоки в гостьовій ОС повинні мати одне фізичне ядро.
Якщо запустити гостьову ОС у цій установці, яка повністю завантажує процесор, це призведе до завантаження CPU хосту в розмірі ~ 25% (одне з 4 ядер, завантажених на хост).
Звичайно, ви все ще можете виконати багато процесорних завдань, що виконуються у вашій хост-операційній системі та використовувати інші 3 ядра.
Хост з 4 процесорами, гостю призначено 4 процесора
- Хост-машина, що працює на 4 фізичних ядрах
- Клієнтській ОС у ВМ призначений 4 ядра
У цьому випадку ви можете запустити багатомасштабні багатопотокові програми в гостьовій машині, яка може повністю використовувати всі 4 віртуальні процесори. VirtualBox використовуватиме 4 фізичні ядра для обробки завдань, запланованих у VM, і тому завантаження вашого центрального процесора може досягти максимального використання на 100%.
Отже, яку установку слід вибрати?
Відповідь на це питання багато в чому залежить від того, що ви хотіли б зробити. У деяких випадках може бути корисним присвоїти всі ядра VM або навіть запустити кілька VM, маючи для кожного повну кількість призначених процесорів. У таких випадках VM може повною мірою використовувати всю обробну потужність хоста. Якщо для ВМ призначено більше ЦП, ніж фактично наявні фізичні, то на ВМ будуть впливати навантаження на різні ВМ. Щоб цього не допустити, ви можете виділити деякі ядра певним VM. Наприклад, запуск 2 VM з двома процесорами, присвоєними кожному на 4-х ядерних вузлах, може допомогти кожному VM отримати 2 виділених процесора (якщо припустити, що навантаження ОС не приймає навантаження, що приймає і частину потужності обробки).
Чи має це негативний вплив на мій хост присвоїти всі ядра VM?
Знову ж це залежить від запуску програмного забезпечення. Якщо ви запускаєте VM, що працює в режимі очікування (програми, що не працюють з процесором, взагалі не працюють), навантаження, накладене цією машиною управління, буде близько 0%. Ви навіть можете запускати 10 VM паралельно і все ще відчуваєте завантаження центрального процесора близько 0%, якщо всі VM не працюють.
Як поводиться процесор при нерівномірному навантаженні?
Що ж, розподіл завантаження процесора сильно залежить від вбудованого компонента ОС, який називається планувальником. У Windows XP планувальник намагався завантажувати всі ядра CPU. Таким чином, виконання однопотокового завдання з повним навантаженням на чотирьохядерний процесор дало б близько 25% навантаження на кожне ядро.
На жаль, це виявилося погано для сучасного керування живленням процесора. Для сучасних систем це навіть перевага, якщо одне ядро завантажується до 100%, перш ніж друге ядро навіть залучається. Причина полягає в тому, що доки немає достатнього навантаження для повного використання одного ядра, інші ядра можуть залишатися в режимі глибокого сну, щоб заощадити енергію та зменшити тепловіддачу.
Для деяких процесорів, таких як Intel Core i-Series та новіших AMD (Bulldozer), це ще цікавіше, оскільки у випадку використання лише підмножини ядер вимикаються невикористані. Це зменшує споживання енергії процесора. Обидва (Intel та AMD) починають використовувати бюджет теплової енергії та споживання електроенергії, щоб потім розігнати активні ядра. Таким чином, це може надати однопотокові програми (які не можуть бути розподілені на кілька ядер для роботи над завданням паралельно). Однак, коли всі ядра активні, то більшість цих "прискорених" технологій мають лише невеликий вплив на потужність обробки, оскільки ситуація "всі ядра активні" - це саме та ситуація, для якої був розроблений процесор.
Отже, відповідь полягає в тому, що ваш core i7 дуже добре справляється з нерівномірним навантаженням на окремі ядра і навіть може забезпечити підвищення продуктивності для однопотокових програм. Однак цей прискорення знаходиться в межах декількох відсотків, тоді як насправді багатопотокові програми, які можуть розподілити навантаження по декількох ядрах процесора, в оптимальному випадку можуть бути посилені чинниками (x2 на двоядерних, 4x на чотирьохядерних ...) . Таким чином, багатопотокова передача завжди забезпечує більшу потужність з точки зору комбінованої потужності процесора, ніж однонитка в поєднанні зі збільшенням годин.