Четырехъядерный хост с гиперпоточностью, сколько процессоров настроить в VirtualBox?

10

У меня есть четырехъядерный процессор i7 с гиперпоточностью (8 логических ядер), когда я настроил виртуальную машину на использование 8 процессоров, VirtualBox дал мне предупреждение о том, что у меня только четыре ядра (что верно) и что это может вызвать проблема производительности. Но гиперпоточность - это аппаратная особенность, поэтому ОС видит 8 ядер и отправляет инструкции всем 8. Что, если установить значение 4, виртуальная машина будет использовать 2 ядра (4 потока) вместо 4 одновременных потоков (на всех 4 ядрах) )? Полученное предупреждение учитывает, что на моей машине есть гиперпоточность?

Энтони
источник

Ответы:

9

Основываясь на тесте, проведенном Кристианом Ведбергом, я бы сказал, что вы должны использовать все имеющиеся у вас логические ядра.
Также я сделал свой собственный тест, используя тот же процессор (i7, 4 процессора с HT), который подтвердил повышение производительности для многопоточных приложений. Если на гостевом ПК (Win. 8.1 x64) использовались все 8 ядер, то на хостовом ПК (Ubuntu x64) также использовались все 8 ядер.

введите описание изображения здесь

Я сравнил также производительность в однопоточных приложениях. В обоих случаях я измерил одни и те же значения, поэтому нет штрафов, если использовать больше, чем физическое (но до логического) количество процессоров.
Здесь вы можете видеть, что 1 полная загрузка процессора на гостевом ПК приведет к 1 загрузке процессора на хосте.

введите описание изображения здесь

icl7126
источник
Согласовано. Я использовал 4 ядра и обнаружил, что на сборку моего проекта уходит всего около 50% процессорного времени. Затем, несмотря на предупреждение, я изменил на 8, то есть количество логических ядер, сборка занимала 100% процессорного времени, и я считаю, что он работал быстрее, чем раньше.
Дэцин
Это довольно интересно, я помню, как читал, что Linux специально пытается сфокусировать нагрузку на 1 логическом ядре с каждого физического ядра HT для повышения эффективности. Интересно, сможет ли гостевое ядро ​​Linux увидеть, что ЦП является гиперпоточным, и оптимизировать его планирование для этого типа конфигурации.
Энтони
8

Я обнаружил, что, хотя в VirtualBox возможно (и, возможно, быстрее) (мой опыт был с версией 5.1.0) выделять виртуальные ЦП виртуальной машине на основе логических процессоров, при работе с высокой нагрузкой могут возникнуть проблемы внутри гостевой ОС. , В моем случае виртуальная машина Windows 2012 R2 с 12 виртуальными ЦП на 8-ядерном хосте Ubuntu 16.04 (который сообщает о 16 логических процессорах) будет BSOD во время высокой загрузки ЦП с сообщением об ошибке DPC_WATCHDOG_VIOLATION. Анализ мини- дампов с использованием osronline.com показал, что причиной нарушения является e1g6032e.sys (сетевой драйвер Intel 100/1000, встроенный в Windows).

Это наводит меня на мысль, что время в гостевой ОС отрицательно сказывается при выделении виртуальных ЦП на основе емкости логического процессора и при работе виртуальной машины с высокой нагрузкой в ​​течение продолжительных периодов времени. В моем случае 100% загрузка процессора внутри виртуальной машины Windows в течение нескольких минут приведет к BSOD. После уменьшения количества vCPU до 8 (что соответствует количеству физических ядер хоста), Windows VM больше не BSOD в подобных ситуациях высокой нагрузки. Документацию из VirtualBox говорит один должен это сделать, но не дает каких - либо причин.

В моей среде также работали две другие виртуальные машины Ubuntu, каждая из которых имела 8 собственных виртуальных процессоров. Однако нагрузка на них была минимальной во время проблем BSOD в Windows VM.

Альберт Газендам
источник
Офигенный ответ (с источниками), спасибо! Несколько лет спустя, но теперь я знаю :)
Энтони
2

Полученное предупреждение учитывает, что на моей машине есть гиперпоточность?

Да. Если вы установите количество ядер в виртуальной машине больше, чем у вас физически, процесс планирования задач в Virtual Box сверх фиксирует ресурсы ЦП, что приводит к серьезным проблемам с производительностью.

Что касается распределения нагрузки между ядрами, то это задача основной операционной системы, и она должна вести себя в правильном стиле.

user195560
источник
4
У вас есть какие-либо данные в поддержку ваших заявлений? Кто-то провел исследование envobi.com/post/virtualbox-hyper-threading-benchmark-surprise, и они рекомендуют установить количество процессоров Virtual Box на количество логических процессоров.
Максим Егорушкин
0

Это была оригинальная виртуальная машина для вашей машины? Иногда вы будете получать специфические ошибки, если клонируете виртуальную машину и перемещаете ее на другую машину и / или меняете настройки.
Я рекомендую загрузить и установить последнюю версию Virtual Box с последними расширениями.

Я зафиксировал все восемь ядер и не получаю эту ошибку, когда на моем i7 запущена виртуальная машина с Ubuntu 13.10.

ClaireW
источник