Назад | Перейти на главную страницу

KVM: максимальное количество ядер и объем памяти для виртуальных машин

У меня новая 8-ядерная машина с 16 ГБ оперативной памяти. Я хочу запустить на нем виртуальные машины, используя Ubuntu и KVM. На хосте не будет работать ничего, кроме SSH.

Мой вопрос в том, что такое максимум количество ядер и оперативной памяти, которые я могу использовать для виртуальных машин. Могу ли я создать 4 виртуальных машины и назначить каждой по 2 ядра и 4 ГБ ОЗУ? Возникнут ли проблемы с такой настройкой в ​​ОС хоста?

Другими словами, что такое минимум количество ядер и ОЗУ, необходимое хосту для запуска виртуальных машин? Достаточно ли 1 ядра и 1 ГБ ОЗУ для запуска виртуальных машин.

максимума как такового нет, как и реального максимума памяти. Следует иметь в виду следующее:

  • V-CPU KVM для хоста - это просто поток в процессе KVM. Если вы запускаете больше потоков, чем у вас есть физических ядер, они будут конкурировать за эти ядра, и планировщик хоста должен будет позаботиться о выделении им процессорного времени.
  • Избегайте выделения большего количества виртуальных процессоров на одну виртуальную машину с физическими ядрами на хосте.
  • Не считайте HT-ядра настоящими.
  • Если возможно, не выделяйте всем виртуальным машинам больше виртуальных процессоров, чем у вас есть физических ядер, если время ЦП на виртуальных машинах критично. Однако в менее загруженных системах вы можете легко перевыполнить выделение до некоторых действительно безумных соотношений (я видел систему с 8 ядрами, на которых работает 150 в основном простаивающих виртуальных машин с 2 ядрами каждая без проблем)

Что касается распределения ОЗУ, здесь в основном те же мысли:

  • виртуальная машина - это просто еще один процесс для хоста, и у процесса будет ограничение памяти, которое он может использовать
  • Если вы попытаетесь использовать больше оперативной памяти, которая у вас есть на самом деле, вы попадете в своп, который очень медленный по сравнению с RAM.
  • KVM предоставляет способы перераспределения памяти - для этого есть Balooning и KSM.

Итак, сказав это, вам необходимо учитывать, что абсолютно необходимо вашим виртуальным машинам (не просто давайте виртуальной машине 4 ядра, потому что вы можете, дайте ей минимум, необходимый для запуска, и добавьте больше позже, если вы заметите проблемы с производительностью).
Будьте осторожны с распределением памяти - вы никогда не захотите попасть в подкачку.

В дополнение к соображениям, которые рассмотрел @dyasny, вам также необходимо учитывать, сколько сокетов имеется на вашем хосте.

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

Я раньше сталкивался с этой проблемой, но YMMV. Проверьте свою настройку.

Накладные расходы на хост-систему составляют несколько сотен МБ, вы можете проверить их сразу при загрузке с помощью бесплатной команды.

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