KVM и сопоставление виртуальных и физических процессоров
Я относительно поздно пришел на вечеринку виртуализации, так что вы должны простить меня, если это кажется очевидным вопросом.
Если у меня есть сервер с 12 ядрами, каждый ли гость KVM имеет доступ ко всем 12 ядрам? Я понимаю, что KVM использует планировщик Linux, но на этом мое понимание "что будет дальше" заканчивается.
Моя причина для того, чтобы спросить: 10 или около того различных задач, которые мы намереваемся выполнить в гостях KVM (в целях изоляции для облегчения обновлений), не будут использовать одно ядро 100% времени, поэтому на этом основании это кажется расточительным нужно выделить 1 виртуальный процессор для каждого гостя - у нас не будет ядра с самого начала с "полным", простаивающим сервером, чтобы показать это.
Другими словами, исходя из моего описания выше, действительно ли 1 виртуальный процессор равен 12 физическим ядрам с точки зрения вычислительной мощности? Или это не так, как это работает?
Большое спасибо
Стив
3 ответа
Виртуальный процессор равняется 1 физическому ядру, но когда ваша виртуальная машина пытается что-то обработать, она может потенциально работать на любом из ядер, которые в данный момент доступны. Планировщик обрабатывает это, а виртуальная машина не знает об этом. Вы можете назначить несколько виртуальных ЦП одной виртуальной машине, что позволит ей одновременно работать на нескольких ядрах.
Ядра распределяются между всеми виртуальными машинами по мере необходимости, поэтому у вас может быть 4-ядерная система и 10 виртуальных машин, работающих на ней с 2 виртуальными ЦП, назначенными для каждой. Виртуальные машины разделяют все ядра вашей системы достаточно эффективно, как это определено планировщиком. Это одно из основных преимуществ виртуализации - максимально эффективное использование ресурсов с недостаточной подпиской для поддержки нескольких экземпляров ОС.
Если ваши виртуальные машины настолько заняты, что им приходится бороться за процессорное время, в результате виртуальным машинам, возможно, придется ждать процессорного времени. Опять же, это прозрачно для виртуальной машины и обрабатывается планировщиком.
Я не знаком с KVM, но все вышеперечисленное является общим поведением для большинства систем виртуализации.
Виртуальный процессор - это поток в процессе qemu-kvm. QEMU-KVM, конечно, многопоточный.
если вы не прикрепите процессы к конкретным ЦП, системный планировщик будет распределять время ЦП потоков из доступных ядер, а это означает, что любой виртуальный ЦП может в конечном итоге получать циклы ЦП от любого физического ядра, если он не привязан к конкретному ядру (ям).
Я порекомендую проверить, какие vCPU назначают вам виртуальные машины, они дают вам лучшую производительность. Также настройте свою рабочую нагрузку, т. Е. Привязку к процессору или к вводу-выводу, тогда есть много бесплатных инструментов для тестирования производительности, таких как Apache, метка для операции ввода-вывода и John the Ripper для операции, связанной с процессором. После того, как вы определите, какое назначение vCPU вашей ВМ дает наилучшую производительность, вы можете распространять или настраивать другие ВМ. Кроме того, мы не позаботились о производительности vCPU.
Например, если у вас есть хост с 4 ядрами, и вы хотите запустить одну виртуальную машину и назначить ей один vCPU, его производительность будет наименьшей, поскольку они будут использовать только одно ядро из 4 ядер, а остальные 3 ядра не будут использовать в то же время. Поскольку монитор виртуальной машины (VMM) или гипервизор не знает о внутренней загрузке виртуальной машины. Вы получите максимальную пропускную способность, если вы назначите 4 vcpu, в этом случае все ядро хоста будет использоваться одновременно, если ваша рабочая нагрузка многопоточная. Опять же, если вы увеличите еще одно ядро, т. Е. Выделите более 4 доступных виртуальных ЦП, вы можете получить снижение производительности. Хорошо только, что у вас больше виртуальной виртуальной машины, и у вас есть опасения, что одна из виртуальных машин будет перенесена на другой сервер или выключена, тогда все равно будет использоваться все ядро, иначе это будет бесполезно, если не настроить перераспределение.