Стратегия закрепления процессора для KVM / Centos7
Я мигрирую из Xen в Kvm.
В Xen я смог легко привязать процессор хоста к гостевому vms, а также прикрепить процессор хоста к "dom0".
В Kvm я также могу легко прикрепить процессор хоста к гостевым vms, но, насколько я вижу, ничто не мешает приложениям, запущенным на хост-ОС, использовать эти процессоры. Я хочу предотвратить случай, когда программа, запущенная на хосте, истощает / увеличивает задержку гостей.
Я мог бы вручную разработать сложную политику cgroup, но, может быть, я просто пропустил настройку в libvirt / centos7?
Также для гостей предусмотрена настройка "emulatorpin". Должен ли я прикрепить "эмулятор" к выделенному процессору хоста или просто ограничить его гостевым процессором? Цель состоит в том, чтобы максимально ограничить время ожидания гостя.
3 ответа
Если я правильно понимаю ваш вопрос, чего вы хотите добиться, так это ограничить гипервизор, чтобы он мог использовать только один процессор / ядро (или ограниченное число) для своих собственных процессов, обработки прерываний и всего остального. И что все остальные ядра могут быть назначены libvirt для гостевых систем.
Относительно простым является isolcpus
загрузочный параметр, который позволяет изолировать один или несколько процессоров от планировщика. Это не позволяет планировщику планировать любые потоки пользовательского пространства на этом процессоре.
т.е. на вашем гипервизоре в /etc/default/grub
задавать:
GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"
это должно препятствовать использованию ядер> 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 в качестве привилегированного домена, так что вы можете закрепить процесс, который запускает ядро.