Существует ли оптимальная настройка количества ядер ЦП, выставленных на виртуальную машину?

23

VirtualBox и, возможно, другое программное обеспечение для виртуальных машин позволяет пользователю указать количество процессоров, доступных для виртуальной машины. В моем конкретном случае у меня есть двухъядерный процессор с 64-битной Windows 7, работающей в исходном режиме, и Ubuntu 9.04 64-битной в качестве виртуальной машины.

В файле справки предлагается не устанавливать это значение выше количества доступных физических ядер. Это имеет смысл. Итак, лучше ли выделить 1 или 2 ядра процессора? Зависит ли это полностью от собственной загрузки процессора?

sblair
источник

Ответы:

6

Это полностью зависит от того, что делает гостевая ОС. По моему личному опыту, на виртуальной машине запущена одна программа (сервер сборки, сервер trac, SVN и т. Д.), Поэтому нет причин устанавливать ее выше одной.

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

Nate
источник
Итак, другими словами: для временной системы вы также можете максимально увеличить квоту ядра процессора; но для «нормального» или типичного использования установите его на одно ядро ​​(чтобы не слишком сильно влиять на производительность хост-ОС)?
sblair
18

Информация в этом ответе больше не верна . Это было правильно еще во времена строгого совместного планирования, но это уже не так.

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


Вы никогда не должны назначать все свои ядра в качестве виртуальных ЦП на виртуальной машине.

Если виртуальная машина запрашивает какое-либо время ЦП, VMWare должен выделить либо все виртуальные ЦП, либо ни один из виртуальных ЦП.

Это означает, что в четырехъядерной системе, если вы выделите все 4 ядра, то только процессору или гостю может быть выделено процессорное время, а не оба одновременно.

Это абсолютно разрушит производительность в обеих средах.

Не стесняйтесь выделять нечетное количество ядер (скажем, 3). Это кажется странным, но это совершенно законный вариант.

Обычно я никогда не выделяю более (n / 2) виртуальных ЦП (в вашем случае 2), но обычно я размещаю ядра на серверах с 12–32 ядрами, где вы можете распределить огромное количество виртуальных ЦП без значительного влияния.

Марк Хендерсон
источник
это единственный ответ, написанный до сих пор с любой степенью авторитета. Спасибо, что поделились своим опытом.
G-Wiz
5
-1: не соответствует моему опыту. ВМ - это процесс, время ЦП которого можно запланировать так же, как и любой другой процесс на хосте. Вы можете настроить приоритет процесса (ов) виртуальной машины на хосте, и система соответствующим образом сбалансирует нагрузки.
bwDraco
2
( продолжение ) Допустим, у вас есть 16-ядерный сервер. Примером конфигурации может быть 4 виртуальных машины, каждая из которых настроена на 8 ядер. Хотя это может показаться слишком большим количеством виртуальных ядер, это позволяет отдельным виртуальным машинам лучше масштабироваться при более высоких рабочих нагрузках. Если совокупное использование превысит количество физических ядер, хост будет соответствующим образом распределять нагрузки. Вот как виртуализация может увеличить пропускную способность и снизить затраты, максимально используя аппаратное обеспечение хоста.
bwDraco
@DragonLord - этому ответу более 2 лет на вопрос, которому почти 4 года, и он может основываться на устаревшей информации. Я имею в виду «Строгое совместное планирование» из ESX, но я не помню, сколько лет этой информации, и я не в курсе того, как изменилось планирование ЦП за последние несколько лет.
Марк Хендерсон
1
Здесь просто хотелось бы отметить, что как в Ubuntu 14.04, так и в 16.04 возникают проблемы с загрузкой, а также сбои, если установить число процессоров в нечетное число. Я не смог понять, почему, потому что я просто решил держать это в четных числах, чтобы избежать проблем.
Дориан,
3

Количество ядер, доступных для гостевых процессоров, не так сильно влияет на производительность, как хотелось бы. Он просто регулирует количество ядер, которые «видит» гостевой процессор.

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

Лучше оставить его по умолчанию. Если у вас возникают проблемы с производительностью на главном ПК, вы можете просто настроить приоритет процесса с помощью диспетчера задач Windows.

Прорвать
источник
3

Как отметил Нейт, поскольку ваша виртуальная машина будет в основном обслуживать однопоточный процесс, нет особых причин выделять более одного ядра.

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

Единственный способ убедиться в этом - запустить тесты. Я не знаю почему, но в моей системе Core2 Quad (которая имеет поддержку VT-x, вложенный пейджинг и т. Д.), Фактически использование 1 из 4 ядер работает лучше. чем использование 2 или более ядер! Я вижу это просто во время запуска виртуальной машины, но также и во время тестов компиляции.

С другими аппаратными средствами результаты иные. У меня также есть i7 с 8 ядрами, и производительность, кажется, намного лучше масштабируется с количеством ядер там (при использовании 4 там счастливо).

Мой совет: сначала протестируйте новое оборудование.

Arnout
источник
1

Я доверял бы планировщику ОС и просто устанавливал бы на виртуальную машину количество физических ядер, если только вы не знаете, что вы всегда хотите, чтобы у хоста было потенциально простое ядро, пока вы заняты в виртуальной машине.

Эндрю Колсон
источник
1

Это зависит от того, что вы хотите сделать на виртуальной машине, а также на физической машине. Если вам нужно использовать виртуальную машину, когда операционная система хоста используется для какой-либо другой деятельности, может быть лучше использовать два процессорных ядра для виртуальной машины, чтобы на хосте оставалось два ядра, если виртуальная машина находится в режиме полной нагрузки. С другой стороны, если вы работаете в основном на виртуальной машине, вы можете использовать все ядра процессора.

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

bwDraco
источник
Это основано на моем опыте работы с VirtualBox. Поскольку я не знаком с продуктами VMware, я могу ошибаться; если так, я удалю этот ответ.
bwDraco
0

да, я бы также сказал, что это зависит Но я скажу, что я предпочитаю делать. На работе у меня четырехъядерный процессор. Итак, для моего виртуального образа (win7) я выделил два процессора. Таким образом, я могу одновременно использовать хост-машину и виртуальную машину, и каждый из них имеет равные ресурсы ЦП.

Джоэл Мартинес
источник