Стратегия закрепления ЦП для kvm / centos7

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

В Xen я мог легко привязать ЦП хоста к гостевому виртуальному компьютеру, а также для закрепления процессора хоста на «dom0» .

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

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

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

3
задан 12 September 2017 в 17:00
3 ответа

Если я правильно понимаю ваш вопрос, вы хотите ограничить гипервизор, чтобы он мог использовать только один процессор / ядро ​​(или ограниченное количество) для своих собственных процессов, обработки прерываний и все. И что все остальные ядра могут быть назначены 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

4
ответ дан 3 December 2019 в 05:23

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

запустить новую программу на двух процессорах:

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

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

taskset -p -c 0,2 <pid_of_your_proccess>

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

enter image description here

1
ответ дан 3 December 2019 в 05:23

isolcpus теперь не рекомендуется :

  [Устарело - используйте вместо этого cpusets]
  Формат: [список-флагов,] <список-ЦП> `` `
 

используйте cpuset с libvirt

1
ответ дан 3 December 2019 в 05:23

Теги

Похожие вопросы