Я перехожу с Xen на Kvm.
В Xen я мог легко привязать ЦП хоста к гостевому виртуальному компьютеру, а также для закрепления процессора хоста на «dom0» .
В Kvm я также могу легко закрепить процессор хоста на гостевых виртуальных машинах, но, насколько я могу видеть, ничто не мешает запуску приложения на ОС хоста для использования этих процессоров. Я хочу предотвратить случай, когда программа, запущенная на хосте, истощает / увеличивает задержку для гостей.
Я мог бы вручную создать сложную политику cgroup, но, может быть, мне просто не хватает настройки в libvirt / centos7?
Также есть настройка «emulatorpin» для гостей. Должен ли я привязать «эмулятор» к процессору выделенного хоста или просто ограничить его гостевым процессором ? Цель состоит в том, чтобы максимально ограничить задержку на гостевой системе .
Если я правильно понимаю ваш вопрос, вы хотите ограничить гипервизор, чтобы он мог использовать только один процессор / ядро (или ограниченное количество) для своих собственных процессов, обработки прерываний и все. И что все остальные ядра могут быть назначены libvirt для гостевых систем.
Относительно простым является параметр загрузки isolcpus
, который позволяет изолировать один или несколько процессоров от планировщика. Это не позволяет планировщику планировать любые потоки пользовательского пространства на этом процессоре.
т.е. на вашем гипервизоре в / etc / default / grub
set:
GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"
, который должен запретить любым программам пользовательского пространства на гипервизоре использовать ядра> 1. Libvirt может затем закрепить виртуальные серверы на оставшихся свободных ядрах.
Я не уверен, что параметр загрузки isolcpus
также гарантирует, что все прерывания будут ограничены этими ядрами. В противном случае прерывания также имеют собственное свойство сродства, smp_affinity
, которое определяет процессоры, которые будут обрабатывать запрос прерывания.
Значение сродства прерывания для конкретного запроса прерывания хранится в соответствующем файле / proc / irq / irq_number / smp_affinity
, а значение по умолчанию устанавливается в / proc / irq / default_smp_affinity
. smp_affinity хранится как шестнадцатеричная битовая маска, представляющая все процессоры в системе. Значение по умолчанию - f, что означает, что запрос прерывания может быть обработан на любом процессоре в системе. Установка этого значения на 1 означает, что только процессор 0 может обрабатывать прерывание.
Инструмент для управления процессором и планированием сродства для RHEL и CentOS 7 называется tuna
В Linux, если вы хотите, чтобы процесс использовал только определенный процессор на вашем хосте, команда taskset
может помочь
запустить новую программу на двух процессорах:
taskset -c 0,2 /home/app/myprogramm
Чтобы изменить сродство процессора уже запущенной программы:
taskset -p -c 0,2 <pid_of_your_proccess>
нет dom0 в kvm, у вас есть модуль ядра kvm, так что все интегрировано в ядро, а не как в xen, что у вас есть dom0 в качестве привилегированного домена, так что вы можете прикрепить процесс, который запускает ядро.
isolcpus
теперь не рекомендуется :
[Устарело - используйте вместо этого cpusets] Формат: [список-флагов,] <список-ЦП> `` `
используйте cpuset
с libvirt