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

Стратегия закрепления процессора для kvm / centos7

Я перехожу с Xen на Kvm.

В Xen я мог легко закрепить центральный процессор на гостевой vms, а также закрепить хост-процессор на "dom0" .

В Kvm я также могу легко привязать ЦП хоста к гостевым ВМ, но, насколько я могу судить, ничто не мешает приложению, запущенному в ОС хоста, использовать эти ЦП. Я хочу предотвратить случай, когда программа, запущенная на хосте, истощает / увеличивает задержку гостей.

Я мог бы вручную создать сложную политику cgroup, но, может быть, мне просто не хватает настройки в libvirt / centos7?

Также есть настройка «emulatorpin» для гостей. Должен ли я привязать «эмулятор» к процессору выделенного хоста или просто ограничить его гостевым процессором ? Цель состоит в том, чтобы максимально ограничить задержку для гостя..

Если я правильно понимаю ваш вопрос, вы хотите ограничить гипервизор, чтобы он мог использовать только один процессор / ядро ​​(или ограниченное количество) для своих собственных процессов, обработки прерываний и всего остального. И что все остальные ядра могут быть назначены libvirt для гостевых систем.

Относительно просто isolcpus параметр загрузки, который позволяет изолировать один или несколько процессоров от планировщика. Это не позволяет планировщику планировать любые потоки пользовательского пространства на этом процессоре.

т.е. на вашем гипервизоре в /etc/default/grub устанавливать:

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

isolcpus сейчас устарел:

          [Deprecated - use cpusets instead]
          Format: [flag-list,]<cpu-list>```

использовать cpuset с участием libvirt

В Linux, если вы хотите, чтобы процесс использовал только определенный процессор на вашем хосте, taskset команда может помочь

запуск новой программы на двух процессорах:

taskset -c 0,2 /home/app/myprogramm

Чтобы изменить привязку к процессору для уже запущенного процесса:

taskset -p -c 0,2 <pid_of_your_proccess>

в kvm нет dom0, у вас есть модуль ядра kvm, поэтому все интегрировано в ядро, это не похоже на xen, когда у вас есть dom0 в качестве привилегированного домена, поэтому вы можете закрепить процесс, который запускает ядро.