Существует ли максимальное количество процессоров, которое может иметь VirtualBox?

Я использую VirtualBox 5.1, работающий на хосте с 48 процессорами и 250 ГБ оперативной памяти. В виртуальной машине, которую я импортирую (в качестве гостя), изначально было 2 процессора и 4 ГБ оперативной памяти.

внутри этой машины я запускаю процесс с Java, который запускает динамическое число потоков для выполнения некоторых задач.

Я запустил его с помощью следующих конфигураций:

весь процесс в моем ноутбуке (2CPUs/4GB RAM) ~ 11 секунд

та же программа в виртуальной машине на сервере (15 процессоров и 32 ГБ оперативной памяти) ~ 45 секунд

та же программа в виртуальной машине на сервере (20 ЦП и 32 ГБ ОЗУ) ~ 100+ секунд

та же программа в виртуальной машине на сервере (10 процессоров и 32 ГБ оперативной памяти) ~ 5+ секунд

Сначала я подумал, что есть проблема в том, как я управлял потоками из Java, но после многих тестов я выяснил, что существует связь между количеством процессоров, которое имеет виртуальная машина, и ее производительностью, максимальная составляла 10, после этого общая производительность машины замедляется (процессорное голодание?)

виртуальная машина работает под управлением Oracle Enterprise Linux 6.7, а на хосте - Oracle Enterprise Linux 6.9

Я не смог найти каких-либо жестких ограничений в документации виртуальных машин относительно количества процессоров

Есть ли параметр, который необходимо настроить для включения / использования более 10 процессоров в экземпляре VirtualBox?

2 ответа

Решение

С тех пор, как я опубликовал этот вопрос, прошло время, и я поделюсь своими выводами для архива, надеясь, что они помогут сэкономить время кому-то еще.

Оказывается, проблемы с производительностью были связаны с тем, как VirtualBox работает, особенно с отношениями между ОС и гипервизором.

виртуальная машина (гостевая ОС) в конце - это отдельный процесс для хоста, и при изменении количества процессоров в настройках виртуальной машины они будут изменять количество потоков, которые процесс будет эмулировать для других процессоров., (по крайней мере, в VirtualBox)

Сказав, что, когда я назначил 10+ процессоров для виртуальной машины, я получил:

  • один процесс с 10+ потоками
  • эмулируемая ОС, запускающая сотни процессов
  • мой код Java, который создавал другую кучу потоков

все это вместе привело к тому, что установка насыщала процесс виртуальной машины хоста, что, я думаю, было связано с тем, как хост-операционная система обрабатывает переключение контекста процессов

на моем сервере жесткое ограничение составляло 7 виртуальных процессоров, если бы я добавил больше, это снизило бы производительность программного обеспечения Java

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

У нас почти такая же настройка, как и у вас (Virtualbox работает на 48-ядерном компьютере с двумя узлами NUMA).

Сначала я установил максимальное количество ядер, поддерживаемое в Virtualbox (например, 32), но быстро понял, что один из двух узлов NUMA всегда работал вхолостую, а другой оставался на средних нагрузках, когда виртуальная машина находилась под нагрузкой.

Короче говоря, процесс может быть назначен только одному узлу NUMA, и Virtualbox запускает один пользовательский процесс с несколькими потоками... что означает, что мы ограничены использованием 24 ядер (и даже меньше на практике, учитывая, что это 12 процессор с гиперпоточностью).

Другие вопросы по тегам