Я хотел бы спросить, возможно ли зарезервировать ядра только для определенных виртуальных машин и запретить другим их использовать. Позвольте мне объяснить подробнее:
Я хотел бы закрепить 2 виртуальные машины за ядрами 0-7 и 16-23 и запретить использование этих ядер системой (kernel isolcpus, rcu_nocbs и systemd AllowedCPUs) и другими виртуальными машинами. Мне также все равно, на каких ядрах будут работать другие виртуальные машины, за исключением того, что они не должны использовать ядра 0-7 и 16-23. Также я не хочу явно прикреплять их к каким-либо определенным ядрам. Я просто хочу, чтобы они использовали любые ядра из 8-15 и 24-31.
Есть ли способ, как этого добиться?
Хочу добавить.
У меня есть 2 ВМ с GPU passthrough, закрепленные на "зарезервированных" ядрах. Я хочу, чтобы эти ядра были зарезервированы только для этих двух ВМ. Я хочу запретить ядру, systemd, другим процессам, а также kvm-qemu использовать эти зарезервированные ядра (в случае qemu, за исключением этих двух игровых ВМ, конечно). Похоже, что isolcpus rcu_nocbs и systemd AllowedCPUs работают правильно, но libvirt (или qemu, или оба) просто игнорируют эти настройки. Qemu правильно запускает эти две виртуалки на (настроенных libvirt) закрепленных ЦП, но любая другая машина, которая явно не закреплена, может работать на любом ядре, даже если оно изолировано от ядра и не разрешено для systemd.
решение1
Установите "CPUAffinity" в /etc/systemd/system.conf, чтобы выбрать, какие процессоры общим процессам ОС хоста разрешено использовать по умолчанию - т.е. наоборот, процессоры, которые вы хотите зарезервировать для использования выделенной виртуальной машиной. Параметр ядра 'isolcpus' не следует использовать, за исключением случаев настройки KVM Real-Time, поскольку он также полностью отключает планирование на процессорах, что препятствует балансировке потоков QEMU, не относящихся к VCPU.
При наличии настроек systemd виртуальные машины будут запускаться на незарезервированных ядрах по умолчанию. Затем вы можете использовать конфигурацию закрепления ЦП в libvirt для двух виртуальных машин, которые вы хотите использовать зарезервированные ядра.