что происходит в virtualbox, когда вы выделяете более одного виртуального ядра? - PullRequest
9 голосов
/ 12 апреля 2011

Если я использую виртуальную коробку Oracle и назначаю виртуальной машине более одного виртуального ядра, как назначаются фактические ядра? Использует ли она оба реальных ядра в виртуальной машине или использует что-то, что имитирует ядра?

1 Ответ

10 голосов
/ 19 февраля 2012

Ваш вопрос похож на вопрос: как операционная система определяет, на каком ядре запустить данный процесс / поток?Ваш компьютер все время принимает такое решение - на нем запущено гораздо больше процессов / потоков, чем у вас доступно ядер.Этот конкретный ответ аналогичен по своей природе, но также зависит от того, как настроен гостевой компьютер и какая поддержка вашего оборудования доступна для ускорения процесса виртуализации - поэтому этот ответ, безусловно, не является окончательным, и я не буду особо касаться того, как хост планирует коддля выполнения, но давайте рассмотрим два относительно простых случая:

Первый - это полностью виртуализированная машина - это машина, на которой ускорение не включено или минимальное.Аппаратное обеспечение, предоставленное гостю, полностью виртуализировано, хотя многие инструкции ЦП просто передаются и выполняются непосредственно на ЦП.В подобных случаях ваша гостевая виртуальная машина более или менее ведет себя как любой процесс, выполняющийся на хосте: ресурсы ЦП планируются операционной системой (в данном случае, хост, конечно), и процессы / потоки могут запускатьсяна каких ядрах им позволено.По умолчанию обычно используется любое доступное ядро, хотя могут присутствовать некоторые оптимизации, чтобы попытаться сохранить процесс на одном и том же ядре, чтобы кэши L1 / L2 были более эффективными и минимизировали переключение контекста.Как правило, в этих случаях для гостевой операционной системы выделяется только один ЦП, и это примерно соответствует одному процессу, запущенному на хосте.

В чуть более сложном сценарии конфигурируется виртуальная машинасо всеми доступными вариантами ускорения виртуализации процессора.В Intel говорят, что они называются VT-x, для AMD это AMD-V.Они в первую очередь поддерживают привилегированные инструкции, которые обычно требуют некоторой двоичной трансляции / перехвата для защиты хоста и гостя.Таким образом, операционная система хоста теряет немного видимости.Включите в это аппаратное ускорение поддержку MMU (так, чтобы таблицы страниц памяти могли быть доступны напрямую, не будучи затененными программным обеспечением виртуализации) - и видимость немного снизилась.В конечном счете, хотя он по-прежнему в основном ведет себя как первый пример: это процесс, выполняющийся на хосте и запланированный соответствующим образом - только то, что вы можете думать о потоке, выделенном для выполнения инструкций (или прохождения их) для каждого виртуального ЦП.

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

В крайнем случае, VirtualBox даже поддерживает ресурсы CPU с «горячей» заменой - хотя только несколько работающихсистемы должным образом поддерживают это: выпуск Windows 2008 Data Center и некоторые ядра Linux.Те же самые правила обычно применяются, когда одно гостевое ядро ​​ЦП рассматривается как процесс / поток в логическом ядре для хоста, однако сам хост и оборудование сами решают, какое логическое ядро ​​будет использоваться для виртуального ядра.

С учетом всего вышесказанного - ваш вопрос о том, как VirtualBox на самом деле назначает эти ресурсы ... ну, я не копался в коде, поэтому, конечно, не могу ответить однозначно, но это был мой опыт, что он обычно ведет себя так, как описано. Если вам действительно интересно, вы можете поэкспериментировать с пометкой VirtualBox VBoxSvc.exe и связанных процессов в диспетчере задач, выбрать опцию «Установить сходство» и ограничить их выполнение одним процессором и посмотреть, соблюдаются ли эти настройки. Вероятно, это зависит от того, какой уровень поддержки HW вам доступен, если хост учитывает эти настройки, поскольку гость, вероятно, на самом деле не работает как часть этих.

...