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