У меня есть четырехъядерный процессор i7 с гиперпоточностью (8 логических ядер), когда я настроил виртуальную машину на использование 8 процессоров, VirtualBox дал мне предупреждение о том, что у меня только четыре ядра (что верно) и что это может вызвать проблема производительности. Но гиперпоточность - это аппаратная функция, поэтому ОС видит 8 ядер и отправляет инструкции всем 8. Что если установить значение 4, то виртуальная машина будет использовать 2 ядра (4 потока) вместо 4 одновременных потоков (на всех 4 ядрах)? Полученное предупреждение учитывает, что на моей машине есть гиперпоточность?
4 ответа
Основываясь на тесте, проведенном Кристианом Ведбергом, я бы сказал, что вы должны использовать все имеющиеся у вас логические ядра.
Также я сделал свой собственный тест, используя тот же процессор (i7, 4 CPU с HT), который подтвердил повышение производительности для многопоточных приложений. Если гостевой ПК (Win. 8.1 x64) использовались все 8 ядер, затем на хост-ПК (Ubuntu x64) также использовались все 8 ядер.
Я сравнил также производительность в однопоточных приложениях. В обоих случаях я измерил одни и те же значения, поэтому нет штрафов за использование большего, чем физическое (но до логического) количества процессоров.
Здесь вы можете видеть, что 1 полная загрузка процессора в гостевом ПК приведет к 1 загрузке процессора в хосте.
Я обнаружил, что, хотя в 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 больше не BSOD в подобных ситуациях высокой нагрузки. Онлайновая документация от VirtualBox говорит, что это нужно делать, но не предлагает никаких причин.
В моей среде также работали две другие виртуальные машины Ubuntu, каждая из которых имела 8 собственных виртуальных процессоров. Однако нагрузка на них была минимальной во время проблем BSOD в Windows VM.
Полученное предупреждение учитывает, что на моей машине есть гиперпоточность?
Да. Если вы установите количество ядер в виртуальной машине больше, чем у вас физически, процесс планирования задач в Virtual Box сверх фиксирует ресурсы ЦП, что приводит к серьезным проблемам с производительностью.
Что касается распределения нагрузки между ядрами, то это задача основной операционной системы, и она должна вести себя в правильном стиле.
Это была оригинальная виртуальная машина для вашей машины? Иногда вы будете получать специфические ошибки, если клонируете виртуальную машину и перемещаете ее на другую машину и / или меняете настройки.
Я рекомендую загрузить и установить последнюю версию Virtual Box с последними расширениями.
Я зафиксировал все восемь ядер, и я не получаю эту ошибку, когда на i7 запущена виртуальная машина с Ubuntu 13.10.