Я собираюсь настроить гипервизор KVM на несколько виртуальных машин.
Гипервизор KVM имеет 8 физических ядер (16 с HyperThreading). Я хочу создать на нем 8 виртуальных машин, но не могу понять, какая разница будет иметь на нем закрепление процессора.
Какая будет разница, когда я прикреплю каждую виртуальную машину к другому ядру, по сравнению с тем, когда я прикреплю все виртуальные машины ко всем ядрам (установив привязку к процессору 0-15)
Будет ли это иметь какие-то преимущества в производительности?
Я предполагаю, что у меня будут некоторые преимущества кеширования, но будет ли разница, если я захочу передавать трафик на все виртуальные машины?
Закрепление ЦП гарантирует, что виртуальная машина будет получать время ЦП только от определенного ЦП или набора ЦП. Если у вас нет особой причины для закрепления, обычно в этом нет необходимости.
Я уверен, что вы можете получить прирост производительности, если прикрепите каждую виртуальную машину к определенным ядрам процессора, а также ограничите гипервизор одним или двумя другими ядрами.
Это позволит вашей виртуальной машине оптимально использовать кеши L1 и L2, которые зависят от ЦП, и их не будут беспокоить прерывания от сетевых адаптеров и контроллеров хранилища.
С другой стороны, я ожидаю, что гипервизор уже пытается направить в основном события ЦП одного и того же виртуального ЦП на одно и то же физическое ядро, и я сомневаюсь, что это будет значительный прирост производительности если вы вручную установите что-то более строгое.
Недостатки этого также довольно очевидны: когда вы назначаете больше ядер виртуальным гостям, чем имеется доступных физических ядер, маловероятно, что ваше ручное закрепление ЦП работает лучше, чем гипервизор. Также будет ад при использовании живых миграций.